@@ -34,6 +34,7 @@ define amdgpu_cs i16 @abs_sgpr_i16(i16 inreg %arg) {
3434;
3535; GFX1250-LABEL: abs_sgpr_i16:
3636; GFX1250: ; %bb.0:
37+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
3738; GFX1250-NEXT: s_sext_i32_i16 s0, s0
3839; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
3940; GFX1250-NEXT: s_abs_i32 s0, s0
@@ -43,10 +44,26 @@ define amdgpu_cs i16 @abs_sgpr_i16(i16 inreg %arg) {
4344}
4445
4546define amdgpu_cs i32 @abs_sgpr_i32 (i32 inreg %arg ) {
46- ; GFX-LABEL: abs_sgpr_i32:
47- ; GFX: ; %bb.0:
48- ; GFX-NEXT: s_abs_i32 s0, s0
49- ; GFX-NEXT: ; return to shader part epilog
47+ ; GFX6-LABEL: abs_sgpr_i32:
48+ ; GFX6: ; %bb.0:
49+ ; GFX6-NEXT: s_abs_i32 s0, s0
50+ ; GFX6-NEXT: ; return to shader part epilog
51+ ;
52+ ; GFX8-LABEL: abs_sgpr_i32:
53+ ; GFX8: ; %bb.0:
54+ ; GFX8-NEXT: s_abs_i32 s0, s0
55+ ; GFX8-NEXT: ; return to shader part epilog
56+ ;
57+ ; GFX10-LABEL: abs_sgpr_i32:
58+ ; GFX10: ; %bb.0:
59+ ; GFX10-NEXT: s_abs_i32 s0, s0
60+ ; GFX10-NEXT: ; return to shader part epilog
61+ ;
62+ ; GFX1250-LABEL: abs_sgpr_i32:
63+ ; GFX1250: ; %bb.0:
64+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
65+ ; GFX1250-NEXT: s_abs_i32 s0, s0
66+ ; GFX1250-NEXT: ; return to shader part epilog
5067 %res = call i32 @llvm.abs.i32 (i32 %arg , i1 false )
5168 ret i32 %res
5269}
@@ -81,6 +98,7 @@ define amdgpu_cs i64 @abs_sgpr_i64(i64 inreg %arg) {
8198;
8299; GFX1250-LABEL: abs_sgpr_i64:
83100; GFX1250: ; %bb.0:
101+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
84102; GFX1250-NEXT: s_ashr_i32 s2, s1, 31
85103; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
86104; GFX1250-NEXT: s_mov_b32 s3, s2
@@ -93,13 +111,38 @@ define amdgpu_cs i64 @abs_sgpr_i64(i64 inreg %arg) {
93111}
94112
95113define amdgpu_cs <4 x i32 > @abs_sgpr_v4i32 (<4 x i32 > inreg %arg ) {
96- ; GFX-LABEL: abs_sgpr_v4i32:
97- ; GFX: ; %bb.0:
98- ; GFX-NEXT: s_abs_i32 s0, s0
99- ; GFX-NEXT: s_abs_i32 s1, s1
100- ; GFX-NEXT: s_abs_i32 s2, s2
101- ; GFX-NEXT: s_abs_i32 s3, s3
102- ; GFX-NEXT: ; return to shader part epilog
114+ ; GFX6-LABEL: abs_sgpr_v4i32:
115+ ; GFX6: ; %bb.0:
116+ ; GFX6-NEXT: s_abs_i32 s0, s0
117+ ; GFX6-NEXT: s_abs_i32 s1, s1
118+ ; GFX6-NEXT: s_abs_i32 s2, s2
119+ ; GFX6-NEXT: s_abs_i32 s3, s3
120+ ; GFX6-NEXT: ; return to shader part epilog
121+ ;
122+ ; GFX8-LABEL: abs_sgpr_v4i32:
123+ ; GFX8: ; %bb.0:
124+ ; GFX8-NEXT: s_abs_i32 s0, s0
125+ ; GFX8-NEXT: s_abs_i32 s1, s1
126+ ; GFX8-NEXT: s_abs_i32 s2, s2
127+ ; GFX8-NEXT: s_abs_i32 s3, s3
128+ ; GFX8-NEXT: ; return to shader part epilog
129+ ;
130+ ; GFX10-LABEL: abs_sgpr_v4i32:
131+ ; GFX10: ; %bb.0:
132+ ; GFX10-NEXT: s_abs_i32 s0, s0
133+ ; GFX10-NEXT: s_abs_i32 s1, s1
134+ ; GFX10-NEXT: s_abs_i32 s2, s2
135+ ; GFX10-NEXT: s_abs_i32 s3, s3
136+ ; GFX10-NEXT: ; return to shader part epilog
137+ ;
138+ ; GFX1250-LABEL: abs_sgpr_v4i32:
139+ ; GFX1250: ; %bb.0:
140+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
141+ ; GFX1250-NEXT: s_abs_i32 s0, s0
142+ ; GFX1250-NEXT: s_abs_i32 s1, s1
143+ ; GFX1250-NEXT: s_abs_i32 s2, s2
144+ ; GFX1250-NEXT: s_abs_i32 s3, s3
145+ ; GFX1250-NEXT: ; return to shader part epilog
103146 %res = call <4 x i32 > @llvm.abs.v4i32 (<4 x i32 > %arg , i1 false )
104147 ret <4 x i32 > %res
105148}
@@ -278,13 +321,38 @@ define <4 x i32> @abs_vgpr_v4i32(<4 x i32> %arg) {
278321}
279322
280323define amdgpu_cs <2 x i8 > @abs_sgpr_v2i8 (<2 x i8 > inreg %arg ) {
281- ; GFX-LABEL: abs_sgpr_v2i8:
282- ; GFX: ; %bb.0:
283- ; GFX-NEXT: s_sext_i32_i8 s0, s0
284- ; GFX-NEXT: s_sext_i32_i8 s1, s1
285- ; GFX-NEXT: s_abs_i32 s0, s0
286- ; GFX-NEXT: s_abs_i32 s1, s1
287- ; GFX-NEXT: ; return to shader part epilog
324+ ; GFX6-LABEL: abs_sgpr_v2i8:
325+ ; GFX6: ; %bb.0:
326+ ; GFX6-NEXT: s_sext_i32_i8 s0, s0
327+ ; GFX6-NEXT: s_sext_i32_i8 s1, s1
328+ ; GFX6-NEXT: s_abs_i32 s0, s0
329+ ; GFX6-NEXT: s_abs_i32 s1, s1
330+ ; GFX6-NEXT: ; return to shader part epilog
331+ ;
332+ ; GFX8-LABEL: abs_sgpr_v2i8:
333+ ; GFX8: ; %bb.0:
334+ ; GFX8-NEXT: s_sext_i32_i8 s0, s0
335+ ; GFX8-NEXT: s_sext_i32_i8 s1, s1
336+ ; GFX8-NEXT: s_abs_i32 s0, s0
337+ ; GFX8-NEXT: s_abs_i32 s1, s1
338+ ; GFX8-NEXT: ; return to shader part epilog
339+ ;
340+ ; GFX10-LABEL: abs_sgpr_v2i8:
341+ ; GFX10: ; %bb.0:
342+ ; GFX10-NEXT: s_sext_i32_i8 s0, s0
343+ ; GFX10-NEXT: s_sext_i32_i8 s1, s1
344+ ; GFX10-NEXT: s_abs_i32 s0, s0
345+ ; GFX10-NEXT: s_abs_i32 s1, s1
346+ ; GFX10-NEXT: ; return to shader part epilog
347+ ;
348+ ; GFX1250-LABEL: abs_sgpr_v2i8:
349+ ; GFX1250: ; %bb.0:
350+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
351+ ; GFX1250-NEXT: s_sext_i32_i8 s0, s0
352+ ; GFX1250-NEXT: s_sext_i32_i8 s1, s1
353+ ; GFX1250-NEXT: s_abs_i32 s0, s0
354+ ; GFX1250-NEXT: s_abs_i32 s1, s1
355+ ; GFX1250-NEXT: ; return to shader part epilog
288356 %res = call <2 x i8 > @llvm.abs.v2i8 (<2 x i8 > %arg , i1 false )
289357 ret <2 x i8 > %res
290358}
@@ -340,15 +408,46 @@ define <2 x i8> @abs_vgpr_v2i8(<2 x i8> %arg) {
340408}
341409
342410define amdgpu_cs <3 x i8 > @abs_sgpr_v3i8 (<3 x i8 > inreg %arg ) {
343- ; GFX-LABEL: abs_sgpr_v3i8:
344- ; GFX: ; %bb.0:
345- ; GFX-NEXT: s_sext_i32_i8 s0, s0
346- ; GFX-NEXT: s_sext_i32_i8 s1, s1
347- ; GFX-NEXT: s_sext_i32_i8 s2, s2
348- ; GFX-NEXT: s_abs_i32 s0, s0
349- ; GFX-NEXT: s_abs_i32 s1, s1
350- ; GFX-NEXT: s_abs_i32 s2, s2
351- ; GFX-NEXT: ; return to shader part epilog
411+ ; GFX6-LABEL: abs_sgpr_v3i8:
412+ ; GFX6: ; %bb.0:
413+ ; GFX6-NEXT: s_sext_i32_i8 s0, s0
414+ ; GFX6-NEXT: s_sext_i32_i8 s1, s1
415+ ; GFX6-NEXT: s_sext_i32_i8 s2, s2
416+ ; GFX6-NEXT: s_abs_i32 s0, s0
417+ ; GFX6-NEXT: s_abs_i32 s1, s1
418+ ; GFX6-NEXT: s_abs_i32 s2, s2
419+ ; GFX6-NEXT: ; return to shader part epilog
420+ ;
421+ ; GFX8-LABEL: abs_sgpr_v3i8:
422+ ; GFX8: ; %bb.0:
423+ ; GFX8-NEXT: s_sext_i32_i8 s0, s0
424+ ; GFX8-NEXT: s_sext_i32_i8 s1, s1
425+ ; GFX8-NEXT: s_sext_i32_i8 s2, s2
426+ ; GFX8-NEXT: s_abs_i32 s0, s0
427+ ; GFX8-NEXT: s_abs_i32 s1, s1
428+ ; GFX8-NEXT: s_abs_i32 s2, s2
429+ ; GFX8-NEXT: ; return to shader part epilog
430+ ;
431+ ; GFX10-LABEL: abs_sgpr_v3i8:
432+ ; GFX10: ; %bb.0:
433+ ; GFX10-NEXT: s_sext_i32_i8 s0, s0
434+ ; GFX10-NEXT: s_sext_i32_i8 s1, s1
435+ ; GFX10-NEXT: s_sext_i32_i8 s2, s2
436+ ; GFX10-NEXT: s_abs_i32 s0, s0
437+ ; GFX10-NEXT: s_abs_i32 s1, s1
438+ ; GFX10-NEXT: s_abs_i32 s2, s2
439+ ; GFX10-NEXT: ; return to shader part epilog
440+ ;
441+ ; GFX1250-LABEL: abs_sgpr_v3i8:
442+ ; GFX1250: ; %bb.0:
443+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
444+ ; GFX1250-NEXT: s_sext_i32_i8 s0, s0
445+ ; GFX1250-NEXT: s_sext_i32_i8 s1, s1
446+ ; GFX1250-NEXT: s_sext_i32_i8 s2, s2
447+ ; GFX1250-NEXT: s_abs_i32 s0, s0
448+ ; GFX1250-NEXT: s_abs_i32 s1, s1
449+ ; GFX1250-NEXT: s_abs_i32 s2, s2
450+ ; GFX1250-NEXT: ; return to shader part epilog
352451 %res = call <3 x i8 > @llvm.abs.v3i8 (<3 x i8 > %arg , i1 false )
353452 ret <3 x i8 > %res
354453}
@@ -446,6 +545,7 @@ define amdgpu_cs <2 x i16> @abs_sgpr_v2i16(<2 x i16> inreg %arg) {
446545;
447546; GFX1250-LABEL: abs_sgpr_v2i16:
448547; GFX1250: ; %bb.0:
548+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
449549; GFX1250-NEXT: s_sext_i32_i16 s1, s0
450550; GFX1250-NEXT: s_ashr_i32 s0, s0, 16
451551; GFX1250-NEXT: s_abs_i32 s1, s1
@@ -536,6 +636,7 @@ define amdgpu_cs <3 x i16> @abs_sgpr_v3i16(<3 x i16> inreg %arg) {
536636;
537637; GFX1250-LABEL: abs_sgpr_v3i16:
538638; GFX1250: ; %bb.0:
639+ ; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1
539640; GFX1250-NEXT: s_sext_i32_i16 s2, s0
540641; GFX1250-NEXT: s_ashr_i32 s0, s0, 16
541642; GFX1250-NEXT: s_abs_i32 s2, s2
@@ -598,3 +699,5 @@ define <3 x i16> @abs_vgpr_v3i16(<3 x i16> %arg) {
598699 %res = call <3 x i16 > @llvm.abs.v3i16 (<3 x i16 > %arg , i1 false )
599700 ret <3 x i16 > %res
600701}
702+ ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
703+ ; GFX: {{.*}}
0 commit comments