Skip to content

Commit bfcd3fa

Browse files
authored
[mlir] Add result name for gpu.block_id and gpu.thread_id ops. (#83393)
expand-arith-ops.mlir fails on windows, but this is unrelated to this PR
1 parent 3196005 commit bfcd3fa

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

mlir/include/mlir/Dialect/GPU/IR/GPUOps.td

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ include "mlir/IR/EnumAttr.td"
2424
include "mlir/IR/SymbolInterfaces.td"
2525
include "mlir/Interfaces/ControlFlowInterfaces.td"
2626
include "mlir/Interfaces/DataLayoutInterfaces.td"
27+
include "mlir/IR/OpAsmInterface.td"
2728
include "mlir/Interfaces/FunctionInterfaces.td"
2829
include "mlir/Interfaces/InferIntRangeInterface.td"
2930
include "mlir/Interfaces/InferTypeOpInterface.td"
@@ -50,9 +51,21 @@ def GPU_DimensionAttr : EnumAttr<GPU_Dialect, GPU_Dimension, "dim">;
5051

5152
class GPU_IndexOp<string mnemonic, list<Trait> traits = []> :
5253
GPU_Op<mnemonic, !listconcat(traits, [
53-
Pure, DeclareOpInterfaceMethods<InferIntRangeInterface>])>,
54+
Pure,
55+
DeclareOpInterfaceMethods<InferIntRangeInterface>,
56+
DeclareOpInterfaceMethods<OpAsmOpInterface, ["getAsmResultNames"]>])>,
5457
Arguments<(ins GPU_DimensionAttr:$dimension)>, Results<(outs Index)> {
5558
let assemblyFormat = "$dimension attr-dict";
59+
let extraClassDefinition = [{
60+
void $cppClass::getAsmResultNames(
61+
llvm::function_ref<void(mlir::Value, mlir::StringRef)> setNameFn) {
62+
auto dimStr = stringifyDimension(getDimensionAttr().getValue());
63+
auto opName = getOperationName();
64+
assert(opName.consume_front("gpu."));
65+
SmallString<8> resultName({opName, "_", dimStr});
66+
setNameFn(getResult(),resultName);
67+
}
68+
}];
5669
}
5770

5871
def GPU_ClusterDimOp : GPU_IndexOp<"cluster_dim"> {

mlir/test/Dialect/GPU/ops.mlir

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,39 @@ module attributes {gpu.container_module} {
5959
gpu.module @kernels {
6060
gpu.func @kernel_1(%arg0 : f32, %arg1 : memref<?xf32, 1>) kernel {
6161
%tIdX = gpu.thread_id x
62+
// CHECK: thread_id_x
6263
%tIdY = gpu.thread_id y
64+
// CHECK-NEXT: thread_id_y
6365
%tIdZ = gpu.thread_id z
66+
// CHECK-NEXT: thread_id_z
6467

6568
%bDimX = gpu.block_dim x
69+
// CHECK-NEXT: block_dim_x
6670
%bDimY = gpu.block_dim y
71+
// CHECK-NEXT: block_dim_y
6772
%bDimZ = gpu.block_dim z
73+
// CHECK-NEXT: block_dim_z
6874

6975
%bIdX = gpu.block_id x
76+
// CHECK-NEXT: block_id_x
7077
%bIdY = gpu.block_id y
78+
// CHECK-NEXT: block_id_y
7179
%bIdZ = gpu.block_id z
80+
// CHECK-NEXT: block_id_z
7281

7382
%gDimX = gpu.grid_dim x
83+
// CHECK-NEXT: grid_dim_x
7484
%gDimY = gpu.grid_dim y
85+
// CHECK-NEXT: grid_dim_y
7586
%gDimZ = gpu.grid_dim z
87+
// CHECK-NEXT: grid_dim_z
7688

7789
%gIdX = gpu.global_id x
90+
// CHECK-NEXT: global_id_x
7891
%gIdY = gpu.global_id y
92+
// CHECK-NEXT: global_id_y
7993
%gIdZ = gpu.global_id z
94+
// CHECK-NEXT: global_id_z
8095

8196
%sgId = gpu.subgroup_id : index
8297
%numSg = gpu.num_subgroups : index

mlir/test/python/dialects/gpu/dialect.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ def testMMAElementWiseAttr():
2727
module = Module.create()
2828
with InsertionPoint(module.body):
2929
gpu.BlockDimOp(gpu.Dimension.y)
30-
# CHECK: %0 = gpu.block_dim y
30+
# CHECK: %block_dim_y = gpu.block_dim y
3131
print(module)
3232
pass

0 commit comments

Comments
 (0)