Skip to content

Commit 5135c4f

Browse files
committed
[ROCDL] Added missing named barrier ops (gfx1250)
1 parent 71586a6 commit 5135c4f

File tree

3 files changed

+122
-1
lines changed

3 files changed

+122
-1
lines changed

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,18 +292,56 @@ def ROCDL_BarrierOp : ROCDL_Op<"barrier"> {
292292
let assemblyFormat = "attr-dict";
293293
}
294294

295+
def ROCDLBufferLDS : LLVM_PointerInAddressSpace<3>;
296+
297+
def ROCDL_BarrierInitOp : ROCDL_IntrOp<"s.barrier.init", [], [], [Pure], 0, 0, 0, 0, [1], ["id"]>,
298+
Arguments<(ins Arg<ROCDLBufferLDS, "", [MemRead]>:$ptr, I32Attr:$id)> {
299+
let results = (outs);
300+
let assemblyFormat = "$ptr `,` $id attr-dict";
301+
}
302+
295303
def ROCDL_BarrierSignalOp : ROCDL_ConcreteNonMemIntrOp<"s.barrier.signal", [], 0, [0], ["id"]>,
296304
Arguments<(ins I32Attr:$id)> {
297305
let results = (outs);
298306
let assemblyFormat = "$id attr-dict";
299307
}
300308

309+
def ROCDL_BarrierSignalVarOp : ROCDL_IntrOp<"s.barrier.signal.var", [], [], [Pure], 0, 0, 0, 0, [1], ["id"]>,
310+
Arguments<(ins Arg<ROCDLBufferLDS, "", [MemRead]>:$ptr, I32Attr:$id)> {
311+
let results = (outs);
312+
let assemblyFormat = "$ptr `,` $id attr-dict";
313+
}
314+
315+
def ROCDL_BarrierJoinOp : ROCDL_IntrOp<"s.barrier.join", [], [], [Pure], 0>,
316+
Arguments<(ins Arg<ROCDLBufferLDS, "", [MemRead]>:$ptr)> {
317+
let results = (outs);
318+
let assemblyFormat = "$ptr attr-dict";
319+
}
320+
321+
def ROCDL_BarrierLeaveOp : ROCDL_ConcreteNonMemIntrOp<"s.barrier.leave", [], 0, [0], ["id"]>,
322+
Arguments<(ins I16Attr:$id)> {
323+
let results = (outs);
324+
let assemblyFormat = "$id attr-dict";
325+
}
326+
301327
def ROCDL_BarrierWaitOp : ROCDL_ConcreteNonMemIntrOp<"s.barrier.wait", [], 0, [0], ["id"]>,
302328
Arguments<(ins I16Attr:$id)> {
303329
let results = (outs);
304330
let assemblyFormat = "$id attr-dict";
305331
}
306332

