[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / combine-fma-add-mul.ll
blob785efb6c4375de6f8f4480515d7c87c3a07c6149
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 -fp-contract=fast < %s | FileCheck -check-prefix=GFX9-CONTRACT %s
4 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX9-DENORM %s
5 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 -enable-unsafe-fp-math < %s | FileCheck -check-prefix=GFX9-UNSAFE %s
6 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s
7 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 -fp-contract=fast < %s | FileCheck -check-prefix=GFX10-CONTRACT %s
8 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX10-DENORM %s
9 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 -enable-unsafe-fp-math < %s | FileCheck -check-prefix=GFX10-UNSAFE %s
11 define float @test_f32_add_mul(float %x, float %y, float %z) {
12 ; GFX9-LABEL: test_f32_add_mul:
13 ; GFX9:       ; %bb.0: ; %.entry
14 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
16 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
17 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
19 ; GFX9-CONTRACT-LABEL: test_f32_add_mul:
20 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
21 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v2
23 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
25 ; GFX9-DENORM-LABEL: test_f32_add_mul:
26 ; GFX9-DENORM:       ; %bb.0: ; %.entry
27 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28 ; GFX9-DENORM-NEXT:    v_mad_f32 v0, v0, v1, v2
29 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
31 ; GFX9-UNSAFE-LABEL: test_f32_add_mul:
32 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
33 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v2
35 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
37 ; GFX10-LABEL: test_f32_add_mul:
38 ; GFX10:       ; %bb.0: ; %.entry
39 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
41 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
42 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
43 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
45 ; GFX10-CONTRACT-LABEL: test_f32_add_mul:
46 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
47 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
48 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
49 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v2
50 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
52 ; GFX10-DENORM-LABEL: test_f32_add_mul:
53 ; GFX10-DENORM:       ; %bb.0: ; %.entry
54 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
56 ; GFX10-DENORM-NEXT:    v_mad_f32 v0, v0, v1, v2
57 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
59 ; GFX10-UNSAFE-LABEL: test_f32_add_mul:
60 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
61 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
62 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
63 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v2
64 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
65 .entry:
66   %a = fmul float %x, %y
67   %b = fadd float %a, %z
68   ret float %b
71 define float @test_f32_add_mul_rhs(float %x, float %y, float %z) {
72 ; GFX9-LABEL: test_f32_add_mul_rhs:
73 ; GFX9:       ; %bb.0: ; %.entry
74 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
75 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
76 ; GFX9-NEXT:    v_add_f32_e32 v0, v2, v0
77 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
79 ; GFX9-CONTRACT-LABEL: test_f32_add_mul_rhs:
80 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
81 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
82 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v2
83 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
85 ; GFX9-DENORM-LABEL: test_f32_add_mul_rhs:
86 ; GFX9-DENORM:       ; %bb.0: ; %.entry
87 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
88 ; GFX9-DENORM-NEXT:    v_mad_f32 v0, v0, v1, v2
89 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
91 ; GFX9-UNSAFE-LABEL: test_f32_add_mul_rhs:
92 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
93 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v2
95 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
97 ; GFX10-LABEL: test_f32_add_mul_rhs:
98 ; GFX10:       ; %bb.0: ; %.entry
99 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
101 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
102 ; GFX10-NEXT:    v_add_f32_e32 v0, v2, v0
103 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
105 ; GFX10-CONTRACT-LABEL: test_f32_add_mul_rhs:
106 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
107 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
108 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
109 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v2
110 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
112 ; GFX10-DENORM-LABEL: test_f32_add_mul_rhs:
113 ; GFX10-DENORM:       ; %bb.0: ; %.entry
114 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
115 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
116 ; GFX10-DENORM-NEXT:    v_mad_f32 v0, v0, v1, v2
117 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
119 ; GFX10-UNSAFE-LABEL: test_f32_add_mul_rhs:
120 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
121 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
122 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
123 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v2
124 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
125 .entry:
126   %a = fmul float %x, %y
127   %b = fadd float %z, %a
128   ret float %b
131 define float @test_add_mul_multiple_defs_z(float %x, float %y, <2 x float> addrspace(1)* %vec_ptr) {
132 ; GFX9-LABEL: test_add_mul_multiple_defs_z:
133 ; GFX9:       ; %bb.0: ; %.entry
134 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
135 ; GFX9-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
136 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
137 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
138 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v3
139 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
141 ; GFX9-CONTRACT-LABEL: test_add_mul_multiple_defs_z:
142 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
143 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
144 ; GFX9-CONTRACT-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
145 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)
146 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v3
147 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
149 ; GFX9-DENORM-LABEL: test_add_mul_multiple_defs_z:
150 ; GFX9-DENORM:       ; %bb.0: ; %.entry
151 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
152 ; GFX9-DENORM-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
153 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)
154 ; GFX9-DENORM-NEXT:    v_mac_f32_e32 v3, v0, v1
155 ; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v3
156 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
158 ; GFX9-UNSAFE-LABEL: test_add_mul_multiple_defs_z:
159 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
160 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
161 ; GFX9-UNSAFE-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
162 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0)
163 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v3
164 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
166 ; GFX10-LABEL: test_add_mul_multiple_defs_z:
167 ; GFX10:       ; %bb.0: ; %.entry
168 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
169 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
170 ; GFX10-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
171 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
172 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
173 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v3
174 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
176 ; GFX10-CONTRACT-LABEL: test_add_mul_multiple_defs_z:
177 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
178 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
179 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
180 ; GFX10-CONTRACT-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
181 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0)
182 ; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v3, v0, v1
183 ; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v3
184 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
186 ; GFX10-DENORM-LABEL: test_add_mul_multiple_defs_z:
187 ; GFX10-DENORM:       ; %bb.0: ; %.entry
188 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
189 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
190 ; GFX10-DENORM-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
191 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)
192 ; GFX10-DENORM-NEXT:    v_mac_f32_e32 v3, v0, v1
193 ; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v3
194 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
196 ; GFX10-UNSAFE-LABEL: test_add_mul_multiple_defs_z:
197 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
198 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
199 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
200 ; GFX10-UNSAFE-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
201 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0)
202 ; GFX10-UNSAFE-NEXT:    v_fmac_f32_e32 v3, v0, v1
203 ; GFX10-UNSAFE-NEXT:    v_mov_b32_e32 v0, v3
204 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
205 .entry:
206   %a = fmul float %x, %y
207   %vec = load <2 x float>, <2 x float> addrspace(1)* %vec_ptr
208   %z = extractelement <2 x float> %vec, i64 1
209   %b = fadd float %a, %z
210   ret float %b
213 define float @test_add_mul_rhs_multiple_defs_z(float %x, float %y, <2 x float> addrspace(1)* %vec_ptr) {
214 ; GFX9-LABEL: test_add_mul_rhs_multiple_defs_z:
215 ; GFX9:       ; %bb.0: ; %.entry
216 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
217 ; GFX9-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
218 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
219 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX9-NEXT:    v_add_f32_e32 v0, v3, v0
221 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
223 ; GFX9-CONTRACT-LABEL: test_add_mul_rhs_multiple_defs_z:
224 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
225 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
226 ; GFX9-CONTRACT-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
227 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)
228 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v3
229 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
231 ; GFX9-DENORM-LABEL: test_add_mul_rhs_multiple_defs_z:
232 ; GFX9-DENORM:       ; %bb.0: ; %.entry
233 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
234 ; GFX9-DENORM-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
235 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)
236 ; GFX9-DENORM-NEXT:    v_mac_f32_e32 v3, v0, v1
237 ; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v3
238 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
240 ; GFX9-UNSAFE-LABEL: test_add_mul_rhs_multiple_defs_z:
241 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
242 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243 ; GFX9-UNSAFE-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
244 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0)
245 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v1, v3
246 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
248 ; GFX10-LABEL: test_add_mul_rhs_multiple_defs_z:
249 ; GFX10:       ; %bb.0: ; %.entry
250 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
252 ; GFX10-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
253 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
254 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
255 ; GFX10-NEXT:    v_add_f32_e32 v0, v3, v0
256 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
258 ; GFX10-CONTRACT-LABEL: test_add_mul_rhs_multiple_defs_z:
259 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
260 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
261 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
262 ; GFX10-CONTRACT-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
263 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0)
264 ; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v3, v0, v1
265 ; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v3
266 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
268 ; GFX10-DENORM-LABEL: test_add_mul_rhs_multiple_defs_z:
269 ; GFX10-DENORM:       ; %bb.0: ; %.entry
270 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
271 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
272 ; GFX10-DENORM-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
273 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)
274 ; GFX10-DENORM-NEXT:    v_mac_f32_e32 v3, v0, v1
275 ; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v3
276 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
278 ; GFX10-UNSAFE-LABEL: test_add_mul_rhs_multiple_defs_z:
279 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
280 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
282 ; GFX10-UNSAFE-NEXT:    global_load_dwordx2 v[2:3], v[2:3], off
283 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0)
284 ; GFX10-UNSAFE-NEXT:    v_fmac_f32_e32 v3, v0, v1
285 ; GFX10-UNSAFE-NEXT:    v_mov_b32_e32 v0, v3
286 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
287 .entry:
288   %a = fmul float %x, %y
289   %vec = load <2 x float>, <2 x float> addrspace(1)* %vec_ptr
290   %z = extractelement <2 x float> %vec, i64 1
291   %b = fadd float %z, %a
292   ret float %b
295 define half @test_half_add_mul(half %x, half %y, half %z) {
296 ; GFX9-LABEL: test_half_add_mul:
297 ; GFX9:       ; %bb.0: ; %.entry
298 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
299 ; GFX9-NEXT:    v_mul_f16_e32 v0, v0, v1
300 ; GFX9-NEXT:    v_add_f16_e32 v0, v0, v2
301 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
303 ; GFX9-CONTRACT-LABEL: test_half_add_mul:
304 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
305 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
306 ; GFX9-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2
307 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
309 ; GFX9-DENORM-LABEL: test_half_add_mul:
310 ; GFX9-DENORM:       ; %bb.0: ; %.entry
311 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
312 ; GFX9-DENORM-NEXT:    v_mad_legacy_f16 v0, v0, v1, v2
313 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
315 ; GFX9-UNSAFE-LABEL: test_half_add_mul:
316 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
317 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
318 ; GFX9-UNSAFE-NEXT:    v_fma_f16 v0, v0, v1, v2
319 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
321 ; GFX10-LABEL: test_half_add_mul:
322 ; GFX10:       ; %bb.0: ; %.entry
323 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
324 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
325 ; GFX10-NEXT:    v_mul_f16_e32 v0, v0, v1
326 ; GFX10-NEXT:    v_add_f16_e32 v0, v0, v2
327 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
329 ; GFX10-CONTRACT-LABEL: test_half_add_mul:
330 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
331 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
332 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
333 ; GFX10-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2
334 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
336 ; GFX10-DENORM-LABEL: test_half_add_mul:
337 ; GFX10-DENORM:       ; %bb.0: ; %.entry
338 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
339 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
340 ; GFX10-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1
341 ; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v0, v2
342 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
344 ; GFX10-UNSAFE-LABEL: test_half_add_mul:
345 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
346 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
347 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
348 ; GFX10-UNSAFE-NEXT:    v_fma_f16 v0, v0, v1, v2
349 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
350 .entry:
351   %a = fmul half %x, %y
352   %b = fadd half %a, %z
353   ret half %b
356 define half @test_half_add_mul_rhs(half %x, half %y, half %z) {
357 ; GFX9-LABEL: test_half_add_mul_rhs:
358 ; GFX9:       ; %bb.0: ; %.entry
359 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
360 ; GFX9-NEXT:    v_mul_f16_e32 v0, v0, v1
361 ; GFX9-NEXT:    v_add_f16_e32 v0, v2, v0
362 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
364 ; GFX9-CONTRACT-LABEL: test_half_add_mul_rhs:
365 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
366 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
367 ; GFX9-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2
368 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
370 ; GFX9-DENORM-LABEL: test_half_add_mul_rhs:
371 ; GFX9-DENORM:       ; %bb.0: ; %.entry
372 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
373 ; GFX9-DENORM-NEXT:    v_mad_legacy_f16 v0, v0, v1, v2
374 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
376 ; GFX9-UNSAFE-LABEL: test_half_add_mul_rhs:
377 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
378 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
379 ; GFX9-UNSAFE-NEXT:    v_fma_f16 v0, v0, v1, v2
380 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
382 ; GFX10-LABEL: test_half_add_mul_rhs:
383 ; GFX10:       ; %bb.0: ; %.entry
384 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
385 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
386 ; GFX10-NEXT:    v_mul_f16_e32 v0, v0, v1
387 ; GFX10-NEXT:    v_add_f16_e32 v0, v2, v0
388 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
390 ; GFX10-CONTRACT-LABEL: test_half_add_mul_rhs:
391 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
392 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
393 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
394 ; GFX10-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2
395 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
397 ; GFX10-DENORM-LABEL: test_half_add_mul_rhs:
398 ; GFX10-DENORM:       ; %bb.0: ; %.entry
399 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
400 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
401 ; GFX10-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1
402 ; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v2, v0
403 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
405 ; GFX10-UNSAFE-LABEL: test_half_add_mul_rhs:
406 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
407 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
408 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
409 ; GFX10-UNSAFE-NEXT:    v_fma_f16 v0, v0, v1, v2
410 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
411 .entry:
412   %a = fmul half %x, %y
413   %b = fadd half %z, %a
414   ret half %b
417 define double @test_double_add_mul(double %x, double %y, double %z) {
418 ; GFX9-LABEL: test_double_add_mul:
419 ; GFX9:       ; %bb.0: ; %.entry
420 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
421 ; GFX9-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
422 ; GFX9-NEXT:    v_add_f64 v[0:1], v[0:1], v[4:5]
423 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
425 ; GFX9-CONTRACT-LABEL: test_double_add_mul:
426 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
427 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
428 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
429 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
431 ; GFX9-DENORM-LABEL: test_double_add_mul:
432 ; GFX9-DENORM:       ; %bb.0: ; %.entry
433 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
434 ; GFX9-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
435 ; GFX9-DENORM-NEXT:    v_add_f64 v[0:1], v[0:1], v[4:5]
436 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
438 ; GFX9-UNSAFE-LABEL: test_double_add_mul:
439 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
440 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
441 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
442 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
444 ; GFX10-LABEL: test_double_add_mul:
445 ; GFX10:       ; %bb.0: ; %.entry
446 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
447 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
448 ; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
449 ; GFX10-NEXT:    v_add_f64 v[0:1], v[0:1], v[4:5]
450 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
452 ; GFX10-CONTRACT-LABEL: test_double_add_mul:
453 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
454 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
455 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
456 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
457 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
459 ; GFX10-DENORM-LABEL: test_double_add_mul:
460 ; GFX10-DENORM:       ; %bb.0: ; %.entry
461 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
462 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
463 ; GFX10-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
464 ; GFX10-DENORM-NEXT:    v_add_f64 v[0:1], v[0:1], v[4:5]
465 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
467 ; GFX10-UNSAFE-LABEL: test_double_add_mul:
468 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
469 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
470 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
471 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
472 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
473 .entry:
474   %a = fmul double %x, %y
475   %b = fadd double %a, %z
476   ret double %b
479 define double @test_double_add_mul_rhs(double %x, double %y, double %z) {
480 ; GFX9-LABEL: test_double_add_mul_rhs:
481 ; GFX9:       ; %bb.0: ; %.entry
482 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
483 ; GFX9-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
484 ; GFX9-NEXT:    v_add_f64 v[0:1], v[4:5], v[0:1]
485 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
487 ; GFX9-CONTRACT-LABEL: test_double_add_mul_rhs:
488 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
489 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
491 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
493 ; GFX9-DENORM-LABEL: test_double_add_mul_rhs:
494 ; GFX9-DENORM:       ; %bb.0: ; %.entry
495 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
496 ; GFX9-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
497 ; GFX9-DENORM-NEXT:    v_add_f64 v[0:1], v[4:5], v[0:1]
498 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
500 ; GFX9-UNSAFE-LABEL: test_double_add_mul_rhs:
501 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
502 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
503 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
504 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
506 ; GFX10-LABEL: test_double_add_mul_rhs:
507 ; GFX10:       ; %bb.0: ; %.entry
508 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
509 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
510 ; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
511 ; GFX10-NEXT:    v_add_f64 v[0:1], v[4:5], v[0:1]
512 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
514 ; GFX10-CONTRACT-LABEL: test_double_add_mul_rhs:
515 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
516 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
517 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
518 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
519 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
521 ; GFX10-DENORM-LABEL: test_double_add_mul_rhs:
522 ; GFX10-DENORM:       ; %bb.0: ; %.entry
523 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
524 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
525 ; GFX10-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]
526 ; GFX10-DENORM-NEXT:    v_add_f64 v[0:1], v[4:5], v[0:1]
527 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
529 ; GFX10-UNSAFE-LABEL: test_double_add_mul_rhs:
530 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
531 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
532 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
533 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
534 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
535 .entry:
536   %a = fmul double %x, %y
537   %b = fadd double %z, %a
538   ret double %b
541 define <4 x float> @test_4xfloat_add_mul(<4 x float> %x, <4 x float> %y, <4 x float> %z) {
542 ; GFX9-LABEL: test_4xfloat_add_mul:
543 ; GFX9:       ; %bb.0: ; %.entry
544 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
545 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v4
546 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v5
547 ; GFX9-NEXT:    v_mul_f32_e32 v2, v2, v6
548 ; GFX9-NEXT:    v_mul_f32_e32 v3, v3, v7
549 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v8
550 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v9
551 ; GFX9-NEXT:    v_add_f32_e32 v2, v2, v10
552 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v11
553 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
555 ; GFX9-CONTRACT-LABEL: test_4xfloat_add_mul:
556 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
557 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
558 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v4, v8
559 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v1, v1, v5, v9
560 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v6, v10
561 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v3, v3, v7, v11
562 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
564 ; GFX9-DENORM-LABEL: test_4xfloat_add_mul:
565 ; GFX9-DENORM:       ; %bb.0: ; %.entry
566 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
567 ; GFX9-DENORM-NEXT:    v_mad_f32 v0, v0, v4, v8
568 ; GFX9-DENORM-NEXT:    v_mad_f32 v1, v1, v5, v9
569 ; GFX9-DENORM-NEXT:    v_mad_f32 v2, v2, v6, v10
570 ; GFX9-DENORM-NEXT:    v_mad_f32 v3, v3, v7, v11
571 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
573 ; GFX9-UNSAFE-LABEL: test_4xfloat_add_mul:
574 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
575 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
576 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v4, v8
577 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v1, v1, v5, v9
578 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v2, v2, v6, v10
579 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v3, v3, v7, v11
580 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
582 ; GFX10-LABEL: test_4xfloat_add_mul:
583 ; GFX10:       ; %bb.0: ; %.entry
584 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
585 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
586 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v4
587 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v5
588 ; GFX10-NEXT:    v_mul_f32_e32 v2, v2, v6
589 ; GFX10-NEXT:    v_mul_f32_e32 v3, v3, v7
590 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v8
591 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v9
592 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v10
593 ; GFX10-NEXT:    v_add_f32_e32 v3, v3, v11
594 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
596 ; GFX10-CONTRACT-LABEL: test_4xfloat_add_mul:
597 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
598 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
599 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
600 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v0, v0, v4, v8
601 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v1, v1, v5, v9
602 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v2, v2, v6, v10
603 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v3, v3, v7, v11
604 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
606 ; GFX10-DENORM-LABEL: test_4xfloat_add_mul:
607 ; GFX10-DENORM:       ; %bb.0: ; %.entry
608 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
609 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
610 ; GFX10-DENORM-NEXT:    v_mad_f32 v0, v0, v4, v8
611 ; GFX10-DENORM-NEXT:    v_mad_f32 v1, v1, v5, v9
612 ; GFX10-DENORM-NEXT:    v_mad_f32 v2, v2, v6, v10
613 ; GFX10-DENORM-NEXT:    v_mad_f32 v3, v3, v7, v11
614 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
616 ; GFX10-UNSAFE-LABEL: test_4xfloat_add_mul:
617 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
618 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
619 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
620 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v0, v0, v4, v8
621 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v1, v1, v5, v9
622 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v2, v2, v6, v10
623 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v3, v3, v7, v11
624 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
625 .entry:
626   %a = fmul <4 x float> %x, %y
627   %b = fadd <4 x float> %a, %z
628   ret <4 x float> %b
631 define <3 x float> @test_3xfloat_add_mul_rhs(<3 x float> %x, <3 x float> %y, <3 x float> %z) {
632 ; GFX9-LABEL: test_3xfloat_add_mul_rhs:
633 ; GFX9:       ; %bb.0: ; %.entry
634 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
635 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v3
636 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v4
637 ; GFX9-NEXT:    v_mul_f32_e32 v2, v2, v5
638 ; GFX9-NEXT:    v_add_f32_e32 v0, v6, v0
639 ; GFX9-NEXT:    v_add_f32_e32 v1, v7, v1
640 ; GFX9-NEXT:    v_add_f32_e32 v2, v8, v2
641 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
643 ; GFX9-CONTRACT-LABEL: test_3xfloat_add_mul_rhs:
644 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
645 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
646 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v3, v6
647 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v1, v1, v4, v7
648 ; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v5, v8
649 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
651 ; GFX9-DENORM-LABEL: test_3xfloat_add_mul_rhs:
652 ; GFX9-DENORM:       ; %bb.0: ; %.entry
653 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
654 ; GFX9-DENORM-NEXT:    v_mad_f32 v0, v0, v3, v6
655 ; GFX9-DENORM-NEXT:    v_mad_f32 v1, v1, v4, v7
656 ; GFX9-DENORM-NEXT:    v_mad_f32 v2, v2, v5, v8
657 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
659 ; GFX9-UNSAFE-LABEL: test_3xfloat_add_mul_rhs:
660 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
661 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
662 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v0, v0, v3, v6
663 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v1, v1, v4, v7
664 ; GFX9-UNSAFE-NEXT:    v_fma_f32 v2, v2, v5, v8
665 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
667 ; GFX10-LABEL: test_3xfloat_add_mul_rhs:
668 ; GFX10:       ; %bb.0: ; %.entry
669 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
670 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
671 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v3
672 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v4
673 ; GFX10-NEXT:    v_mul_f32_e32 v2, v2, v5
674 ; GFX10-NEXT:    v_add_f32_e32 v0, v6, v0
675 ; GFX10-NEXT:    v_add_f32_e32 v1, v7, v1
676 ; GFX10-NEXT:    v_add_f32_e32 v2, v8, v2
677 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
679 ; GFX10-CONTRACT-LABEL: test_3xfloat_add_mul_rhs:
680 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
681 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
682 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
683 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v0, v0, v3, v6
684 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v1, v1, v4, v7
685 ; GFX10-CONTRACT-NEXT:    v_fma_f32 v2, v2, v5, v8
686 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
688 ; GFX10-DENORM-LABEL: test_3xfloat_add_mul_rhs:
689 ; GFX10-DENORM:       ; %bb.0: ; %.entry
690 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
691 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
692 ; GFX10-DENORM-NEXT:    v_mad_f32 v0, v0, v3, v6
693 ; GFX10-DENORM-NEXT:    v_mad_f32 v1, v1, v4, v7
694 ; GFX10-DENORM-NEXT:    v_mad_f32 v2, v2, v5, v8
695 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
697 ; GFX10-UNSAFE-LABEL: test_3xfloat_add_mul_rhs:
698 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
699 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
700 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
701 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v0, v0, v3, v6
702 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v1, v1, v4, v7
703 ; GFX10-UNSAFE-NEXT:    v_fma_f32 v2, v2, v5, v8
704 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
705 .entry:
706   %a = fmul <3 x float> %x, %y
707   %b = fadd <3 x float> %z, %a
708   ret <3 x float> %b
711 define <4 x half> @test_4xhalf_add_mul(<4 x half> %x, <4 x half> %y, <4 x half> %z) {
712 ; GFX9-LABEL: test_4xhalf_add_mul:
713 ; GFX9:       ; %bb.0: ; %.entry
714 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
715 ; GFX9-NEXT:    v_pk_mul_f16 v0, v0, v2
716 ; GFX9-NEXT:    v_pk_mul_f16 v1, v1, v3
717 ; GFX9-NEXT:    v_pk_add_f16 v0, v0, v4
718 ; GFX9-NEXT:    v_pk_add_f16 v1, v1, v5
719 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
721 ; GFX9-CONTRACT-LABEL: test_4xhalf_add_mul:
722 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
723 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
724 ; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
725 ; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
726 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
728 ; GFX9-DENORM-LABEL: test_4xhalf_add_mul:
729 ; GFX9-DENORM:       ; %bb.0: ; %.entry
730 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
731 ; GFX9-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2
732 ; GFX9-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3
733 ; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4
734 ; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5
735 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
737 ; GFX9-UNSAFE-LABEL: test_4xhalf_add_mul:
738 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
739 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
740 ; GFX9-UNSAFE-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
741 ; GFX9-UNSAFE-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
742 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
744 ; GFX10-LABEL: test_4xhalf_add_mul:
745 ; GFX10:       ; %bb.0: ; %.entry
746 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
747 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
748 ; GFX10-NEXT:    v_pk_mul_f16 v0, v0, v2
749 ; GFX10-NEXT:    v_pk_mul_f16 v1, v1, v3
750 ; GFX10-NEXT:    v_pk_add_f16 v0, v0, v4
751 ; GFX10-NEXT:    v_pk_add_f16 v1, v1, v5
752 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
754 ; GFX10-CONTRACT-LABEL: test_4xhalf_add_mul:
755 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
756 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
757 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
758 ; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
759 ; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
760 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
762 ; GFX10-DENORM-LABEL: test_4xhalf_add_mul:
763 ; GFX10-DENORM:       ; %bb.0: ; %.entry
764 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
765 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
766 ; GFX10-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2
767 ; GFX10-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3
768 ; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4
769 ; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5
770 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
772 ; GFX10-UNSAFE-LABEL: test_4xhalf_add_mul:
773 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
774 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
775 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
776 ; GFX10-UNSAFE-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
777 ; GFX10-UNSAFE-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
778 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
779 .entry:
780   %a = fmul <4 x half> %x, %y
781   %b = fadd <4 x half> %a, %z
782   ret <4 x half> %b
785 define <3 x half> @test_3xhalf_add_mul_rhs(<3 x half> %x, <3 x half> %y, <3 x half> %z) {
786 ; GFX9-LABEL: test_3xhalf_add_mul_rhs:
787 ; GFX9:       ; %bb.0: ; %.entry
788 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
789 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
790 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
791 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0xffff
792 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
793 ; GFX9-NEXT:    v_and_or_b32 v0, v0, v9, v6
794 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
795 ; GFX9-NEXT:    v_and_or_b32 v2, v2, v9, v6
796 ; GFX9-NEXT:    s_lshl_b32 s4, s4, 16
797 ; GFX9-NEXT:    v_pk_mul_f16 v0, v0, v2
798 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
799 ; GFX9-NEXT:    v_and_or_b32 v1, v1, v9, s4
800 ; GFX9-NEXT:    v_and_or_b32 v3, v3, v9, s4
801 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
802 ; GFX9-NEXT:    v_pk_mul_f16 v1, v1, v3
803 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v8
804 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
805 ; GFX9-NEXT:    v_and_or_b32 v3, v4, v9, v3
806 ; GFX9-NEXT:    v_and_or_b32 v0, v0, v9, v2
807 ; GFX9-NEXT:    v_pk_add_f16 v0, v3, v0
808 ; GFX9-NEXT:    v_and_or_b32 v4, v5, v9, s4
809 ; GFX9-NEXT:    v_and_or_b32 v1, v1, v9, s4
810 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
811 ; GFX9-NEXT:    v_pk_add_f16 v1, v4, v1
812 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
813 ; GFX9-NEXT:    v_and_or_b32 v0, v0, v9, v2
814 ; GFX9-NEXT:    v_and_or_b32 v1, v1, v9, s4
815 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
817 ; GFX9-CONTRACT-LABEL: test_3xhalf_add_mul_rhs:
818 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
819 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
820 ; GFX9-CONTRACT-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
821 ; GFX9-CONTRACT-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
822 ; GFX9-CONTRACT-NEXT:    v_mov_b32_e32 v9, 0xffff
823 ; GFX9-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
824 ; GFX9-CONTRACT-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
825 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v0, v0, v9, v6
826 ; GFX9-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
827 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v2, v2, v9, v6
828 ; GFX9-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 16, v8
829 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v4, v4, v9, v6
830 ; GFX9-CONTRACT-NEXT:    s_lshl_b32 s4, s4, 16
831 ; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
832 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v1, v1, v9, s4
833 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v3, v3, v9, s4
834 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v5, v5, v9, s4
835 ; GFX9-CONTRACT-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
836 ; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
837 ; GFX9-CONTRACT-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
838 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v0, v0, v9, v2
839 ; GFX9-CONTRACT-NEXT:    v_and_or_b32 v1, v1, v9, s4
840 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
842 ; GFX9-DENORM-LABEL: test_3xhalf_add_mul_rhs:
843 ; GFX9-DENORM:       ; %bb.0: ; %.entry
844 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
845 ; GFX9-DENORM-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
846 ; GFX9-DENORM-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
847 ; GFX9-DENORM-NEXT:    v_mov_b32_e32 v9, 0xffff
848 ; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
849 ; GFX9-DENORM-NEXT:    v_and_or_b32 v0, v0, v9, v6
850 ; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
851 ; GFX9-DENORM-NEXT:    v_and_or_b32 v2, v2, v9, v6
852 ; GFX9-DENORM-NEXT:    s_lshl_b32 s4, s4, 16
853 ; GFX9-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2
854 ; GFX9-DENORM-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
855 ; GFX9-DENORM-NEXT:    v_and_or_b32 v1, v1, v9, s4
856 ; GFX9-DENORM-NEXT:    v_and_or_b32 v3, v3, v9, s4
857 ; GFX9-DENORM-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
858 ; GFX9-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3
859 ; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v3, 16, v8
860 ; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
861 ; GFX9-DENORM-NEXT:    v_and_or_b32 v3, v4, v9, v3
862 ; GFX9-DENORM-NEXT:    v_and_or_b32 v0, v0, v9, v2
863 ; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v3, v0
864 ; GFX9-DENORM-NEXT:    v_and_or_b32 v4, v5, v9, s4
865 ; GFX9-DENORM-NEXT:    v_and_or_b32 v1, v1, v9, s4
866 ; GFX9-DENORM-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
867 ; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v4, v1
868 ; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
869 ; GFX9-DENORM-NEXT:    v_and_or_b32 v0, v0, v9, v2
870 ; GFX9-DENORM-NEXT:    v_and_or_b32 v1, v1, v9, s4
871 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
873 ; GFX9-UNSAFE-LABEL: test_3xhalf_add_mul_rhs:
874 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
875 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
876 ; GFX9-UNSAFE-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
877 ; GFX9-UNSAFE-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
878 ; GFX9-UNSAFE-NEXT:    v_mov_b32_e32 v9, 0xffff
879 ; GFX9-UNSAFE-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
880 ; GFX9-UNSAFE-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
881 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v0, v0, v9, v6
882 ; GFX9-UNSAFE-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
883 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v2, v2, v9, v6
884 ; GFX9-UNSAFE-NEXT:    v_lshlrev_b32_e32 v6, 16, v8
885 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v4, v4, v9, v6
886 ; GFX9-UNSAFE-NEXT:    s_lshl_b32 s4, s4, 16
887 ; GFX9-UNSAFE-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
888 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v1, v1, v9, s4
889 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v3, v3, v9, s4
890 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v5, v5, v9, s4
891 ; GFX9-UNSAFE-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
892 ; GFX9-UNSAFE-NEXT:    v_pk_fma_f16 v1, v1, v3, v5
893 ; GFX9-UNSAFE-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
894 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v0, v0, v9, v2
895 ; GFX9-UNSAFE-NEXT:    v_and_or_b32 v1, v1, v9, s4
896 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
898 ; GFX10-LABEL: test_3xhalf_add_mul_rhs:
899 ; GFX10:       ; %bb.0: ; %.entry
900 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
901 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
902 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
903 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
904 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0xffff
905 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 16
906 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
907 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
908 ; GFX10-NEXT:    v_and_or_b32 v1, v1, v8, s4
909 ; GFX10-NEXT:    v_and_or_b32 v3, v3, v8, s4
910 ; GFX10-NEXT:    v_and_or_b32 v0, v0, v8, v6
911 ; GFX10-NEXT:    v_and_or_b32 v2, v2, v8, v7
912 ; GFX10-NEXT:    v_pk_mul_f16 v1, v1, v3
913 ; GFX10-NEXT:    v_pk_mul_f16 v0, v0, v2
914 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v4
915 ; GFX10-NEXT:    v_and_or_b32 v1, v1, v8, s4
916 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
917 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
918 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
919 ; GFX10-NEXT:    v_and_or_b32 v2, v4, v8, v2
920 ; GFX10-NEXT:    v_and_or_b32 v0, v0, v8, v6
921 ; GFX10-NEXT:    v_pk_add_f16 v0, v2, v0
922 ; GFX10-NEXT:    v_and_or_b32 v2, v5, v8, s4
923 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
924 ; GFX10-NEXT:    v_pk_add_f16 v1, v2, v1
925 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
926 ; GFX10-NEXT:    v_and_or_b32 v1, v1, v8, s4
927 ; GFX10-NEXT:    v_and_or_b32 v0, v0, v8, v3
928 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
930 ; GFX10-CONTRACT-LABEL: test_3xhalf_add_mul_rhs:
931 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
932 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
933 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
934 ; GFX10-CONTRACT-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
935 ; GFX10-CONTRACT-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
936 ; GFX10-CONTRACT-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
937 ; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v9, 0xffff
938 ; GFX10-CONTRACT-NEXT:    s_lshl_b32 s4, s4, 16
939 ; GFX10-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
940 ; GFX10-CONTRACT-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
941 ; GFX10-CONTRACT-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
942 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v1, v1, v9, s4
943 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v0, v0, v9, v6
944 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v2, v2, v9, v7
945 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v4, v4, v9, v8
946 ; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
947 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v2, v3, v9, s4
948 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v4, v5, v9, s4
949 ; GFX10-CONTRACT-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
950 ; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v2, v4
951 ; GFX10-CONTRACT-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
952 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v1, v1, v9, s4
953 ; GFX10-CONTRACT-NEXT:    v_and_or_b32 v0, v0, v9, v3
954 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
956 ; GFX10-DENORM-LABEL: test_3xhalf_add_mul_rhs:
957 ; GFX10-DENORM:       ; %bb.0: ; %.entry
958 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
959 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
960 ; GFX10-DENORM-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
961 ; GFX10-DENORM-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
962 ; GFX10-DENORM-NEXT:    v_mov_b32_e32 v8, 0xffff
963 ; GFX10-DENORM-NEXT:    s_lshl_b32 s4, s4, 16
964 ; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
965 ; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
966 ; GFX10-DENORM-NEXT:    v_and_or_b32 v1, v1, v8, s4
967 ; GFX10-DENORM-NEXT:    v_and_or_b32 v3, v3, v8, s4
968 ; GFX10-DENORM-NEXT:    v_and_or_b32 v0, v0, v8, v6
969 ; GFX10-DENORM-NEXT:    v_and_or_b32 v2, v2, v8, v7
970 ; GFX10-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3
971 ; GFX10-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2
972 ; GFX10-DENORM-NEXT:    v_lshrrev_b32_e32 v2, 16, v4
973 ; GFX10-DENORM-NEXT:    v_and_or_b32 v1, v1, v8, s4
974 ; GFX10-DENORM-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
975 ; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
976 ; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
977 ; GFX10-DENORM-NEXT:    v_and_or_b32 v2, v4, v8, v2
978 ; GFX10-DENORM-NEXT:    v_and_or_b32 v0, v0, v8, v6
979 ; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v2, v0
980 ; GFX10-DENORM-NEXT:    v_and_or_b32 v2, v5, v8, s4
981 ; GFX10-DENORM-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
982 ; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v2, v1
983 ; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
984 ; GFX10-DENORM-NEXT:    v_and_or_b32 v1, v1, v8, s4
985 ; GFX10-DENORM-NEXT:    v_and_or_b32 v0, v0, v8, v3
986 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
988 ; GFX10-UNSAFE-LABEL: test_3xhalf_add_mul_rhs:
989 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
990 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
991 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
992 ; GFX10-UNSAFE-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
993 ; GFX10-UNSAFE-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
994 ; GFX10-UNSAFE-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
995 ; GFX10-UNSAFE-NEXT:    v_mov_b32_e32 v9, 0xffff
996 ; GFX10-UNSAFE-NEXT:    s_lshl_b32 s4, s4, 16
997 ; GFX10-UNSAFE-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
998 ; GFX10-UNSAFE-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
999 ; GFX10-UNSAFE-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
1000 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v1, v1, v9, s4
1001 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v0, v0, v9, v6
1002 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v2, v2, v9, v7
1003 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v4, v4, v9, v8
1004 ; GFX10-UNSAFE-NEXT:    v_pk_fma_f16 v0, v0, v2, v4
1005 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v2, v3, v9, s4
1006 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v4, v5, v9, s4
1007 ; GFX10-UNSAFE-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
1008 ; GFX10-UNSAFE-NEXT:    v_pk_fma_f16 v1, v1, v2, v4
1009 ; GFX10-UNSAFE-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
1010 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v1, v1, v9, s4
1011 ; GFX10-UNSAFE-NEXT:    v_and_or_b32 v0, v0, v9, v3
1012 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
1013 .entry:
1014   %a = fmul <3 x half> %x, %y
1015   %b = fadd <3 x half> %z, %a
1016   ret <3 x half> %b
1019 define <4 x double> @test_4xdouble_add_mul(<4 x double> %x, <4 x double> %y, <4 x double> %z) {
1020 ; GFX9-LABEL: test_4xdouble_add_mul:
1021 ; GFX9:       ; %bb.0: ; %.entry
1022 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1023 ; GFX9-NEXT:    v_mul_f64 v[0:1], v[0:1], v[8:9]
1024 ; GFX9-NEXT:    v_mul_f64 v[2:3], v[2:3], v[10:11]
1025 ; GFX9-NEXT:    v_mul_f64 v[4:5], v[4:5], v[12:13]
1026 ; GFX9-NEXT:    v_mul_f64 v[6:7], v[6:7], v[14:15]
1027 ; GFX9-NEXT:    v_add_f64 v[0:1], v[0:1], v[16:17]
1028 ; GFX9-NEXT:    v_add_f64 v[2:3], v[2:3], v[18:19]
1029 ; GFX9-NEXT:    v_add_f64 v[4:5], v[4:5], v[20:21]
1030 ; GFX9-NEXT:    v_add_f64 v[6:7], v[6:7], v[22:23]
1031 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1033 ; GFX9-CONTRACT-LABEL: test_4xdouble_add_mul:
1034 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
1035 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1036 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]
1037 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]
1038 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]
1039 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]
1040 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
1042 ; GFX9-DENORM-LABEL: test_4xdouble_add_mul:
1043 ; GFX9-DENORM:       ; %bb.0: ; %.entry
1044 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1045 ; GFX9-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[8:9]
1046 ; GFX9-DENORM-NEXT:    v_mul_f64 v[2:3], v[2:3], v[10:11]
1047 ; GFX9-DENORM-NEXT:    v_mul_f64 v[4:5], v[4:5], v[12:13]
1048 ; GFX9-DENORM-NEXT:    v_mul_f64 v[6:7], v[6:7], v[14:15]
1049 ; GFX9-DENORM-NEXT:    v_add_f64 v[0:1], v[0:1], v[16:17]
1050 ; GFX9-DENORM-NEXT:    v_add_f64 v[2:3], v[2:3], v[18:19]
1051 ; GFX9-DENORM-NEXT:    v_add_f64 v[4:5], v[4:5], v[20:21]
1052 ; GFX9-DENORM-NEXT:    v_add_f64 v[6:7], v[6:7], v[22:23]
1053 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
1055 ; GFX9-UNSAFE-LABEL: test_4xdouble_add_mul:
1056 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
1057 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1058 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]
1059 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]
1060 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]
1061 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]
1062 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
1064 ; GFX10-LABEL: test_4xdouble_add_mul:
1065 ; GFX10:       ; %bb.0: ; %.entry
1066 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1067 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1068 ; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[8:9]
1069 ; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[10:11]
1070 ; GFX10-NEXT:    v_mul_f64 v[4:5], v[4:5], v[12:13]
1071 ; GFX10-NEXT:    v_mul_f64 v[6:7], v[6:7], v[14:15]
1072 ; GFX10-NEXT:    v_add_f64 v[0:1], v[0:1], v[16:17]
1073 ; GFX10-NEXT:    v_add_f64 v[2:3], v[2:3], v[18:19]
1074 ; GFX10-NEXT:    v_add_f64 v[4:5], v[4:5], v[20:21]
1075 ; GFX10-NEXT:    v_add_f64 v[6:7], v[6:7], v[22:23]
1076 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1078 ; GFX10-CONTRACT-LABEL: test_4xdouble_add_mul:
1079 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
1080 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1081 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
1082 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]
1083 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]
1084 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]
1085 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]
1086 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
1088 ; GFX10-DENORM-LABEL: test_4xdouble_add_mul:
1089 ; GFX10-DENORM:       ; %bb.0: ; %.entry
1090 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1091 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
1092 ; GFX10-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[8:9]
1093 ; GFX10-DENORM-NEXT:    v_mul_f64 v[2:3], v[2:3], v[10:11]
1094 ; GFX10-DENORM-NEXT:    v_mul_f64 v[4:5], v[4:5], v[12:13]
1095 ; GFX10-DENORM-NEXT:    v_mul_f64 v[6:7], v[6:7], v[14:15]
1096 ; GFX10-DENORM-NEXT:    v_add_f64 v[0:1], v[0:1], v[16:17]
1097 ; GFX10-DENORM-NEXT:    v_add_f64 v[2:3], v[2:3], v[18:19]
1098 ; GFX10-DENORM-NEXT:    v_add_f64 v[4:5], v[4:5], v[20:21]
1099 ; GFX10-DENORM-NEXT:    v_add_f64 v[6:7], v[6:7], v[22:23]
1100 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
1102 ; GFX10-UNSAFE-LABEL: test_4xdouble_add_mul:
1103 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
1104 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1105 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
1106 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]
1107 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]
1108 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]
1109 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]
1110 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
1111 .entry:
1112   %a = fmul <4 x double> %x, %y
1113   %b = fadd <4 x double> %a, %z
1114   ret <4 x double> %b
1117 define <3 x double> @test_3xdouble_add_mul_rhs(<3 x double> %x, <3 x double> %y, <3 x double> %z) {
1118 ; GFX9-LABEL: test_3xdouble_add_mul_rhs:
1119 ; GFX9:       ; %bb.0: ; %.entry
1120 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1121 ; GFX9-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]
1122 ; GFX9-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]
1123 ; GFX9-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]
1124 ; GFX9-NEXT:    v_add_f64 v[0:1], v[12:13], v[0:1]
1125 ; GFX9-NEXT:    v_add_f64 v[2:3], v[14:15], v[2:3]
1126 ; GFX9-NEXT:    v_add_f64 v[4:5], v[16:17], v[4:5]
1127 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1129 ; GFX9-CONTRACT-LABEL: test_3xdouble_add_mul_rhs:
1130 ; GFX9-CONTRACT:       ; %bb.0: ; %.entry
1131 ; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1132 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[6:7], v[12:13]
1133 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[8:9], v[14:15]
1134 ; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[10:11], v[16:17]
1135 ; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
1137 ; GFX9-DENORM-LABEL: test_3xdouble_add_mul_rhs:
1138 ; GFX9-DENORM:       ; %bb.0: ; %.entry
1139 ; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1140 ; GFX9-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]
1141 ; GFX9-DENORM-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]
1142 ; GFX9-DENORM-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]
1143 ; GFX9-DENORM-NEXT:    v_add_f64 v[0:1], v[12:13], v[0:1]
1144 ; GFX9-DENORM-NEXT:    v_add_f64 v[2:3], v[14:15], v[2:3]
1145 ; GFX9-DENORM-NEXT:    v_add_f64 v[4:5], v[16:17], v[4:5]
1146 ; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]
1148 ; GFX9-UNSAFE-LABEL: test_3xdouble_add_mul_rhs:
1149 ; GFX9-UNSAFE:       ; %bb.0: ; %.entry
1150 ; GFX9-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1151 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[6:7], v[12:13]
1152 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[2:3], v[2:3], v[8:9], v[14:15]
1153 ; GFX9-UNSAFE-NEXT:    v_fma_f64 v[4:5], v[4:5], v[10:11], v[16:17]
1154 ; GFX9-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
1156 ; GFX10-LABEL: test_3xdouble_add_mul_rhs:
1157 ; GFX10:       ; %bb.0: ; %.entry
1158 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1159 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1160 ; GFX10-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]
1161 ; GFX10-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]
1162 ; GFX10-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]
1163 ; GFX10-NEXT:    v_add_f64 v[0:1], v[12:13], v[0:1]
1164 ; GFX10-NEXT:    v_add_f64 v[2:3], v[14:15], v[2:3]
1165 ; GFX10-NEXT:    v_add_f64 v[4:5], v[16:17], v[4:5]
1166 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1168 ; GFX10-CONTRACT-LABEL: test_3xdouble_add_mul_rhs:
1169 ; GFX10-CONTRACT:       ; %bb.0: ; %.entry
1170 ; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1171 ; GFX10-CONTRACT-NEXT:    s_waitcnt_vscnt null, 0x0
1172 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[6:7], v[12:13]
1173 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[8:9], v[14:15]
1174 ; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[10:11], v[16:17]
1175 ; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]
1177 ; GFX10-DENORM-LABEL: test_3xdouble_add_mul_rhs:
1178 ; GFX10-DENORM:       ; %bb.0: ; %.entry
1179 ; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1180 ; GFX10-DENORM-NEXT:    s_waitcnt_vscnt null, 0x0
1181 ; GFX10-DENORM-NEXT:    v_mul_f64 v[0:1], v[0:1], v[6:7]
1182 ; GFX10-DENORM-NEXT:    v_mul_f64 v[2:3], v[2:3], v[8:9]
1183 ; GFX10-DENORM-NEXT:    v_mul_f64 v[4:5], v[4:5], v[10:11]
1184 ; GFX10-DENORM-NEXT:    v_add_f64 v[0:1], v[12:13], v[0:1]
1185 ; GFX10-DENORM-NEXT:    v_add_f64 v[2:3], v[14:15], v[2:3]
1186 ; GFX10-DENORM-NEXT:    v_add_f64 v[4:5], v[16:17], v[4:5]
1187 ; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]
1189 ; GFX10-UNSAFE-LABEL: test_3xdouble_add_mul_rhs:
1190 ; GFX10-UNSAFE:       ; %bb.0: ; %.entry
1191 ; GFX10-UNSAFE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1192 ; GFX10-UNSAFE-NEXT:    s_waitcnt_vscnt null, 0x0
1193 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[0:1], v[0:1], v[6:7], v[12:13]
1194 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[2:3], v[2:3], v[8:9], v[14:15]
1195 ; GFX10-UNSAFE-NEXT:    v_fma_f64 v[4:5], v[4:5], v[10:11], v[16:17]
1196 ; GFX10-UNSAFE-NEXT:    s_setpc_b64 s[30:31]
1197 .entry:
1198   %a = fmul <3 x double> %x, %y
1199   %b = fadd <3 x double> %z, %a
1200   ret <3 x double> %b