Skip to content

Commit de08860

Browse files
committed
Change waitcnt to take an attribute because it's an immarg in LLVM
1 parent 6b1ff42 commit de08860

File tree

5 files changed

+9
-13
lines changed

5 files changed

+9
-13
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ def ROCDL_GridDimZOp : ROCDL_DeviceFunctionOp<"grid.dim.z",
196196

197197
// Emits the waintcnt instruction. The bitfield's semantics depend
198198
// on the target chipset
199-
def ROCDL_WaitcntOp : ROCDL_Op<"waitcnt">, Arguments<(ins I32:$bitfield)> {
199+
def ROCDL_WaitcntOp : ROCDL_Op<"waitcnt">, Arguments<(ins I32Attr:$bitfield)> {
200200
string llvmBuilder = [{
201201
createIntrinsicCall(builder, llvm::Intrinsic::amdgcn_s_waitcnt,
202-
{$bitfield});
202+
{builder.getInt32($bitfield)});
203203
}];
204204
let assemblyFormat = "attr-dict $bitfield";
205205
}

mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,7 @@ struct LDSBarrierOpLowering : public ConvertOpToLLVMPattern<LDSBarrierOp> {
316316
<< chipset.majorVersion;
317317

318318
Location loc = op->getLoc();
319-
Value constant = createI32Constant(rewriter, loc, ldsOnlyBits);
320-
rewriter.create<ROCDL::WaitcntOp>(loc, constant);
319+
rewriter.create<ROCDL::WaitcntOp>(loc, ldsOnlyBits);
321320
rewriter.replaceOpWithNewOp<ROCDL::SBarrierOp>(op);
322321
return success();
323322
}

mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,9 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_i64(%src : i64, %cmp : i64, %buf : m
217217
func.func @lds_barrier() {
218218
// GFX908: llvm.inline_asm has_side_effects asm_dialect = att
219219
// GFX908-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier"
220-
// GFX90A: %[[cst:.*]] = llvm.mlir.constant(-7937 : i32) : i32
221-
// GFX90A: rocdl.waitcnt %[[cst]]
220+
// GFX90A: rocdl.waitcnt -7937
222221
// GFX90A-NEXT: rocdl.s.barrier
223-
// GFX10: %[[cst:.*]] = llvm.mlir.constant(-16129 : i32) : i32
224-
// GFX10: rocdl.waitcnt %[[cst]]
222+
// GFX10: rocdl.waitcnt -16129
225223
// GFX10-NEXT: rocdl.s.barrier
226224
// GFX11: llvm.inline_asm has_side_effects asm_dialect = att
227225
// GFX11-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier"

mlir/test/Dialect/LLVMIR/rocdl.mlir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -363,10 +363,10 @@ llvm.func @rocdl_8bit_floats(%source: i32, %stoch: i32) -> i32 {
363363
llvm.return %source5 : i32
364364
}
365365

366-
llvm.func @rocdl.waitcnt(%arg0 : i32) {
366+
llvm.func @rocdl.waitcnt() {
367367
// CHECK-LABEL: rocdl.waitcnt
368-
// CHECK: rocdl.waitcnt
369-
rocdl.waitcnt %arg0
368+
// CHECK: rocdl.waitcnt 0
369+
rocdl.waitcnt 0
370370
llvm.return
371371
}
372372

mlir/test/Target/LLVMIR/rocdl.mlir

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ llvm.func @rocdl.bpermute(%src : i32) -> i32 {
9191
llvm.func @rocdl.waitcnt() {
9292
// CHECK-LABEL: rocdl.waitcnt
9393
// CHECK-NEXT: call void @llvm.amdgcn.s.waitcnt(i32 0)
94-
%0 = llvm.mlir.constant(0 : i32) : i32
95-
rocdl.waitcnt %0
94+
rocdl.waitcnt 0
9695
llvm.return
9796
}
9897

0 commit comments

Comments
 (0)