333+
def ROCDL_BarrierSignalIsfirstOp : ROCDL_ConcreteNonMemIntrOp<"s.barrier.signal.isfirst", [], 1, [0], ["id"]>,
334+
Arguments<(ins I32Attr:$id)> {
335+
let results = (outs I1:$res);
336+
let assemblyFormat = "$id attr-dict `:` type($res)";
337+
}
338+
339+
def ROCDL_GetBarrierStateOp : ROCDL_ConcreteNonMemIntrOp<"s.get.barrier.state", [], 1, [0], ["id"]>,
340+
Arguments<(ins I32Attr:$id)> {
341+
let results = (outs I32:$res);
342+
let assemblyFormat = "$id attr-dict `:` type($res)";
343+
}
344+
307345
def ROCDL_WaitDscntOp: ROCDL_ConcreteNonMemIntrOp<"s.wait.dscnt", [], 0, [0], ["count"]>,
308346
Arguments<(ins I16Attr:$count)> {
309347
let summary = "Wait until DSCNT is less than or equal to `count`";
@@ -497,7 +535,6 @@ def ROCDL_wmma_i32_16x16x32_iu4 : ROCDL_Wmma_IntrOp<"wmma.i32.16x16x32.iu4", [1]
497535
// LDS transpose intrinsics (available in GFX950)
498536

499537
def ROCDLGlobalBuffer : LLVM_PointerInAddressSpace<1>;
500-
def ROCDLBufferLDS : LLVM_PointerInAddressSpace<3>;
501538

502539
class ROCDL_LDS_Read_Tr_IntrOp<string mnemonic> :
503540
ROCDL_IntrOp<mnemonic, [1], [], [], 1, 0, 1> {

mlir/test/Dialect/LLVMIR/rocdl.mlir

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,20 +951,62 @@ llvm.func @rocdl.s.barrier() {
951951
llvm.return
952952
}
953953

954+
llvm.func @rocdl.s.barrier.init(%ptr : !llvm.ptr<3>) {
955+
// CHECK-LABEL: rocdl.s.barrier.init
956+
// CHECK: rocdl.s.barrier.init %[[PTR:.+]], 1
957+
rocdl.s.barrier.init %ptr, 1
958+
llvm.return
959+
}
960+
954961
llvm.func @rocdl.s.barrier.signal() {
955962
// CHECK-LABEL: rocdl.s.barrier.signal
956963
// CHECK: rocdl.s.barrier.signal -1
957964
rocdl.s.barrier.signal -1
958965
llvm.return
959966
}
960967

968+
llvm.func @rocdl.s.barrier.signal.var(%ptr : !llvm.ptr<3>) {
969+
// CHECK-LABEL: rocdl.s.barrier.signal.var
970+
// CHECK: rocdl.s.barrier.signal.var %[[PTR:.+]], 1
971+
rocdl.s.barrier.signal.var %ptr, 1
972+
llvm.return
973+
}
974+
975+
llvm.func @rocdl.s.barrier.join(%ptr : !llvm.ptr<3>) {
976+
// CHECK-LABEL: rocdl.s.barrier.join
977+
// CHECK: rocdl.s.barrier.join %[[PTR:.+]]
978+
rocdl.s.barrier.join %ptr
979+
llvm.return
980+
}
981+
982+
llvm.func @rocdl.s.barrier.leave() {
983+
// CHECK-LABEL: rocdl.s.barrier.leave
984+
// CHECK: rocdl.s.barrier.leave 1
985+
rocdl.s.barrier.leave 1
986+
llvm.return
987+
}
988+
961989
llvm.func @rocdl.s.barrier.wait() {
962990
// CHECK-LABEL: rocdl.s.barrier.wait
963991
// CHECK: rocdl.s.barrier.wait -1
964992
rocdl.s.barrier.wait -1
965993
llvm.return
966994
}
967995

996+
llvm.func @rocdl.s.barrier.signal.isfirst() {
997+
// CHECK-LABEL: rocdl.s.barrier.signal.isfirst
998+
// CHECK: rocdl.s.barrier.signal.isfirst 1
999+
%0 = rocdl.s.barrier.signal.isfirst 1 : i1
1000+
llvm.return
1001+
}
1002+
1003+
llvm.func @rocdl.s.get.barrier.state() {
1004+
// CHECK-LABEL: rocdl.s.get.barrier.state
1005+
// CHECK: rocdl.s.get.barrier.state 1
1006+
%0 = rocdl.s.get.barrier.state 1 : i32
1007+
llvm.return
1008+
}
1009+
9681010
llvm.func @rocdl.s.wait.dscnt() {
9691011
// CHECK-LABEL: rocdl.s.wait.dscnt
9701012
// CHECK: rocdl.s.wait.dscnt 0

mlir/test/Target/LLVMIR/rocdl.mlir

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,20 +192,62 @@ llvm.func @rocdl.barrier() {
192192
llvm.return
193193
}
194194

195+
llvm.func @rocdl.s.barrier.init(%ptr : !llvm.ptr<3>) {
196+
// CHECK-LABEL: rocdl.s.barrier.init
197+
// CHECK: call void @llvm.amdgcn.s.barrier.init(ptr addrspace(3) %[[PTR:.+]], i32 1)
198+
rocdl.s.barrier.init %ptr, 1
199+
llvm.return
200+
}
201+
195202
llvm.func @rocdl.s.barrier.signal() {
196203
// CHECK-LABEL: rocdl.s.barrier.signal
197204
// CHECK-NEXT: call void @llvm.amdgcn.s.barrier.signal(i32 -1)
198205
rocdl.s.barrier.signal -1
199206
llvm.return
200207
}
201208

209+
llvm.func @rocdl.s.barrier.signal.var(%ptr : !llvm.ptr<3>) {
210+
// CHECK-LABEL: rocdl.s.barrier.signal.var
211+
// CHECK: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) %[[PTR:.+]], i32 1)
212+
rocdl.s.barrier.signal.var %ptr, 1
213+
llvm.return
214+
}
215+
216+
llvm.func @rocdl.s.barrier.join(%ptr : !llvm.ptr<3>) {
217+
// CHECK-LABEL: rocdl.s.barrier.join
218+
// CHECK: call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) %[[PTR:.+]])
219+
rocdl.s.barrier.join %ptr
220+
llvm.return
221+
}
222+
223+
llvm.func @rocdl.s.barrier.leave() {
224+
// CHECK-LABEL: rocdl.s.barrier.leave
225+
// CHECK: call void @llvm.amdgcn.s.barrier.leave(i16 1)
226+
rocdl.s.barrier.leave 1
227+
llvm.return
228+
}
229+
202230
llvm.func @rocdl.s.barrier.wait() {
203231
// CHECK-LABEL: rocdl.s.barrier.wait
204232
// CHECK-NEXT: call void @llvm.amdgcn.s.barrier.wait(i16 -1)
205233
rocdl.s.barrier.wait -1
206234
llvm.return
207235
}
208236

237+
llvm.func @rocdl.s.barrier.signal.isfirst() {
238+
// CHECK-LABEL: rocdl.s.barrier.signal.isfirst
239+
// CHECK: %[[OUT:.+]] = call i1 @llvm.amdgcn.s.barrier.signal.isfirst(i32 1)
240+
%0 = rocdl.s.barrier.signal.isfirst 1 : i1
241+
llvm.return
242+
}
243+
244+
llvm.func @rocdl.s.get.barrier.state() {
245+
// CHECK-LABEL: rocdl.s.get.barrier.state
246+
// CHECK: %[[STATE:.+]] = call i32 @llvm.amdgcn.s.get.barrier.state(i32 1)
247+
%0 = rocdl.s.get.barrier.state 1 : i32
248+
llvm.return
249+
}
250+
209251
llvm.func @rocdl.s.wait.dscnt() {
210252
// CHECK-LABEL: rocdl.s.wait.dscnt
211253
// CHECK-NEXT: call void @llvm.amdgcn.s.wait.dscnt(i16 0)

0 commit comments

Comments
 (0)