1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6 %s
3
- ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
2
+ ; RUN: llc -global-isel -amdgpu-codegenprepare-widen-16-bit-ops=0 - mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6 %s
3
+ ; RUN: llc -global-isel -amdgpu-codegenprepare-widen-16-bit-ops=0 - mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
4
4
5
5
define amdgpu_ps i32 @s_andn2_i32 (i32 inreg %src0 , i32 inreg %src1 ) {
6
6
; GCN-LABEL: s_andn2_i32:
@@ -196,58 +196,31 @@ define amdgpu_ps <2 x i32> @s_andn2_v2i32_commute(<2 x i32> inreg %src0, <2 x i3
196
196
}
197
197
198
198
define amdgpu_ps i16 @s_andn2_i16 (i16 inreg %src0 , i16 inreg %src1 ) {
199
- ; GFX6-LABEL: s_andn2_i16:
200
- ; GFX6: ; %bb.0:
201
- ; GFX6-NEXT: s_andn2_b32 s0, s2, s3
202
- ; GFX6-NEXT: ; return to shader part epilog
203
- ;
204
- ; GFX9-LABEL: s_andn2_i16:
205
- ; GFX9: ; %bb.0:
206
- ; GFX9-NEXT: s_mov_b32 s0, 0xffff
207
- ; GFX9-NEXT: s_and_b32 s1, s3, s0
208
- ; GFX9-NEXT: s_xor_b32 s0, s1, s0
209
- ; GFX9-NEXT: s_and_b32 s0, s2, s0
210
- ; GFX9-NEXT: s_bfe_u32 s0, s0, 0x100000
211
- ; GFX9-NEXT: ; return to shader part epilog
199
+ ; GCN-LABEL: s_andn2_i16:
200
+ ; GCN: ; %bb.0:
201
+ ; GCN-NEXT: s_andn2_b32 s0, s2, s3
202
+ ; GCN-NEXT: ; return to shader part epilog
212
203
%not.src1 = xor i16 %src1 , -1
213
204
%and = and i16 %src0 , %not.src1
214
205
ret i16 %and
215
206
}
216
207
217
208
define amdgpu_ps i16 @s_andn2_i16_commute (i16 inreg %src0 , i16 inreg %src1 ) {
218
- ; GFX6-LABEL: s_andn2_i16_commute:
219
- ; GFX6: ; %bb.0:
220
- ; GFX6-NEXT: s_andn2_b32 s0, s2, s3
221
- ; GFX6-NEXT: ; return to shader part epilog
222
- ;
223
- ; GFX9-LABEL: s_andn2_i16_commute:
224
- ; GFX9: ; %bb.0:
225
- ; GFX9-NEXT: s_mov_b32 s0, 0xffff
226
- ; GFX9-NEXT: s_and_b32 s1, s3, s0
227
- ; GFX9-NEXT: s_xor_b32 s0, s1, s0
228
- ; GFX9-NEXT: s_and_b32 s0, s0, s2
229
- ; GFX9-NEXT: s_bfe_u32 s0, s0, 0x100000
230
- ; GFX9-NEXT: ; return to shader part epilog
209
+ ; GCN-LABEL: s_andn2_i16_commute:
210
+ ; GCN: ; %bb.0:
211
+ ; GCN-NEXT: s_andn2_b32 s0, s2, s3
212
+ ; GCN-NEXT: ; return to shader part epilog
231
213
%not.src1 = xor i16 %src1 , -1
232
214
%and = and i16 %not.src1 , %src0
233
215
ret i16 %and
234
216
}
235
217
236
218
define amdgpu_ps { i16 , i16 } @s_andn2_i16_multi_use (i16 inreg %src0 , i16 inreg %src1 ) {
237
- ; GFX6-LABEL: s_andn2_i16_multi_use:
238
- ; GFX6: ; %bb.0:
239
- ; GFX6-NEXT: s_xor_b32 s1, s3, -1
240
- ; GFX6-NEXT: s_andn2_b32 s0, s2, s3
241
- ; GFX6-NEXT: ; return to shader part epilog
242
- ;
243
- ; GFX9-LABEL: s_andn2_i16_multi_use:
244
- ; GFX9: ; %bb.0:
245
- ; GFX9-NEXT: s_mov_b32 s0, 0xffff
246
- ; GFX9-NEXT: s_and_b32 s1, s3, s0
247
- ; GFX9-NEXT: s_xor_b32 s1, s1, s0
248
- ; GFX9-NEXT: s_and_b32 s0, s2, s1
249
- ; GFX9-NEXT: s_bfe_u32 s0, s0, 0x100000
250
- ; GFX9-NEXT: ; return to shader part epilog
219
+ ; GCN-LABEL: s_andn2_i16_multi_use:
220
+ ; GCN: ; %bb.0:
221
+ ; GCN-NEXT: s_xor_b32 s1, s3, -1
222
+ ; GCN-NEXT: s_andn2_b32 s0, s2, s3
223
+ ; GCN-NEXT: ; return to shader part epilog
251
224
%not.src1 = xor i16 %src1 , -1
252
225
%and = and i16 %src0 , %not.src1
253
226
%insert.0 = insertvalue { i16 , i16 } undef , i16 %and , 0
@@ -256,23 +229,11 @@ define amdgpu_ps { i16, i16 } @s_andn2_i16_multi_use(i16 inreg %src0, i16 inreg
256
229
}
257
230
258
231
define amdgpu_ps { i16 , i16 } @s_andn2_i16_multi_foldable_use (i16 inreg %src0 , i16 inreg %src1 , i16 inreg %src2 ) {
259
- ; GFX6-LABEL: s_andn2_i16_multi_foldable_use:
260
- ; GFX6: ; %bb.0:
261
- ; GFX6-NEXT: s_andn2_b32 s0, s2, s4
262
- ; GFX6-NEXT: s_andn2_b32 s1, s3, s4
263
- ; GFX6-NEXT: ; return to shader part epilog
264
- ;
265
- ; GFX9-LABEL: s_andn2_i16_multi_foldable_use:
266
- ; GFX9: ; %bb.0:
267
- ; GFX9-NEXT: s_mov_b32 s1, 0xffff
268
- ; GFX9-NEXT: s_and_b32 s0, s4, s1
269
- ; GFX9-NEXT: s_xor_b32 s0, s0, s1
270
- ; GFX9-NEXT: s_and_b32 s2, s2, s1
271
- ; GFX9-NEXT: s_and_b32 s4, s0, s1
272
- ; GFX9-NEXT: s_and_b32 s1, s3, s1
273
- ; GFX9-NEXT: s_and_b32 s0, s2, s4
274
- ; GFX9-NEXT: s_and_b32 s1, s1, s4
275
- ; GFX9-NEXT: ; return to shader part epilog
232
+ ; GCN-LABEL: s_andn2_i16_multi_foldable_use:
233
+ ; GCN: ; %bb.0:
234
+ ; GCN-NEXT: s_andn2_b32 s0, s2, s4
235
+ ; GCN-NEXT: s_andn2_b32 s1, s3, s4
236
+ ; GCN-NEXT: ; return to shader part epilog
276
237
%not.src2 = xor i16 %src2 , -1
277
238
%and0 = and i16 %src0 , %not.src2
278
239
%and1 = and i16 %src1 , %not.src2
@@ -308,21 +269,12 @@ define amdgpu_ps float @v_andn2_i16_sv(i16 inreg %src0, i16 %src1) {
308
269
}
309
270
310
271
define amdgpu_ps float @v_andn2_i16_vs (i16 %src0 , i16 inreg %src1 ) {
311
- ; GFX6-LABEL: v_andn2_i16_vs:
312
- ; GFX6: ; %bb.0:
313
- ; GFX6-NEXT: s_xor_b32 s0, s2, -1
314
- ; GFX6-NEXT: v_and_b32_e32 v0, s0, v0
315
- ; GFX6-NEXT: v_bfe_u32 v0, v0, 0, 16
316
- ; GFX6-NEXT: ; return to shader part epilog
317
- ;
318
- ; GFX9-LABEL: v_andn2_i16_vs:
319
- ; GFX9: ; %bb.0:
320
- ; GFX9-NEXT: s_mov_b32 s0, 0xffff
321
- ; GFX9-NEXT: s_and_b32 s1, s2, s0
322
- ; GFX9-NEXT: s_xor_b32 s0, s1, s0
323
- ; GFX9-NEXT: v_and_b32_e32 v0, s0, v0
324
- ; GFX9-NEXT: v_bfe_u32 v0, v0, 0, 16
325
- ; GFX9-NEXT: ; return to shader part epilog
272
+ ; GCN-LABEL: v_andn2_i16_vs:
273
+ ; GCN: ; %bb.0:
274
+ ; GCN-NEXT: s_xor_b32 s0, s2, -1
275
+ ; GCN-NEXT: v_and_b32_e32 v0, s0, v0
276
+ ; GCN-NEXT: v_bfe_u32 v0, v0, 0, 16
277
+ ; GCN-NEXT: ; return to shader part epilog
326
278
%not.src1 = xor i16 %src1 , -1
327
279
%and = and i16 %src0 , %not.src1
328
280
%zext = zext i16 %and to i32
0 commit comments