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
4
5
5
6
// CHECK-LABEL: func @gpu_gcn_raw_buffer_load_scalar_i32
6
7
func.func @gpu_gcn_raw_buffer_load_scalar_i32 (%buf: memref <i32 >) -> i32 {
7
8
// CHECK: %[[stride:.*]] = llvm.mlir.constant(0 : i16)
8
9
// CHECK: %[[numRecords:.*]] = llvm.mlir.constant(4 : i32)
9
- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
10
+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
10
11
// RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
11
12
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %[[stride]], %[[numRecords]], %[[flags]] : !llvm.ptr to <8>
12
13
// 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 {
19
20
func.func @gpu_gcn_raw_buffer_load_i32 (%buf: memref <64 xi32 >, %idx: i32 ) -> i32 {
20
21
// CHECK: %[[stride:.*]] = llvm.mlir.constant(0 : i16)
21
22
// CHECK: %[[numRecords:.*]] = llvm.mlir.constant(256 : i32)
22
- // CHECK: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
23
+ // GFX9: %[[flags:.*]] = llvm.mlir.constant(159744 : i32)
23
24
// RDNA: %[[flags:.*]] = llvm.mlir.constant(822243328 : i32)
24
25
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %[[stride]], %[[numRecords]], %[[flags]] : !llvm.ptr to <8>
25
26
// 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 {
30
31
31
32
// CHECK-LABEL: func @gpu_gcn_raw_buffer_load_i32_oob_off
32
33
func.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)
34
35
// 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]]
38
39
%0 = amdgpu.raw_buffer_load {boundsCheck = false } %buf [%idx ] : memref <64 xi32 >, i32 -> i32
39
40
func.return %0 : i32
40
41
}
@@ -103,7 +104,8 @@ func.func @gpu_gcn_raw_buffer_load_4xf8E4M3FNUZ(%buf: memref<64xf8E4M3FNUZ>, %id
103
104
// Since the lowering logic is shared with loads, only bitcasts need to be rechecked
104
105
// CHECK-LABEL: func @gpu_gcn_raw_buffer_store_scalar_i32
105
106
func.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)
107
109
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %{{.*}}, %[[flags]]
108
110
// CHECK: rocdl.raw.ptr.buffer.store %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
109
111
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>) {
113
115
// CHECK-LABEL: func @gpu_gcn_raw_buffer_store_i32
114
116
func.func @gpu_gcn_raw_buffer_store_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
115
117
// 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)
117
120
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
118
121
// CHECK: rocdl.raw.ptr.buffer.store %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
119
122
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
140
143
// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_fadd_f32
141
144
func.func @gpu_gcn_raw_buffer_atomic_fadd_f32 (%value: f32 , %buf: memref <64 xf32 >, %idx: i32 ) {
142
145
// 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)
144
148
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
145
149
// CHECK: rocdl.raw.ptr.buffer.atomic.fadd %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : f32
146
150
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>,
150
154
// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_fmax_f32
151
155
func.func @gpu_gcn_raw_buffer_atomic_fmax_f32 (%value: f32 , %buf: memref <64 xf32 >, %idx: i32 ) {
152
156
// 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)
154
159
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
155
160
// CHECK: rocdl.raw.ptr.buffer.atomic.fmax %{{.*}}, %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : f32
156
161
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>,
160
165
// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_smax_i32
161
166
func.func @gpu_gcn_raw_buffer_atomic_smax_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
162
167
// 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)
164
170
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
165
171
// CHECK: rocdl.raw.ptr.buffer.atomic.smax %{{.*}} %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
166
172
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>,
170
176
// CHECK-LABEL: func @gpu_gcn_raw_buffer_atomic_umin_i32
171
177
func.func @gpu_gcn_raw_buffer_atomic_umin_i32 (%value: i32 , %buf: memref <64 xi32 >, %idx: i32 ) {
172
178
// 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)
174
181
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
175
182
// CHECK: rocdl.raw.ptr.buffer.atomic.umin %{{.*}} %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
176
183
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
183
190
// CHECK: %[[srcCast:.*]] = llvm.bitcast %[[src]] : f32 to i32
184
191
// CHECK: %[[cmpCast:.*]] = llvm.bitcast %[[cmp]] : f32 to i32
185
192
// 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)
187
195
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
188
196
// CHECK: %[[dst:.*]] = rocdl.raw.ptr.buffer.atomic.cmpswap %[[srcCast]], %[[cmpCast]], %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i32
189
197
// 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
196
204
// CHECK-SAME: (%[[src:.*]]: i64, %[[cmp:.*]]: i64, {{.*}})
197
205
func.func @amdgpu_raw_buffer_atomic_cmpswap_i64 (%src : i64 , %cmp : i64 , %buf : memref <64 xi64 >, %idx: i32 ) -> i64 {
198
206
// 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)
200
209
// CHECK: %[[resource:.*]] = rocdl.make.buffer.rsrc %{{.*}}, %{{.*}}, %[[numRecords]], %[[flags]]
201
210
// CHECK: %[[dst:.*]] = rocdl.raw.ptr.buffer.atomic.cmpswap %[[src]], %[[cmp]], %[[resource]], %{{.*}}, %{{.*}}, %{{.*}} : i64
202
211
// CHECK: return %[[dst]]
@@ -206,7 +215,14 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_i64(%src : i64, %cmp : i64, %buf : m
206
215
207
216
// CHECK-LABEL: func @lds_barrier
208
217
func.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: rocdl.waitcnt -7937
221
+ // GFX90A-NEXT: rocdl.s.barrier
222
+ // GFX10: rocdl.waitcnt -16129
223
+ // GFX10-NEXT: rocdl.s.barrier
224
+ // GFX11: llvm.inline_asm has_side_effects asm_dialect = att
225
+ // GFX11-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier"
210
226
amdgpu.lds_barrier
211
227
func.return
212
228
}
0 commit comments