Skip to content

Commit 15b03fc

Browse files
author
git apple-llvm automerger
committed
Merge commit 'ecea2b542b8b' from llvm.org/main into next
2 parents bd4cbcf + ecea2b5 commit 15b03fc

File tree

2 files changed

+53
-38
lines changed

2 files changed

+53
-38
lines changed

mlir/lib/Dialect/GPU/IR/GPUDialect.cpp

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -535,17 +535,26 @@ parseAttributions(OpAsmParser &parser, StringRef keyword,
535535
/*allowType=*/true);
536536
}
537537

538-
/// Prints a GPU function memory attribution.
539538
static void printAttributions(OpAsmPrinter &p, StringRef keyword,
540-
ArrayRef<BlockArgument> values) {
539+
ArrayRef<BlockArgument> values,
540+
ArrayAttr attributes = {}) {
541541
if (values.empty())
542542
return;
543543

544-
auto printBlockArg = [](BlockArgument v) {
545-
return llvm::formatv("{} : {}", v, v.getType());
546-
};
547-
p << ' ' << keyword << '('
548-
<< llvm::interleaved(llvm::map_range(values, printBlockArg)) << ')';
544+
p << ' ' << keyword << '(';
545+
llvm::interleaveComma(
546+
llvm::enumerate(values), p, [&p, attributes](auto pair) {
547+
BlockArgument v = pair.value();
548+
p << v << " : " << v.getType();
549+
550+
size_t attributionIndex = pair.index();
551+
DictionaryAttr attrs;
552+
if (attributes && attributionIndex < attributes.size())
553+
attrs = llvm::cast<DictionaryAttr>(attributes[attributionIndex]);
554+
if (attrs)
555+
p.printOptionalAttrDict(attrs.getValue());
556+
});
557+
p << ')';
549558
}
550559

551560
/// Verifies a GPU function memory attribution.
@@ -1649,28 +1658,6 @@ ParseResult GPUFuncOp::parse(OpAsmParser &parser, OperationState &result) {
16491658
return parser.parseRegion(*body, entryArgs);
16501659
}
16511660

1652-
static void printAttributions(OpAsmPrinter &p, StringRef keyword,
1653-
ArrayRef<BlockArgument> values,
1654-
ArrayAttr attributes) {
1655-
if (values.empty())
1656-
return;
1657-
1658-
p << ' ' << keyword << '(';
1659-
llvm::interleaveComma(
1660-
llvm::enumerate(values), p, [&p, attributes](auto pair) {
1661-
BlockArgument v = pair.value();
1662-
p << v << " : " << v.getType();
1663-
1664-
size_t attributionIndex = pair.index();
1665-
DictionaryAttr attrs;
1666-
if (attributes && attributionIndex < attributes.size())
1667-
attrs = llvm::cast<DictionaryAttr>(attributes[attributionIndex]);
1668-
if (attrs)
1669-
p.printOptionalAttrDict(attrs.getValue());
1670-
});
1671-
p << ')';
1672-
}
1673-
16741661
void GPUFuncOp::print(OpAsmPrinter &p) {
16751662
p << ' ';
16761663
p.printSymbolName(getName());

mlir/test/Dialect/GPU/ops.mlir

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,31 @@ module attributes {gpu.container_module} {
6868
return
6969
}
7070

71+
// CHECK-LABEL: func @launch_with_attributions(
72+
func.func @launch_with_attributions(%blk : index, %thrd : index, %float : f32, %data : memref<?xf32,1>) {
73+
// CHECK: gpu.launch
74+
gpu.launch blocks(%bx, %by, %bz) in (%grid_x = %blk, %grid_y = %blk, %grid_z = %blk)
75+
threads(%tx, %ty, %tz) in (%block_x = %thrd, %block_y = %thrd, %block_z = %thrd)
76+
// CHECK-SAME: workgroup(%[[WGROUP1:.*]] : memref<42xf32, 3>, %[[WGROUP2:.*]] : memref<2xf32, 3>)
77+
workgroup(%arg1: memref<42xf32, 3>, %arg2: memref<2xf32, 3>)
78+
// CHECK-SAME: private(%[[PRIVATE1:.*]] : memref<2xf32, 5>, %[[PRIVATE2:.*]] : memref<1xf32, 5>)
79+
private(%arg3: memref<2xf32, 5>, %arg4: memref<1xf32, 5>)
80+
{
81+
"use"(%float) : (f32) -> ()
82+
"use"(%data) : (memref<?xf32,1>) -> ()
83+
// CHECK: "use"(%[[WGROUP1]], %[[WGROUP2]])
84+
"use"(%arg1, %arg2) : (memref<42xf32, 3>, memref<2xf32, 3>) -> ()
85+
// CHECK: "use"(%[[PRIVATE1]])
86+
"use"(%arg3) : (memref<2xf32, 5>) -> ()
87+
// CHECK: "use"(%[[PRIVATE2]])
88+
"use"(%arg4) : (memref<1xf32, 5>) -> ()
89+
// CHECK: gpu.terminator
90+
gpu.terminator
91+
}
92+
return
93+
}
94+
95+
7196
gpu.module @kernels {
7297
gpu.func @kernel_1(%arg0 : f32, %arg1 : memref<?xf32, 1>) kernel {
7398
%tIdX = gpu.thread_id x
@@ -228,17 +253,20 @@ module attributes {gpu.container_module} {
228253

229254
gpu.module @gpu_funcs {
230255
// CHECK-LABEL: gpu.func @kernel_1({{.*}}: f32)
231-
// CHECK: workgroup
232-
// CHECK: private
233-
// CHECK: attributes
234256
gpu.func @kernel_1(%arg0: f32)
235-
workgroup(%arg1: memref<42xf32, 3>)
236-
private(%arg2: memref<2xf32, 5>, %arg3: memref<1xf32, 5>)
257+
// CHECK: workgroup(%[[WGROUP1:.*]] : memref<42xf32, 3>, %[[WGROUP2:.*]] : memref<2xf32, 3>)
258+
workgroup(%arg1: memref<42xf32, 3>, %arg2: memref<2xf32, 3>)
259+
// CHECK: private(%[[PRIVATE1:.*]] : memref<2xf32, 5>, %[[PRIVATE2:.*]] : memref<1xf32, 5>)
260+
private(%arg3: memref<2xf32, 5>, %arg4: memref<1xf32, 5>)
237261
kernel
238-
attributes {foo="bar"} {
239-
"use"(%arg1) : (memref<42xf32, 3>) -> ()
240-
"use"(%arg2) : (memref<2xf32, 5>) -> ()
241-
"use"(%arg3) : (memref<1xf32, 5>) -> ()
262+
// CHECK: attributes {foo = "bar"}
263+
attributes {foo = "bar"} {
264+
// CHECK: "use"(%[[WGROUP1]], %[[WGROUP2]])
265+
"use"(%arg1, %arg2) : (memref<42xf32, 3>, memref<2xf32, 3>) -> ()
266+
// CHECK: "use"(%[[PRIVATE1]])
267+
"use"(%arg3) : (memref<2xf32, 5>) -> ()
268+
// CHECK: "use"(%[[PRIVATE2]])
269+
"use"(%arg4) : (memref<1xf32, 5>) -> ()
242270
gpu.return
243271
}
244272

0 commit comments

Comments
 (0)