llvm.org GIT mirror llvm / 116060b
[AMDGPU] gfx1010: prefer V_MUL_LO_U32 over V_MUL_LO_I32 GFX10 deprecates v_mul_lo_i32 instruction, so choose u32 form for all targets. Differential Revision: https://reviews.llvm.org/D61525 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360094 91177308-0d34-0410-b5e6-96231b3b80d8 Stanislav Mekhanoshin 1 year, 5 months ago
14 changed file(s) with 233 addition(s) and 191 deletion(s). Raw diff Collapse all Expand all
33693369 case AMDGPU::S_SUB_U32:
33703370 return AMDGPU::V_SUB_I32_e32;
33713371 case AMDGPU::S_SUBB_U32: return AMDGPU::V_SUBB_U32_e32;
3372 case AMDGPU::S_MUL_I32: return AMDGPU::V_MUL_LO_I32;
3372 case AMDGPU::S_MUL_I32: return AMDGPU::V_MUL_LO_U32;
33733373 case AMDGPU::S_MUL_HI_U32: return AMDGPU::V_MUL_HI_U32;
33743374 case AMDGPU::S_MUL_HI_I32: return AMDGPU::V_MUL_HI_I32;
33753375 case AMDGPU::S_AND_B32: return AMDGPU::V_AND_B32_e64;
130130 ; VI: ; %bb.0:
131131 ; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v1
132132 ; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v2
133 ; VI-NEXT: v_mul_lo_i32 v1, v0, v3
133 ; VI-NEXT: v_mul_lo_u32 v1, v0, v3
134134 ; VI-NEXT: ; return to shader part epilog
135135 ;
136136 ; GFX9-LABEL: add3_multiuse_outer:
137137 ; GFX9: ; %bb.0:
138138 ; GFX9-NEXT: v_add3_u32 v0, v0, v1, v2
139 ; GFX9-NEXT: v_mul_lo_i32 v1, v0, v3
139 ; GFX9-NEXT: v_mul_lo_u32 v1, v0, v3
140140 ; GFX9-NEXT: ; return to shader part epilog
141141 %inner = add i32 %a, %b
142142 %outer = add i32 %inner, %c
5959 ; GFX9-NEXT: v_lshrrev_b32_e64 [[SCALED:v[0-9]+]], 6, s6
6060 ; GFX9-NEXT: v_add_u32_e32 v0, 4, [[SCALED]]
6161
62 ; GCN-NEXT: v_mul_lo_i32 v0, v0, 9
62 ; GCN-NEXT: v_mul_lo_u32 v0, v0, 9
6363 ; GCN-NOT: v_mov
6464 ; GCN: ds_write_b32 v0, v0
6565 define void @func_other_fi_user_i32() #0 {
171171 ; GFX9-DAG: v_lshrrev_b32_e64 [[SCALED:v[0-9]+]], 6, s6
172172 ; GFX9: v_add_u32_e32 [[VZ:v[0-9]+]], s6, [[SCALED]]
173173
174 ; GCN: v_mul_lo_i32 [[VZ]], [[VZ]], 9
174 ; GCN: v_mul_lo_u32 [[VZ]], [[VZ]], 9
175175 ; GCN: ds_write_b32 v0, [[VZ]]
176176 define void @func_other_fi_user_non_inline_imm_offset_i32() #0 {
177177 %alloca0 = alloca [128 x i32], align 4, addrspace(5)
195195 ; GFX9-DAG: v_lshrrev_b32_e64 [[SCALED:v[0-9]+]], 6, [[DIFF]]
196196 ; GFX9: v_add_u32_e32 [[VZ:v[0-9]+]], [[OFFSET]], [[SCALED]]
197197
198 ; GCN: v_mul_lo_i32 [[VZ]], [[VZ]], 9
198 ; GCN: v_mul_lo_u32 [[VZ]], [[VZ]], 9
199199 ; GCN: ds_write_b32 v0, [[VZ]]
200200 define void @func_other_fi_user_non_inline_imm_offset_i32_vcc_live() #0 {
201201 %alloca0 = alloca [128 x i32], align 4, addrspace(5)
55 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x4f800000,
66 ; GCN: v_cvt_u32_f32_e32
77 ; GCN-DAG: v_mul_hi_u32
8 ; GCN-DAG: v_mul_lo_i32
8 ; GCN-DAG: v_mul_lo_u32
99 ; GCN-DAG: v_sub_i32_e32
1010 ; GCN-DAG: v_cmp_eq_u32_e64
1111 ; GCN-DAG: v_cndmask_b32_e64
4141 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x4f800000,
4242 ; GCN: v_cvt_u32_f32_e32
4343 ; GCN-DAG: v_mul_hi_u32
44 ; GCN-DAG: v_mul_lo_i32
44 ; GCN-DAG: v_mul_lo_u32
4545 ; GCN-DAG: v_sub_i32_e32
4646 ; GCN-DAG: v_cmp_eq_u32_e64
4747 ; GCN-DAG: v_cndmask_b32_e64
7777 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x4f800000,
7878 ; GCN: v_cvt_u32_f32_e32
7979 ; GCN-DAG: v_mul_hi_u32
80 ; GCN-DAG: v_mul_lo_i32
80 ; GCN-DAG: v_mul_lo_u32
8181 ; GCN-DAG: v_sub_i32_e32
8282 ; GCN-DAG: v_cmp_eq_u32_e64
8383 ; GCN-DAG: v_cndmask_b32_e64
113113 ; GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x4f800000,
114114 ; GCN: v_cvt_u32_f32_e32
115115 ; GCN-DAG: v_mul_hi_u32
116 ; GCN-DAG: v_mul_lo_i32
116 ; GCN-DAG: v_mul_lo_u32
117117 ; GCN-DAG: v_sub_i32_e32
118118 ; GCN-DAG: v_cmp_eq_u32_e64
119119 ; GCN-DAG: v_cndmask_b32_e64
33 ; GCN-LABEL: {{^}}mad_i64_i32_sextops:
44 ; CI: v_mad_i64_i32 v[0:1], s[6:7], v0, v1, v[2:3]
55
6 ; SI: v_mul_lo_i32
6 ; SI: v_mul_lo_u32
77 ; SI: v_mul_hi_i32
88 ; SI: v_add_i32
99 ; SI: v_addc_u32
1818 ; GCN-LABEL: {{^}}mad_i64_i32_sextops_commute:
1919 ; CI: v_mad_i64_i32 v[0:1], s[6:7], v0, v1, v[2:3]
2020
21 ; SI-DAG: v_mul_lo_i32
21 ; SI-DAG: v_mul_lo_u32
2222 ; SI-DAG: v_mul_hi_i32
2323 ; SI: v_add_i32
2424 ; SI: v_addc_u32
3333 ; GCN-LABEL: {{^}}mad_u64_u32_zextops:
3434 ; CI: v_mad_u64_u32 v[0:1], s[6:7], v0, v1, v[2:3]
3535
36 ; SI-DAG: v_mul_lo_i32
36 ; SI-DAG: v_mul_lo_u32
3737 ; SI-DAG: v_mul_hi_u32
3838 ; SI: v_add_i32
3939 ; SI: v_addc_u32
4848 ; GCN-LABEL: {{^}}mad_u64_u32_zextops_commute:
4949 ; CI: v_mad_u64_u32 v[0:1], s[6:7], v0, v1, v[2:3]
5050
51 ; SI-DAG: v_mul_lo_i32
51 ; SI-DAG: v_mul_lo_u32
5252 ; SI-DAG: v_mul_hi_u32
5353 ; SI: v_add_i32
5454 ; SI: v_addc_u32
2626 ; FIXME: Should emit u16 mul here. Instead it's worse than SI
2727 ; GCN-LABEL: {{^}}v_mul_i16_uniform_load:
2828 ; SI: v_mul_u32_u24
29 ; GFX89: v_mul_lo_i32
29 ; GFX89: v_mul_lo_u32
3030 define amdgpu_kernel void @v_mul_i16_uniform_load(
3131 i16 addrspace(1)* %r,
3232 i16 addrspace(1)* %a,
4040 }
4141
4242 ; GCN-LABEL: {{^}}v_mul_v2i16:
43 ; SI: v_mul_lo_i32
44 ; SI: v_mul_lo_i32
43 ; SI: v_mul_lo_u32
44 ; SI: v_mul_lo_u32
4545
4646 ; VI: v_mul_lo_u16_sdwa
4747 ; VI: v_mul_lo_u16_e32
5858
5959 ; FIXME: Unpack garbage on gfx9
6060 ; GCN-LABEL: {{^}}v_mul_v3i16:
61 ; SI: v_mul_lo_i32
62 ; SI: v_mul_lo_i32
63 ; SI: v_mul_lo_i32
61 ; SI: v_mul_lo_u32
62 ; SI: v_mul_lo_u32
63 ; SI: v_mul_lo_u32
6464
6565 ; VI: v_mul_lo_u16
6666 ; VI: v_mul_lo_u16
7676 }
7777
7878 ; GCN-LABEL: {{^}}v_mul_v4i16:
79 ; SI: v_mul_lo_i32
80 ; SI: v_mul_lo_i32
81 ; SI: v_mul_lo_i32
82 ; SI: v_mul_lo_i32
79 ; SI: v_mul_lo_u32
80 ; SI: v_mul_lo_u32
81 ; SI: v_mul_lo_u32
82 ; SI: v_mul_lo_u32
8383
8484 ; VI: v_mul_lo_u16_sdwa
8585 ; VI: v_mul_lo_u16_e32
0 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SI,FUNC %s
11 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,VI,FUNC %s
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=FUNC,GFX9 %s
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=FUNC,GFX9_10 %s
3 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx1010 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=FUNC,GFX9_10 %s
34 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=r600 -mcpu=redwood < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=EG,FUNC %s
45
56 ; mul24 and mad24 are affected
89 ; EG: MULLO_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
910 ; EG: MULLO_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
1011
11 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
12 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
12 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
13 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
1314
1415 define amdgpu_kernel void @test_mul_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) {
1516 %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1
2627 ; EG: MULLO_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
2728 ; EG: MULLO_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
2829
29 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
30 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
31 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
32 ; GCN: v_mul_lo_i32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
30 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
31 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
32 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
33 ; GCN: v_mul_lo_u32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
3334
3435 define amdgpu_kernel void @v_mul_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
3536 %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1
5556 ; FUNC-LABEL: {{^}}v_trunc_i64_mul_to_i32:
5657 ; GCN: s_load_dword
5758 ; GCN: s_load_dword
58 ; GCN: v_mul_lo_i32
59 ; GCN: v_mul_lo_u32
5960 ; GCN: buffer_store_dword
6061 define amdgpu_kernel void @v_trunc_i64_mul_to_i32(i32 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr) nounwind {
6162 %a = load i64, i64 addrspace(1)* %aptr, align 8
8485 ; FUNC-LABEL: {{^}}v_mul64_sext_c:
8586 ; EG-DAG: MULLO_INT
8687 ; EG-DAG: MULHI_INT
87 ; GCN-DAG: v_mul_lo_i32
88 ; GCN-DAG: v_mul_lo_u32
8889 ; GCN-DAG: v_mul_hi_i32
8990 ; GCN: s_endpgm
9091 define amdgpu_kernel void @v_mul64_sext_c(i64 addrspace(1)* %out, i32 addrspace(1)* %in) {
9697 }
9798
9899 ; FUNC-LABEL: {{^}}v_mul64_sext_inline_imm:
99 ; GCN-DAG: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, 9
100 ; GCN-DAG: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, 9
100101 ; GCN-DAG: v_mul_hi_i32 v{{[0-9]+}}, v{{[0-9]+}}, 9
101102 ; GCN: s_endpgm
102103 define amdgpu_kernel void @v_mul64_sext_inline_imm(i64 addrspace(1)* %out, i32 addrspace(1)* %in) {
121122 }
122123
123124 ; FUNC-LABEL: {{^}}v_mul_i32:
124 ; GCN: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
125 ; GCN: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
125126 define amdgpu_kernel void @v_mul_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
126127 %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 1
127128 %a = load i32, i32 addrspace(1)* %in
139140 ; crash with a 'failed to select' error.
140141
141142 ; FUNC-LABEL: {{^}}s_mul_i64:
142 ; GFX9-DAG: s_mul_i32
143 ; GFX9-DAG: s_mul_hi_u32
144 ; GFX9-DAG: s_mul_i32
145 ; GFX9-DAG: s_mul_i32
146 ; GFX9: s_endpgm
143 ; GFX9_10-DAG: s_mul_i32
144 ; GFX9_10-DAG: s_mul_hi_u32
145 ; GFX9_10-DAG: s_mul_i32
146 ; GFX9_10-DAG: s_mul_i32
147 ; GFX9_10: s_endpgm
147148 define amdgpu_kernel void @s_mul_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) nounwind {
148149 %mul = mul i64 %a, %b
149150 store i64 %mul, i64 addrspace(1)* %out, align 8
151152 }
152153
153154 ; FUNC-LABEL: {{^}}v_mul_i64:
154 ; GCN: v_mul_lo_i32
155 ; GCN: v_mul_lo_u32
155156 define amdgpu_kernel void @v_mul_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr) {
156157 %a = load i64, i64 addrspace(1)* %aptr, align 8
157158 %b = load i64, i64 addrspace(1)* %bptr, align 8
249250 ; GCN: {{buffer|flat}}_load_dwordx4
250251 ; GCN: {{buffer|flat}}_load_dwordx4
251252
252 ; SI-DAG: v_mul_lo_i32
253 ; SI-DAG: v_mul_hi_u32
254 ; SI-DAG: v_mul_hi_u32
255 ; SI-DAG: v_mul_lo_i32
256 ; SI-DAG: v_mul_hi_u32
257 ; SI-DAG: v_mul_hi_u32
258 ; SI-DAG: v_mul_lo_i32
259 ; SI-DAG: v_mul_lo_i32
253 ; SI-DAG: v_mul_lo_u32
254 ; SI-DAG: v_mul_hi_u32
255 ; SI-DAG: v_mul_hi_u32
256 ; SI-DAG: v_mul_lo_u32
257 ; SI-DAG: v_mul_hi_u32
258 ; SI-DAG: v_mul_hi_u32
259 ; SI-DAG: v_mul_lo_u32
260 ; SI-DAG: v_mul_lo_u32
260261 ; SI-DAG: v_add_i32_e32
261262
262263 ; SI-DAG: v_mul_hi_u32
263 ; SI-DAG: v_mul_lo_i32
264 ; SI-DAG: v_mul_hi_u32
265 ; SI-DAG: v_mul_lo_i32
266 ; SI-DAG: v_mul_lo_i32
267 ; SI-DAG: v_mul_lo_i32
268 ; SI-DAG: v_mul_lo_i32
269 ; SI-DAG: v_mul_lo_i32
270
271 ; VI-DAG: v_mul_lo_i32
264 ; SI-DAG: v_mul_lo_u32
265 ; SI-DAG: v_mul_hi_u32
266 ; SI-DAG: v_mul_lo_u32
267 ; SI-DAG: v_mul_lo_u32
268 ; SI-DAG: v_mul_lo_u32
269 ; SI-DAG: v_mul_lo_u32
270 ; SI-DAG: v_mul_lo_u32
271
272 ; VI-DAG: v_mul_lo_u32
272273 ; VI-DAG: v_mul_hi_u32
273274 ; VI: v_mad_u64_u32
274275 ; VI: v_mad_u64_u32
0 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=fiji -amdgpu-sdwa-peephole=0 -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=NOSDWA,GCN %s
1 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=fiji -amdgpu-sdwa-peephole -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=VI,SDWA,GCN %s
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx900 -amdgpu-sdwa-peephole -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,SDWA,GCN %s
1 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=fiji -amdgpu-sdwa-peephole -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=VI,GFX89,SDWA,GCN %s
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx900 -amdgpu-sdwa-peephole -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GFX9_10,SDWA,GCN %s
3 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx1010 -amdgpu-sdwa-peephole -mattr=-fp64-fp16-denormals -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX10,GFX9_10,SDWA,GCN %s
34
45 ; GCN-LABEL: {{^}}add_shr_i32:
56 ; NOSDWA: v_lshrrev_b32_e32 v[[DST:[0-9]+]], 16, v{{[0-9]+}}
89
910 ; VI: v_add_u32_sdwa v{{[0-9]+}}, vcc, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
1011 ; GFX9: v_add_u32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
12 ; GFX10: v_add_nc_u32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
1113
1214 define amdgpu_kernel void @add_shr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
1315 %a = load i32, i32 addrspace(1)* %in, align 4
2426
2527 ; VI: v_subrev_u32_sdwa v{{[0-9]+}}, vcc, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
2628 ; GFX9: v_sub_u32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
29 ; GFX10: v_sub_nc_u32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
2730 define amdgpu_kernel void @sub_shr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
2831 %a = load i32, i32 addrspace(1)* %in, align 4
2932 %shr = lshr i32 %a, 16
5154 }
5255
5356 ; GCN-LABEL: {{^}}mul_i16:
54 ; NOSDWA: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
55 ; NOSDWA-NOT: v_mul_u32_u24_sdwa
56 ; SDWA: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
57 ; NOSDWA: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
58 ; NOSDWA-NOT: v_mul_u32_u24_sdwa
59 ; GFX89: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
60 ; GFX10: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
5761 ; SDWA-NOT: v_mul_u32_u24_sdwa
5862
5963 define amdgpu_kernel void @mul_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %ina, i16 addrspace(1)* %inb) {
7781 ; VI-DAG: v_mul_u32_u24_sdwa v[[DST_MUL_HI:[0-9]+]], v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
7882 ; VI: v_or_b32_sdwa v{{[0-9]+}}, v[[DST_MUL_LO]], v[[DST_MUL_HI]] dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
7983
80 ; GFX9: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
84 ; GFX9_10: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
8185
8286 define amdgpu_kernel void @mul_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %ina, <2 x i16> addrspace(1)* %inb) {
8387 entry:
103107 ; VI-DAG: v_or_b32_sdwa v{{[0-9]+}}, v[[DST_MUL2]], v[[DST_MUL3]] dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
104108 ; VI-DAG: v_or_b32_sdwa v{{[0-9]+}}, v[[DST_MUL0]], v[[DST_MUL1]] dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
105109
106 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
107 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
110 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
111 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
108112
109113 define amdgpu_kernel void @mul_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(1)* %ina, <4 x i16> addrspace(1)* %inb) {
110114 entry:
136140 ; VI-DAG: v_or_b32_sdwa v{{[0-9]+}}, v[[DST_MUL2]], v[[DST_MUL3]] dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
137141 ; VI-DAG: v_or_b32_sdwa v{{[0-9]+}}, v[[DST_MUL0]], v[[DST_MUL1]] dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
138142
139 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
140 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
141 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
142 ; GFX9-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
143 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
144 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
145 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
146 ; GFX9_10-DAG: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
143147
144148 define amdgpu_kernel void @mul_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(1)* %ina, <8 x i16> addrspace(1)* %inb) {
145149 entry:
177181 ; VI-DAG: v_mul_f16_e32 v[[DST_MUL_LO:[0-9]+]], v{{[0-9]+}}, v{{[0-9]+}}
178182 ; VI: v_or_b32_e32 v{{[0-9]+}}, v[[DST_MUL_LO]], v[[DST_MUL_HI]]
179183
180 ; GFX9: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
184 ; GFX9_10: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
181185
182186 define amdgpu_kernel void @mul_v2half(<2 x half> addrspace(1)* %out, <2 x half> addrspace(1)* %ina, <2 x half> addrspace(1)* %inb) {
183187 entry:
201205 ; VI-DAG: v_or_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
202206 ; VI-DAG: v_or_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
203207
204 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
205 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
208 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
209 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
206210
207211 define amdgpu_kernel void @mul_v4half(<4 x half> addrspace(1)* %out, <4 x half> addrspace(1)* %ina, <4 x half> addrspace(1)* %inb) {
208212 entry:
230234 ; VI-DAG: v_or_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
231235 ; VI-DAG: v_or_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
232236
233 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
234 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
235 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
236 ; GFX9-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
237 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
238 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
239 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
240 ; GFX9_10-DAG: v_pk_mul_f16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
237241
238242 define amdgpu_kernel void @mul_v8half(<8 x half> addrspace(1)* %out, <8 x half> addrspace(1)* %ina, <8 x half> addrspace(1)* %inb) {
239243 entry:
245249 }
246250
247251 ; GCN-LABEL: {{^}}mul_i8:
248 ; NOSDWA: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
249 ; NOSDWA-NOT: v_mul_u32_u24_sdwa
250 ; SDWA: v_mul_lo_i32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
252 ; NOSDWA: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
253 ; NOSDWA-NOT: v_mul_u32_u24_sdwa
254 ; GFX89: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
255 ; GFX10: v_mul_lo_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
251256 ; SDWA-NOT: v_mul_u32_u24_sdwa
252257
253258 define amdgpu_kernel void @mul_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %ina, i8 addrspace(1)* %inb) {
271276
272277 ; GFX9-DAG: v_mul_lo_u16_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
273278 ; GFX9-DAG: v_mul_lo_u16_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
279
280 ; GFX10-DAG: v_mul_lo_u16_e64
281 ; GFX10-DAG: v_mul_lo_u16_e64
282
274283 ; GFX9: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
284
285 ; GFX10-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
286 ; GFX10-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
287 ; GFX10: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
288
275289
276290 define amdgpu_kernel void @mul_v2i8(<2 x i8> addrspace(1)* %out, <2 x i8> addrspace(1)* %ina, <2 x i8> addrspace(1)* %inb) {
277291 entry:
298312 ; GFX9-DAG: v_mul_lo_u16_sdwa
299313 ; GFX9-DAG: v_mul_lo_u16_sdwa
300314
315 ; GFX10-DAG: v_mul_lo_u16_e64
316 ; GFX10-DAG: v_mul_lo_u16_e64
317 ; GFX10-DAG: v_mul_lo_u16_e64
318 ; GFX10-DAG: v_mul_lo_u16_e64
319
301320 define amdgpu_kernel void @mul_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> addrspace(1)* %ina, <4 x i8> addrspace(1)* %inb) {
302321 entry:
303322 %a = load <4 x i8>, <4 x i8> addrspace(1)* %ina, align 4
328347 ; GFX9-DAG: v_mul_lo_u16_sdwa
329348 ; GFX9-DAG: v_mul_lo_u16_sdwa
330349 ; GFX9-DAG: v_mul_lo_u16_sdwa
350
351 ; GFX10-DAG: v_mul_lo_u16_e64
352 ; GFX10-DAG: v_mul_lo_u16_e64
353 ; GFX10-DAG: v_mul_lo_u16_e64
354 ; GFX10-DAG: v_mul_lo_u16_e64
355 ; GFX10-DAG: v_mul_lo_u16_e64
356 ; GFX10-DAG: v_mul_lo_u16_e64
357 ; GFX10-DAG: v_mul_lo_u16_e64
358 ; GFX10-DAG: v_mul_lo_u16_e64
331359
332360 define amdgpu_kernel void @mul_v8i8(<8 x i8> addrspace(1)* %out, <8 x i8> addrspace(1)* %ina, <8 x i8> addrspace(1)* %inb) {
333361 entry:
370398 ; VI: v_mac_f16_sdwa v[[DST_MAC:[0-9]+]], v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
371399 ; VI: v_lshlrev_b32_e32 v[[DST_SHL:[0-9]+]], 16, v[[DST_MAC]]
372400
373 ; GFX9: v_pk_mul_f16 v[[DST_MUL:[0-9]+]], v{{[0-9]+}}, v[[SRC:[0-9]+]]
374 ; GFX9: v_pk_add_f16 v{{[0-9]+}}, v[[DST_MUL]], v[[SRC]]
401 ; GFX9_10: v_pk_mul_f16 v[[DST_MUL:[0-9]+]], v{{[0-9]+}}, v[[SRC:[0-9]+]]
402 ; GFX9_10: v_pk_add_f16 v{{[0-9]+}}, v[[DST_MUL]], v[[SRC]]
375403
376404 define amdgpu_kernel void @mac_v2half(<2 x half> addrspace(1)* %out, <2 x half> addrspace(1)* %ina, <2 x half> addrspace(1)* %inb) {
377405 entry:
393421 ; GFX9: s_mov_b32 s[[IMM:[0-9]+]], 0x141007b
394422 ; GFX9: v_pk_mul_lo_u16 v{{[0-9]+}}, v{{[0-9]+}}, s[[IMM]]
395423
424 ; GFX10: v_pk_mul_lo_u16 v{{[0-9]+}}, 0x141007b, v{{[0-9]+}}
425
396426 define amdgpu_kernel void @immediate_mul_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %in) {
397427 entry:
398428 %a = load <2 x i16>, <2 x i16> addrspace(1)* %in, align 4
412442
413443 ; VI: v_mul_u32_u24_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
414444
415 ; GFX9: v_pk_mul_lo_u16 v[[DST1:[0-9]+]], v{{[0-9]+}}, v{{[0-9]+}}
416 ; GFX9: v_pk_mul_lo_u16 v{{[0-9]+}}, v[[DST1]], v{{[0-9]+}}
445 ; GFX9_10: v_pk_mul_lo_u16 v[[DST1:[0-9]+]], v{{[0-9]+}}, v{{[0-9]+}}
446 ; GFX9_10: v_pk_mul_lo_u16 v{{[0-9]+}}, v[[DST1]], v{{[0-9]+}}
417447
418448 define amdgpu_kernel void @mulmul_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %ina, <2 x i16> addrspace(1)* %inb) {
419449 entry:
430460
431461 ; VI: v_add_u32_sdwa v{{[0-9]+}}, vcc, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
432462
433 ; GFX9: v_pk_add_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
463 ; GFX9_10: v_pk_add_u16 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
434464
435465 define amdgpu_kernel void @add_bb_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %ina, <2 x i16> addrspace(1)* %inb) {
436466 entry:
457487 ; NOSDWA-NOT: v_or_b32_sdwa
458488
459489 ; VI-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
460 ; GFX9-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
461 ; SDWA-DAG: v_lshlrev_b16_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
490 ; GFX9_10-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
491 ; GFX89-DAG: v_lshlrev_b16_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
492 ;
493 ; GFX10-DAG: v_lshrrev_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
494 ;
462495 ; VI-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
463 ; GFX9-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
464 ; SDWA-DAG: v_lshlrev_b16_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
465 ; SDWA: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
496 ; GFX9_10-DAG: v_and_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
497 ; GFX89-DAG: v_lshlrev_b16_e32 v{{[0-9]+}}, 8, v{{[0-9]+}}
498 ;
499 ; GFX10-DAG: v_lshrrev_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
500 ;
501 ; GFX89: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
502 ;
503 ; GFX10: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
504 ; GFX10: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
505 ; GFX10: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
506 ; GFX10: v_or_b32_sdwa v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
466507
467508 define amdgpu_kernel void @pulled_out_test(<8 x i8> addrspace(1)* %sourceA, <8 x i8> addrspace(1)* %destValues) {
468509 entry:
4040 ; SIVI: v_sub_{{i|u}}32_e32 [[NEG:v[0-9]+]], vcc, 0, [[SRC:v[0-9]+]]
4141 ; GFX9: v_sub_u32_e32 [[NEG:v[0-9]+]], 0, [[SRC:v[0-9]+]]
4242 ; GCN: v_max_i32_e32 [[MAX:v[0-9]+]], [[SRC]], [[NEG]]
43 ; GCN: v_mul_lo_i32 v{{[0-9]+}}, [[MAX]], [[MAX]]
43 ; GCN: v_mul_lo_u32 v{{[0-9]+}}, [[MAX]], [[MAX]]
4444 define amdgpu_kernel void @v_abs_i32_repeat_user(i32 addrspace(1)* %out, i32 addrspace(1)* %src) nounwind {
4545 %val = load i32, i32 addrspace(1)* %src, align 4
4646 %neg = sub i32 0, %val
2020 ; FUNC-LABEL: {{^}}srem_i32_7:
2121 ; SI: s_mov_b32 [[MAGIC:s[0-9]+]], 0x92492493
2222 ; SI: v_mul_hi_i32 {{v[0-9]+}}, {{v[0-9]+}}, [[MAGIC]]
23 ; SI: v_mul_lo_i32
23 ; SI: v_mul_lo_u32
2424 ; SI: v_sub_{{[iu]}}32
2525 ; SI: s_endpgm
2626 define amdgpu_kernel void @srem_i32_7(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
2828
2929 ; SI: v_rcp_iflag_f32_e32 [[RCP:v[0-9]+]]
3030 ; SI-DAG: v_mul_hi_u32 [[RCP_HI:v[0-9]+]], [[RCP]]
31 ; SI-DAG: v_mul_lo_i32 [[RCP_LO:v[0-9]+]], [[RCP]]
31 ; SI-DAG: v_mul_lo_u32 [[RCP_LO:v[0-9]+]], [[RCP]]
3232 ; SI-DAG: v_sub_{{[iu]}}32_e32 [[NEG_RCP_LO:v[0-9]+]], vcc, 0, [[RCP_LO]]
3333 ; SI: v_cmp_eq_u32_e64 [[CC1:s\[[0-9:]+\]]], 0, [[RCP_HI]]
3434 ; SI: v_cndmask_b32_e64 [[CND1:v[0-9]+]], [[RCP_LO]], [[NEG_RCP_LO]], [[CC1]]
3737 ; SI-DAG: v_subrev_{{[iu]}}32_e32 [[RCP_S_E:v[0-9]+]], vcc, [[E]], [[RCP]]
3838 ; SI: v_cndmask_b32_e64 [[CND2:v[0-9]+]], [[RCP_S_E]], [[RCP_A_E]], [[CC1]]
3939 ; SI: v_mul_hi_u32 [[Quotient:v[0-9]+]], [[CND2]],
40 ; SI: v_mul_lo_i32 [[Num_S_Remainder:v[0-9]+]], [[CND2]]
40 ; SI: v_mul_lo_u32 [[Num_S_Remainder:v[0-9]+]], [[CND2]]
4141 ; SI-DAG: v_add_{{[iu]}}32_e32 [[Quotient_A_One:v[0-9]+]], vcc, 1, [[Quotient]]
4242 ; SI-DAG: v_sub_{{[iu]}}32_e32 [[Remainder:v[0-9]+]], vcc, {{[vs][0-9]+}}, [[Num_S_Remainder]]
4343 ; SI-DAG: v_cndmask_b32_e64
112112 ; accurately check all the operands.
113113 ; SI-DAG: v_rcp_iflag_f32_e32
114114 ; SI-DAG: v_mul_hi_u32
115 ; SI-DAG: v_mul_lo_i32
116 ; SI-DAG: v_sub_{{[iu]}}32_e32
117 ; SI-DAG: v_cndmask_b32_e64
118 ; SI-DAG: v_mul_hi_u32
119 ; SI-DAG: v_add_{{[iu]}}32_e32
120 ; SI-DAG: v_subrev_{{[iu]}}32_e32
121 ; SI-DAG: v_cndmask_b32_e64
122 ; SI-DAG: v_mul_hi_u32
123 ; SI-DAG: v_mul_lo_i32
124 ; SI-DAG: v_subrev_{{[iu]}}32_e32
125 ; SI-DAG: v_cndmask_b32_e64
126 ; SI-DAG: v_add_{{[iu]}}32_e32
127 ; SI-DAG: v_subrev_{{[iu]}}32_e32
128 ; SI-DAG: v_cndmask_b32_e64
129 ; SI-DAG: v_cndmask_b32_e64
130 ; SI-DAG: v_add_{{[iu]}}32_e32
131 ; SI-DAG: v_subrev_{{[iu]}}32_e32
132 ; SI-DAG: v_cndmask_b32_e64
133 ; SI-DAG: v_cndmask_b32_e64
134 ; SI-DAG: v_rcp_iflag_f32_e32
135 ; SI-DAG: v_mul_hi_u32
136 ; SI-DAG: v_mul_lo_i32
137 ; SI-DAG: v_sub_{{[iu]}}32_e32
138 ; SI-DAG: v_cndmask_b32_e64
139 ; SI-DAG: v_mul_hi_u32
140 ; SI-DAG: v_add_{{[iu]}}32_e32
141 ; SI-DAG: v_subrev_{{[iu]}}32_e32
142 ; SI-DAG: v_cndmask_b32_e64
143 ; SI-DAG: v_mul_hi_u32
144 ; SI-DAG: v_mul_lo_i32
115 ; SI-DAG: v_mul_lo_u32
116 ; SI-DAG: v_sub_{{[iu]}}32_e32
117 ; SI-DAG: v_cndmask_b32_e64
118 ; SI-DAG: v_mul_hi_u32
119 ; SI-DAG: v_add_{{[iu]}}32_e32
120 ; SI-DAG: v_subrev_{{[iu]}}32_e32
121 ; SI-DAG: v_cndmask_b32_e64
122 ; SI-DAG: v_mul_hi_u32
123 ; SI-DAG: v_mul_lo_u32
124 ; SI-DAG: v_subrev_{{[iu]}}32_e32
125 ; SI-DAG: v_cndmask_b32_e64
126 ; SI-DAG: v_add_{{[iu]}}32_e32
127 ; SI-DAG: v_subrev_{{[iu]}}32_e32
128 ; SI-DAG: v_cndmask_b32_e64
129 ; SI-DAG: v_cndmask_b32_e64
130 ; SI-DAG: v_add_{{[iu]}}32_e32
131 ; SI-DAG: v_subrev_{{[iu]}}32_e32
132 ; SI-DAG: v_cndmask_b32_e64
133 ; SI-DAG: v_cndmask_b32_e64
134 ; SI-DAG: v_rcp_iflag_f32_e32
135 ; SI-DAG: v_mul_hi_u32
136 ; SI-DAG: v_mul_lo_u32
137 ; SI-DAG: v_sub_{{[iu]}}32_e32
138 ; SI-DAG: v_cndmask_b32_e64
139 ; SI-DAG: v_mul_hi_u32
140 ; SI-DAG: v_add_{{[iu]}}32_e32
141 ; SI-DAG: v_subrev_{{[iu]}}32_e32
142 ; SI-DAG: v_cndmask_b32_e64
143 ; SI-DAG: v_mul_hi_u32
144 ; SI-DAG: v_mul_lo_u32
145145 ; SI-DAG: v_subrev_{{[iu]}}32_e32
146146 ; SI-DAG: v_cndmask_b32_e64
147147 ; SI-DAG: v_add_{{[iu]}}32_e32
259259
260260 ; SI-DAG: v_rcp_iflag_f32_e32
261261 ; SI-DAG: v_mul_hi_u32
262 ; SI-DAG: v_mul_lo_i32
263 ; SI-DAG: v_sub_{{[iu]}}32_e32
264 ; SI-DAG: v_cndmask_b32_e64
265 ; SI-DAG: v_mul_hi_u32
266 ; SI-DAG: v_add_{{[iu]}}32_e32
267 ; SI-DAG: v_subrev_{{[iu]}}32_e32
268 ; SI-DAG: v_cndmask_b32_e64
269 ; SI-DAG: v_mul_hi_u32
270 ; SI-DAG: v_mul_lo_i32
271 ; SI-DAG: v_subrev_{{[iu]}}32_e32
272 ; SI-DAG: v_cndmask_b32_e64
273 ; SI-DAG: v_add_{{[iu]}}32_e32
274 ; SI-DAG: v_subrev_{{[iu]}}32_e32
275 ; SI-DAG: v_cndmask_b32_e64
276 ; SI-DAG: v_cndmask_b32_e64
277 ; SI-DAG: v_add_{{[iu]}}32_e32
278 ; SI-DAG: v_subrev_{{[iu]}}32_e32
279 ; SI-DAG: v_cndmask_b32_e64
280 ; SI-DAG: v_cndmask_b32_e64
281 ; SI-DAG: v_rcp_iflag_f32_e32
282 ; SI-DAG: v_mul_hi_u32
283 ; SI-DAG: v_mul_lo_i32
284 ; SI-DAG: v_sub_{{[iu]}}32_e32
285 ; SI-DAG: v_cndmask_b32_e64
286 ; SI-DAG: v_mul_hi_u32
287 ; SI-DAG: v_add_{{[iu]}}32_e32
288 ; SI-DAG: v_subrev_{{[iu]}}32_e32
289 ; SI-DAG: v_cndmask_b32_e64
290 ; SI-DAG: v_mul_hi_u32
291 ; SI-DAG: v_mul_lo_i32
292 ; SI-DAG: v_subrev_{{[iu]}}32_e32
293 ; SI-DAG: v_cndmask_b32_e64
294 ; SI-DAG: v_add_{{[iu]}}32_e32
295 ; SI-DAG: v_subrev_{{[iu]}}32_e32
296 ; SI-DAG: v_cndmask_b32_e64
297 ; SI-DAG: v_cndmask_b32_e64
298 ; SI-DAG: v_add_{{[iu]}}32_e32
299 ; SI-DAG: v_subrev_{{[iu]}}32_e32
300 ; SI-DAG: v_cndmask_b32_e64
301 ; SI-DAG: v_cndmask_b32_e64
302 ; SI-DAG: v_rcp_iflag_f32_e32
303 ; SI-DAG: v_mul_hi_u32
304 ; SI-DAG: v_mul_lo_i32
305 ; SI-DAG: v_sub_{{[iu]}}32_e32
306 ; SI-DAG: v_cndmask_b32_e64
307 ; SI-DAG: v_mul_hi_u32
308 ; SI-DAG: v_add_{{[iu]}}32_e32
309 ; SI-DAG: v_subrev_{{[iu]}}32_e32
310 ; SI-DAG: v_cndmask_b32_e64
311 ; SI-DAG: v_mul_hi_u32
312 ; SI-DAG: v_mul_lo_i32
313 ; SI-DAG: v_subrev_{{[iu]}}32_e32
314 ; SI-DAG: v_cndmask_b32_e64
315 ; SI-DAG: v_add_{{[iu]}}32_e32
316 ; SI-DAG: v_subrev_{{[iu]}}32_e32
317 ; SI-DAG: v_cndmask_b32_e64
318 ; SI-DAG: v_cndmask_b32_e64
319 ; SI-DAG: v_add_{{[iu]}}32_e32
320 ; SI-DAG: v_subrev_{{[iu]}}32_e32
321 ; SI-DAG: v_cndmask_b32_e64
322 ; SI-DAG: v_cndmask_b32_e64
323 ; SI-DAG: v_rcp_iflag_f32_e32
324 ; SI-DAG: v_mul_hi_u32
325 ; SI-DAG: v_mul_lo_i32
262 ; SI-DAG: v_mul_lo_u32
263 ; SI-DAG: v_sub_{{[iu]}}32_e32
264 ; SI-DAG: v_cndmask_b32_e64
265 ; SI-DAG: v_mul_hi_u32
266 ; SI-DAG: v_add_{{[iu]}}32_e32
267 ; SI-DAG: v_subrev_{{[iu]}}32_e32
268 ; SI-DAG: v_cndmask_b32_e64
269 ; SI-DAG: v_mul_hi_u32
270 ; SI-DAG: v_mul_lo_u32
271 ; SI-DAG: v_subrev_{{[iu]}}32_e32
272 ; SI-DAG: v_cndmask_b32_e64
273 ; SI-DAG: v_add_{{[iu]}}32_e32
274 ; SI-DAG: v_subrev_{{[iu]}}32_e32
275 ; SI-DAG: v_cndmask_b32_e64
276 ; SI-DAG: v_cndmask_b32_e64
277 ; SI-DAG: v_add_{{[iu]}}32_e32
278 ; SI-DAG: v_subrev_{{[iu]}}32_e32
279 ; SI-DAG: v_cndmask_b32_e64
280 ; SI-DAG: v_cndmask_b32_e64
281 ; SI-DAG: v_rcp_iflag_f32_e32
282 ; SI-DAG: v_mul_hi_u32
283 ; SI-DAG: v_mul_lo_u32
284 ; SI-DAG: v_sub_{{[iu]}}32_e32
285 ; SI-DAG: v_cndmask_b32_e64
286 ; SI-DAG: v_mul_hi_u32
287 ; SI-DAG: v_add_{{[iu]}}32_e32
288 ; SI-DAG: v_subrev_{{[iu]}}32_e32
289 ; SI-DAG: v_cndmask_b32_e64
290 ; SI-DAG: v_mul_hi_u32
291 ; SI-DAG: v_mul_lo_u32
292 ; SI-DAG: v_subrev_{{[iu]}}32_e32
293 ; SI-DAG: v_cndmask_b32_e64
294 ; SI-DAG: v_add_{{[iu]}}32_e32
295 ; SI-DAG: v_subrev_{{[iu]}}32_e32
296 ; SI-DAG: v_cndmask_b32_e64
297 ; SI-DAG: v_cndmask_b32_e64
298 ; SI-DAG: v_add_{{[iu]}}32_e32
299 ; SI-DAG: v_subrev_{{[iu]}}32_e32
300 ; SI-DAG: v_cndmask_b32_e64
301 ; SI-DAG: v_cndmask_b32_e64
302 ; SI-DAG: v_rcp_iflag_f32_e32
303 ; SI-DAG: v_mul_hi_u32
304 ; SI-DAG: v_mul_lo_u32
305 ; SI-DAG: v_sub_{{[iu]}}32_e32
306 ; SI-DAG: v_cndmask_b32_e64
307 ; SI-DAG: v_mul_hi_u32
308 ; SI-DAG: v_add_{{[iu]}}32_e32
309 ; SI-DAG: v_subrev_{{[iu]}}32_e32
310 ; SI-DAG: v_cndmask_b32_e64
311 ; SI-DAG: v_mul_hi_u32
312 ; SI-DAG: v_mul_lo_u32
313 ; SI-DAG: v_subrev_{{[iu]}}32_e32
314 ; SI-DAG: v_cndmask_b32_e64
315 ; SI-DAG: v_add_{{[iu]}}32_e32
316 ; SI-DAG: v_subrev_{{[iu]}}32_e32
317 ; SI-DAG: v_cndmask_b32_e64
318 ; SI-DAG: v_cndmask_b32_e64
319 ; SI-DAG: v_add_{{[iu]}}32_e32
320 ; SI-DAG: v_subrev_{{[iu]}}32_e32
321 ; SI-DAG: v_cndmask_b32_e64
322 ; SI-DAG: v_cndmask_b32_e64
323 ; SI-DAG: v_rcp_iflag_f32_e32
324 ; SI-DAG: v_mul_hi_u32
325 ; SI-DAG: v_mul_lo_u32
326326 ; SI-DAG: v_sub_{{[iu]}}32_e32
327327 ; SI-DAG: v_cndmask_b32_e64
328328 ; SI-DAG: v_mul_hi_u32
2121 ; SI: s_mov_b32 [[MAGIC:s[0-9]+]], 0x24924925
2222 ; SI: v_mul_hi_u32 {{v[0-9]+}}, {{v[0-9]+}}, [[MAGIC]]
2323 ; SI: v_subrev_{{[iu]}}32
24 ; SI: v_mul_lo_i32
24 ; SI: v_mul_lo_u32
2525 ; SI: v_sub_{{[iu]}}32
2626 ; SI: buffer_store_dword
2727 ; SI: s_endpgm
9191 ;CHECK-NEXT: ; %main_body
9292 ;CHECK-NEXT: s_mov_b64 [[ORIG:s\[[0-9]+:[0-9]+\]]], exec
9393 ;CHECK-NEXT: s_wqm_b64 exec, exec
94 ;CHECK: v_mul_lo_i32 [[MUL:v[0-9]+]], v0, v1
94 ;CHECK: v_mul_lo_u32 [[MUL:v[0-9]+]], v0, v1
9595 ;CHECK: s_and_b64 exec, exec, [[ORIG]]
9696 ;CHECK: store
9797 ;CHECK: s_wqm_b64 exec, exec
8181 define i32 @called(i32 %a) noinline {
8282 ; GFX9: v_add_u32_e32 v1, v0, v0
8383 %add = add i32 %a, %a
84 ; GFX9: v_mul_lo_i32 v0, v1, v0
84 ; GFX9: v_mul_lo_u32 v0, v1, v0
8585 %mul = mul i32 %add, %a
8686 ; GFX9: v_sub_u32_e32 v0, v0, v1
8787 %sub = sub i32 %mul, %add