Skip to content

Commit d741435

Browse files
authored
[MLIR][ROCDL] Added SchedGroupBarrier and IglpOpt ops (#112237)
This PR adds missing `sched.group.barrier` and `rocdl.iglp.opt` ops to the ROCDL dialect (see [here](https://github.com/llvm/llvm-project/blob/ec78f0da0e9b1b8e2b2323e434ea742e272dd913/clang/include/clang/Basic/BuiltinsAMDGPU.def#L66-L68)). The ops are converted to the corresponding intrinsic calls during the translation from MLIR to LLVM IRs. This intrinsics are hints to the instruction scheduler of the AMDGPU backend.
1 parent 2e8ad49 commit d741435

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,24 @@ def ROCDL_SchedBarrier : ROCDL_IntrOp<"sched.barrier", [], [], [], 0>,
297297
"createIntrinsicCall(builder, llvm::Intrinsic::amdgcn_sched_barrier,builder.getInt32(op.getMask()));";
298298
}
299299

300+
def ROCDL_SchedGroupBarrier : ROCDL_IntrOp<"sched.group.barrier", [], [], [], 0>,
301+
Arguments<(ins I32Attr:$mask, I32Attr:$size, I32Attr:$groupId)> {
302+
let results = (outs);
303+
let assemblyFormat = "$mask `,` $size `,` $groupId attr-dict";
304+
string llvmBuilder = [{
305+
createIntrinsicCall(builder,
306+
llvm::Intrinsic::amdgcn_sched_group_barrier,
307+
{builder.getInt32(op.getMask()), builder.getInt32(op.getSize()), builder.getInt32(op.getGroupId())});
308+
}];
309+
}
310+
311+
def ROCDL_IglpOpt : ROCDL_IntrOp<"iglp.opt", [], [], [], 0>,
312+
Arguments<(ins I32Attr:$variant)> {
313+
let results = (outs);
314+
let assemblyFormat = "$variant attr-dict";
315+
string llvmBuilder =
316+
"createIntrinsicCall(builder, llvm::Intrinsic::amdgcn_iglp_opt,builder.getInt32(op.getVariant()));";
317+
}
300318

301319
//===---------------------------------------------------------------------===//
302320
// Xdlops intrinsics

mlir/test/Dialect/LLVMIR/rocdl.mlir

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ func.func @rocdl.sched_barrier() {
4141
llvm.return
4242
}
4343

44+
func.func @rocdl_sched_group_barrier() {
45+
// CHECK: rocdl.sched.group.barrier
46+
rocdl.sched.group.barrier 8, 1, 0
47+
llvm.return
48+
}
49+
50+
func.func @rocdl_iglp_opt() {
51+
// CHECK: rocdl.iglp.opt
52+
rocdl.iglp.opt 0
53+
llvm.return
54+
}
55+
4456
func.func @rocdl.setprio() {
4557
// CHECK: rocdl.s.setprio
4658
rocdl.s.setprio 0

mlir/test/Target/LLVMIR/rocdl.mlir

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,22 @@ llvm.func @rocdl.schedbarrier() {
179179
llvm.return
180180
}
181181

182+
llvm.func @rocdl.sched.group.barrier() {
183+
// CHECK-LABEL: rocdl.sched.group.barrier
184+
// CHECK-NEXT: call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
185+
rocdl.sched.group.barrier 8, 1, 0
186+
llvm.return
187+
}
188+
189+
llvm.func @rocdl.iglp.opt() {
190+
// CHECK-LABEL: rocdl.iglp.opt
191+
// CHECK-NEXT: call void @llvm.amdgcn.iglp.opt(i32 0)
192+
rocdl.iglp.opt 0
193+
// CHECK-NEXT: call void @llvm.amdgcn.iglp.opt(i32 1)
194+
rocdl.iglp.opt 1
195+
llvm.return
196+
}
197+
182198
llvm.func @rocdl.xdlops(%arg0 : f32, %arg1 : f32,
183199
%arg2 : vector<32 x f32>, %arg3: i32,
184200
%arg4 : vector<16 x f32>, %arg5 : vector<4xf32>,

0 commit comments

Comments
 (0)