Skip to content

Commit 885f876

Browse files
committed
[MLIR][ROCDL] Added SchedGroupBarrier and IglpOpt ops
1 parent d4efc3e commit 885f876

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: mlir-opt %s -split-input-file -verify-diagnostics | FileCheck %s
2+
// RUN: mlir-opt %s -split-input-file -verify-diagnostics -convert-to-llvm | mlir-translate -mlir-to-llvmir | FileCheck %s -check-prefix=ROCDL2LLVM
23

34
func.func @rocdl_special_regs() -> i32 {
45
// CHECK-LABEL: rocdl_special_regs
@@ -387,3 +388,26 @@ gpu.module @module_1 [#rocdl.target<O = 1, chip = "gfx900", abi = "500", link =
387388

388389
gpu.module @module_2 [#rocdl.target<chip = "gfx900">, #rocdl.target<chip = "gfx90a">] {
389390
}
391+
392+
// -----
393+
394+
// ROCDL2LLVM: @rocdl_sched_barrier
395+
func.func @rocdl_sched_barrier() {
396+
// ROCDL2LLVM-NEXT: call void @llvm.amdgcn.sched.barrier(i32 0)
397+
rocdl.sched.barrier 0
398+
llvm.return
399+
}
400+
401+
// ROCDL2LLVM: @rocdl_sched_group_barrier
402+
func.func @rocdl_sched_group_barrier() {
403+
// ROCDL2LLVM-NEXT: call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
404+
rocdl.sched.group.barrier 8, 1, 0
405+
llvm.return
406+
}
407+
408+
// ROCDL2LLVM: @rocdl_iglp_opt
409+
func.func @rocdl_iglp_opt() {
410+
// ROCDL2LLVM-NEXT: call void @llvm.amdgcn.iglp.opt(i32 0)
411+
rocdl.iglp.opt 0
412+
llvm.return
413+
}

0 commit comments

Comments
 (0)