1- // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx908 | FileCheck %s
2- // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx1030 | FileCheck %s --check-prefix=RDNA
3- // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx1100 | FileCheck %s --check-prefix=RDNA
1+ // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx908 | FileCheck %s --check-prefixes=CHECK,GFX9,GFX908
2+ // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx90a | FileCheck %s --check-prefixes=CHECK,GFX9,GFX90A
3+ // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx1030 | FileCheck %s --check-prefixes=CHECK,GFX10,RDNA
4+ // RUN: mlir-opt %s -convert-amdgpu-to-rocdl=chipset=gfx1100 | FileCheck %s --check-prefixes=CHECK,GFX11,RDNA
45
56// CHECK-LABEL: func @gpu_gcn_raw_buffer_load_scalar_i32
67func.func @gpu_gcn_raw_buffer_load_scalar_i32 (%buf: memref <i32 >) -> i32 {
78 // CHECK: %[[stride:.*]] = llvm.mlir.constant(0 : i16)
89 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(4 : i32)
9- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
10+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
1011 // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
1112 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %[[stride]], %[[numRecords]], %[[flags]] : !llvm.ptr to <8>
1213 // CHECK: %[[ret:.*]] = rocdl.raw.ptr.buffer.load %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
@@ -19,7 +20,7 @@ func.func @gpu_gcn_raw_buffer_load_scalar_i32(%buf: memref<i32>) -> i32 {
1920func.func @gpu_gcn_raw_buffer_load_i32 (%buf: memref <64 xi32 >, %idx: i32 ) -> i32 {
2021 // CHECK: %[[stride:.*]] = llvm.mlir.constant(0 : i16)
2122 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
22- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
23+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
2324 // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
2425 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %[[stride]], %[[numRecords]], %[[flags]] : !llvm.ptr to <8>
2526 // CHECK: %[[ret:.*]] = rocdl.raw.ptr.buffer.load %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
@@ -30,11 +31,11 @@ func.func @gpu_gcn_raw_buffer_load_i32(%buf: memref<64xi32>, %idx: i32) -> i32 {
3031
3132// CHECK-LABEL: func @gpu_gcn_raw_buffer_load_i32_oob_off
3233func.func @gpu_gcn_raw_buffer_load_i32_oob_off (%buf: memref <64 xi32 >, %idx: i32 ) -> i32 {
33- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
34+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
3435 // RDNA: %[[flags:.*]] = llvm.mlir.constant(553807872 : i32)
35- // RDNA: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %{{.*}}, %[[flags]]
36- // RDNA: %[[ret:.*]] = rocdl.raw.ptr.buffer.load %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
37- // RDNA: return %[[ret]]
36+ // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %{{.*}}, %[[flags]]
37+ // CHECK: %[[ret:.*]] = rocdl.raw.ptr.buffer.load %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
38+ // CHECK: return %[[ret]]
3839 %0 = amdgpu.raw_buffer_load {boundsCheck = false } %buf [%idx ] : memref <64 xi32 >, i32 -> i32
3940 func.return %0 : i32
4041}
@@ -103,7 +104,8 @@ func.func @gpu_gcn_raw_buffer_load_4xf8E4M3FNUZ(%buf: memref<64xf8E4M3FNUZ>, %id
103104// Since the lowering logic is shared with loads, only bitcasts need to be rechecked
104105// CHECK-LABEL: func @gpu_gcn_raw_buffer_store_scalar_i32
105106func.func @gpu_gcn_raw_buffer_store_scalar_i32 (%value: i32 , %buf: memref <i32 >) {
106- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
107+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
108+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
107109 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %{{.*}}, %[[flags]]
108110 // CHECK: rocdl.raw.ptr.buffer.store %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
109111 amdgpu.raw_buffer_store {boundsCheck = true } %value -> %buf [] : i32 -> memref <i32 >
@@ -113,7 +115,8 @@ func.func @gpu_gcn_raw_buffer_store_scalar_i32(%value: i32, %buf: memref<i32>) {
113115// CHECK-LABEL: func @gpu_gcn_raw_buffer_store_i32
114116func.func @gpu_gcn_raw_buffer_store_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
115117 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
116- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
118+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
119+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
117120 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
118121 // CHECK: rocdl.raw.ptr.buffer.store %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
119122 amdgpu.raw_buffer_store {boundsCheck = true } %value -> %buf [%idx ] : i32 -> memref <64 xi32 >, i32
@@ -140,7 +143,8 @@ func.func @gpu_gcn_raw_buffer_store_16xi8(%value: vector<16xi8>, %buf: memref<64
140143// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_fadd_f32
141144func.func @gpu_gcn_raw_buffer_atomic_fadd_f32 (%value: f32 , %buf: memref <64 xf32 >, %idx: i32 ) {
142145 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
143- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
146+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
147+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
144148 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
145149 // CHECK: rocdl.raw.ptr.buffer.atomic.fadd %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : f32
146150 amdgpu.raw_buffer_atomic_fadd {boundsCheck = true } %value -> %buf [%idx ] : f32 -> memref <64 xf32 >, i32
@@ -150,7 +154,8 @@ func.func @gpu_gcn_raw_buffer_atomic_fadd_f32(%value: f32, %buf: memref<64xf32>,
150154// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_fmax_f32
151155func.func @gpu_gcn_raw_buffer_atomic_fmax_f32 (%value: f32 , %buf: memref <64 xf32 >, %idx: i32 ) {
152156 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
153- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
157+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
158+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
154159 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
155160 // CHECK: rocdl.raw.ptr.buffer.atomic.fmax %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : f32
156161 amdgpu.raw_buffer_atomic_fmax {boundsCheck = true } %value -> %buf [%idx ] : f32 -> memref <64 xf32 >, i32
@@ -160,7 +165,8 @@ func.func @gpu_gcn_raw_buffer_atomic_fmax_f32(%value: f32, %buf: memref<64xf32>,
160165// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_smax_i32
161166func.func @gpu_gcn_raw_buffer_atomic_smax_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
162167 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
163- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
168+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
169+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
164170 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
165171 // CHECK: rocdl.raw.ptr.buffer.atomic.smax %{{.*}} %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
166172 amdgpu.raw_buffer_atomic_smax {boundsCheck = true } %value -> %buf [%idx ] : i32 -> memref <64 xi32 >, i32
@@ -170,7 +176,8 @@ func.func @gpu_gcn_raw_buffer_atomic_smax_i32(%value: i32, %buf: memref<64xi32>,
170176// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_umin_i32
171177func.func @gpu_gcn_raw_buffer_atomic_umin_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
172178 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
173- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
179+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
180+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
174181 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
175182 // CHECK: rocdl.raw.ptr.buffer.atomic.umin %{{.*}} %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
176183 amdgpu.raw_buffer_atomic_umin {boundsCheck = true } %value -> %buf [%idx ] : i32 -> memref <64 xi32 >, i32
@@ -183,7 +190,8 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_f32(%src : f32, %cmp : f32, %buf : m
183190 // CHECK: %[[srcCast:.*]] = llvm.bitcast %[[src]] : f32 to i32
184191 // CHECK: %[[cmpCast:.*]] = llvm.bitcast %[[cmp]] : f32 to i32
185192 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
186- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
193+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
194+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
187195 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
188196 // CHECK: %[[dst:.*]] = rocdl.raw.ptr.buffer.atomic.cmpswap %[[srcCast]], %[[cmpCast]], %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
189197 // CHECK: %[[dstCast:.*]] = llvm.bitcast %[[dst]] : i32 to f32
@@ -196,7 +204,8 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_f32(%src : f32, %cmp : f32, %buf : m
196204// CHECK-SAME: (%[[src:.*]]: i64, %[[cmp:.*]]: i64, {{.*}})
197205func.func @amdgpu_raw_buffer_atomic_cmpswap_i64 (%src : i64 , %cmp : i64 , %buf : memref <64 xi64 >, %idx: i32 ) -> i64 {
198206 // CHECK: %[[numRecords:.*]] = llvm.mlir.constant(512 : i32)
199- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
207+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
208+ // RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
200209 // CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
201210 // CHECK: %[[dst:.*]] = rocdl.raw.ptr.buffer.atomic.cmpswap %[[src]], %[[cmp]], %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i64
202211 // CHECK: return %[[dst]]
@@ -206,7 +215,16 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_i64(%src : i64, %cmp : i64, %buf : m
206215
207216// CHECK-LABEL: func @lds_barrier
208217func.func @lds_barrier () {
209- // CHECK: llvm.inline_asm has_side_effects asm_dialect = att "s_waitcnt lgkmcnt(0)\0As_barrier"
218+ // GFX908: llvm.inline_asm has_side_effects asm_dialect = att
219+ // 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]]
222+ // GFX90A-NEXT: rocdl.s.barrier
223+ // GFX10: %[[cst:.*]] = llvm.mlir.constant(-16129 : i32) : i32
224+ // GFX10: rocdl.waitcnt %[[cst]]
225+ // GFX10-NEXT: rocdl.s.barrier
226+ // GFX11: llvm.inline_asm has_side_effects asm_dialect = att
227+ // GFX11-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier"
210228 amdgpu.lds_barrier
211229 func.return
212230}
0 commit comments