1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s
3 attributes #0 = { strictfp }
5 declare float @llvm.fma.f32(float, float, float)
6 declare double @llvm.fma.f64(double, double, double)
7 declare float @llvm.experimental.constrained.fma.f32(float, float, float, metadata, metadata)
8 declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)
10 define float @test_fmla_ss4S_0(float %a, float %b, <4 x float> %v) {
11 ; CHECK-LABEL: test_fmla_ss4S_0
12 ; CHECK: fmadd s0, s1, s2, s0
13 %tmp1 = extractelement <4 x float> %v, i32 0
14 %tmp2 = call float @llvm.fma.f32(float %b, float %tmp1, float %a)
18 define float @test_fmla_ss4S_0_swap(float %a, float %b, <4 x float> %v) {
19 ; CHECK-LABEL: test_fmla_ss4S_0_swap
20 ; CHECK: fmadd s0, s2, s1, s0
21 %tmp1 = extractelement <4 x float> %v, i32 0
22 %tmp2 = call float @llvm.fma.f32(float %tmp1, float %b, float %a)
26 define float @test_fmla_ss4S_3(float %a, float %b, <4 x float> %v) {
27 ; CHECK-LABEL: test_fmla_ss4S_3
28 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
29 %tmp1 = extractelement <4 x float> %v, i32 3
30 %tmp2 = call float @llvm.fma.f32(float %b, float %tmp1, float %a)
34 define float @test_fmla_ss4S_3_swap(float %a, float %b, <4 x float> %v) {
35 ; CHECK-LABEL: test_fmla_ss4S_3_swap
36 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
37 %tmp1 = extractelement <4 x float> %v, i32 3
38 %tmp2 = call float @llvm.fma.f32(float %tmp1, float %a, float %a)
42 define float @test_fmla_ss2S_0(float %a, float %b, <2 x float> %v) {
43 ; CHECK-LABEL: test_fmla_ss2S_0
44 ; CHECK: fmadd s0, s1, s2, s0
45 %tmp1 = extractelement <2 x float> %v, i32 0
46 %tmp2 = call float @llvm.fma.f32(float %b, float %tmp1, float %a)
50 define float @test_fmla_ss2S_0_swap(float %a, float %b, <2 x float> %v) {
51 ; CHECK-LABEL: test_fmla_ss2S_0_swap
52 ; CHECK: fmadd s0, s2, s1, s0
53 %tmp1 = extractelement <2 x float> %v, i32 0
54 %tmp2 = call float @llvm.fma.f32(float %tmp1, float %b, float %a)
58 define float @test_fmla_ss2S_1(float %a, float %b, <2 x float> %v) {
59 ; CHECK-LABEL: test_fmla_ss2S_1
60 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1]
61 %tmp1 = extractelement <2 x float> %v, i32 1
62 %tmp2 = call float @llvm.fma.f32(float %b, float %tmp1, float %a)
66 define double @test_fmla_ddD_0(double %a, double %b, <1 x double> %v) {
67 ; CHECK-LABEL: test_fmla_ddD_0
68 ; CHECK: fmadd d0, d1, d2, d0
69 %tmp1 = extractelement <1 x double> %v, i32 0
70 %tmp2 = call double @llvm.fma.f64(double %b, double %tmp1, double %a)
74 define double @test_fmla_ddD_0_swap(double %a, double %b, <1 x double> %v) {
75 ; CHECK-LABEL: test_fmla_ddD_0_swap
76 ; CHECK: fmadd d0, d2, d1, d0
77 %tmp1 = extractelement <1 x double> %v, i32 0
78 %tmp2 = call double @llvm.fma.f64(double %tmp1, double %b, double %a)
82 define double @test_fmla_dd2D_0(double %a, double %b, <2 x double> %v) {
83 ; CHECK-LABEL: test_fmla_dd2D_0
84 ; CHECK: fmadd d0, d1, d2, d0
85 %tmp1 = extractelement <2 x double> %v, i32 0
86 %tmp2 = call double @llvm.fma.f64(double %b, double %tmp1, double %a)
90 define double @test_fmla_dd2D_0_swap(double %a, double %b, <2 x double> %v) {
91 ; CHECK-LABEL: test_fmla_dd2D_0_swap
92 ; CHECK: fmadd d0, d2, d1, d0
93 %tmp1 = extractelement <2 x double> %v, i32 0
94 %tmp2 = call double @llvm.fma.f64(double %tmp1, double %b, double %a)
98 define double @test_fmla_dd2D_1(double %a, double %b, <2 x double> %v) {
99 ; CHECK-LABEL: test_fmla_dd2D_1
100 ; CHECK: fmla {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
101 %tmp1 = extractelement <2 x double> %v, i32 1
102 %tmp2 = call double @llvm.fma.f64(double %b, double %tmp1, double %a)
106 define double @test_fmla_dd2D_1_swap(double %a, double %b, <2 x double> %v) {
107 ; CHECK-LABEL: test_fmla_dd2D_1_swap
108 ; CHECK: fmla {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
109 %tmp1 = extractelement <2 x double> %v, i32 1
110 %tmp2 = call double @llvm.fma.f64(double %tmp1, double %b, double %a)
114 define float @test_fmls_ss4S_0(float %a, float %b, <4 x float> %v) {
115 ; CHECK-LABEL: test_fmls_ss4S_0
116 ; CHECK: fmsub s0, s2, s1, s0
118 %fneg = fneg float %b
119 %extract = extractelement <4 x float> %v, i64 0
120 %0 = tail call float @llvm.fma.f32(float %fneg, float %extract, float %a)
124 define float @test_fmls_ss4S_0_swap(float %a, float %b, <4 x float> %v) {
125 ; CHECK-LABEL: test_fmls_ss4S_0_swap
126 ; CHECK: fmsub s0, s2, s1, s0
128 %fneg = fneg float %b
129 %extract = extractelement <4 x float> %v, i64 0
130 %0 = tail call float @llvm.fma.f32(float %extract, float %fneg, float %a)
134 define float @test_fmls_ss4S_3(float %a, float %b, <4 x float> %v) {
135 ; CHECK-LABEL: test_fmls_ss4S_3
136 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
137 %tmp1 = extractelement <4 x float> %v, i32 3
138 %tmp2 = fsub float -0.0, %tmp1
139 %tmp3 = call float @llvm.fma.f32(float %tmp2, float %tmp1, float %a)
143 define float @test_fmls_ss4S_3_swap(float %a, float %b, <4 x float> %v) {
144 ; CHECK-LABEL: test_fmls_ss4S_3_swap
145 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
146 %tmp1 = extractelement <4 x float> %v, i32 3
147 %tmp2 = fsub float -0.0, %tmp1
148 %tmp3 = call float @llvm.fma.f32(float %tmp1, float %tmp2, float %a)
153 define float @test_fmls_ss2S_0(float %a, float %b, <2 x float> %v) {
154 ; CHECK-LABEL: test_fmls_ss2S_0
155 ; CHECK: fmsub s0, s2, s1, s0
157 %fneg = fneg float %b
158 %extract = extractelement <2 x float> %v, i64 0
159 %0 = tail call float @llvm.fma.f32(float %fneg, float %extract, float %a)
163 define float @test_fmls_ss2S_0_swap(float %a, float %b, <2 x float> %v) {
164 ; CHECK-LABEL: test_fmls_ss2S_0_swap
165 ; CHECK: fmsub s0, s2, s1, s0
167 %fneg = fneg float %b
168 %extract = extractelement <2 x float> %v, i64 0
169 %0 = tail call float @llvm.fma.f32(float %extract, float %fneg, float %a)
173 define float @test_fmls_ss2S_1(float %a, float %b, <2 x float> %v) {
174 ; CHECK-LABEL: test_fmls_ss2S_1
175 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1]
176 %tmp1 = extractelement <2 x float> %v, i32 1
177 %tmp2 = fsub float -0.0, %tmp1
178 %tmp3 = call float @llvm.fma.f32(float %tmp2, float %tmp1, float %a)
182 define double @test_fmls_ddD_0(double %a, double %b, <1 x double> %v) {
183 ; CHECK-LABEL: test_fmls_ddD_0
184 ; CHECK: fmsub d0, d1, d2, d0
186 %fneg = fneg double %b
187 %extract = extractelement <1 x double> %v, i64 0
188 %0 = tail call double @llvm.fma.f64(double %fneg, double %extract, double %a)
192 define double @test_fmls_ddD_0_swap(double %a, double %b, <1 x double> %v) {
193 ; CHECK-LABEL: test_fmls_ddD_0_swap
194 ; CHECK: fmsub d0, d2, d1, d0
196 %fneg = fneg double %b
197 %extract = extractelement <1 x double> %v, i64 0
198 %0 = tail call double @llvm.fma.f64(double %extract, double %fneg, double %a)
202 define double @test_fmls_dd2D_0(double %a, double %b, <2 x double> %v) {
203 ; CHECK-LABEL: test_fmls_dd2D_0
204 ; CHECK: fmsub d0, d2, d1, d0
206 %fneg = fneg double %b
207 %extract = extractelement <2 x double> %v, i64 0
208 %0 = tail call double @llvm.fma.f64(double %fneg, double %extract, double %a)
212 define double @test_fmls_dd2D_0_swap(double %a, double %b, <2 x double> %v) {
213 ; CHECK-LABEL: test_fmls_dd2D_0_swap
214 ; CHECK: fmsub d0, d2, d1, d0
216 %fneg = fneg double %b
217 %extract = extractelement <2 x double> %v, i64 0
218 %0 = tail call double @llvm.fma.f64(double %extract, double %fneg, double %a)
222 define double @test_fmls_dd2D_1(double %a, double %b, <2 x double> %v) {
223 ; CHECK-LABEL: test_fmls_dd2D_1
224 ; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
225 %tmp1 = extractelement <2 x double> %v, i32 1
226 %tmp2 = fsub double -0.0, %tmp1
227 %tmp3 = call double @llvm.fma.f64(double %tmp2, double %tmp1, double %a)
231 define double @test_fmls_dd2D_1_swap(double %a, double %b, <2 x double> %v) {
232 ; CHECK-LABEL: test_fmls_dd2D_1_swap
233 ; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
234 %tmp1 = extractelement <2 x double> %v, i32 1
235 %tmp2 = fsub double -0.0, %tmp1
236 %tmp3 = call double @llvm.fma.f64(double %tmp1, double %tmp2, double %a)
240 define float @test_fmla_ss4S_0_strict(float %a, float %b, <4 x float> %v) #0 {
241 ; CHECK-LABEL: test_fmla_ss4S_0_strict
242 ; CHECK: fmadd s0, s1, s2, s0
243 %tmp1 = extractelement <4 x float> %v, i32 0
244 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %b, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
248 define float @test_fmla_ss4S_0_swap_strict(float %a, float %b, <4 x float> %v) #0 {
249 ; CHECK-LABEL: test_fmla_ss4S_0_swap_strict
250 ; CHECK: fmadd s0, s2, s1, s0
251 %tmp1 = extractelement <4 x float> %v, i32 0
252 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %tmp1, float %b, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
256 define float @test_fmla_ss4S_3_strict(float %a, float %b, <4 x float> %v) #0 {
257 ; CHECK-LABEL: test_fmla_ss4S_3_strict
258 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
259 %tmp1 = extractelement <4 x float> %v, i32 3
260 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %b, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
264 define float @test_fmla_ss4S_3_swap_strict(float %a, float %b, <4 x float> %v) #0 {
265 ; CHECK-LABEL: test_fmla_ss4S_3_swap_strict
266 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
267 %tmp1 = extractelement <4 x float> %v, i32 3
268 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %tmp1, float %a, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
272 define float @test_fmla_ss2S_0_strict(float %a, float %b, <2 x float> %v) #0 {
273 ; CHECK-LABEL: test_fmla_ss2S_0_strict
274 ; CHECK: fmadd s0, s1, s2, s0
275 %tmp1 = extractelement <2 x float> %v, i32 0
276 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %b, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
280 define float @test_fmla_ss2S_0_swap_strict(float %a, float %b, <2 x float> %v) #0 {
281 ; CHECK-LABEL: test_fmla_ss2S_0_swap_strict
282 ; CHECK: fmadd s0, s2, s1, s0
283 %tmp1 = extractelement <2 x float> %v, i32 0
284 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %tmp1, float %b, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
288 define float @test_fmla_ss2S_1_strict(float %a, float %b, <2 x float> %v) #0 {
289 ; CHECK-LABEL: test_fmla_ss2S_1_strict
290 ; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1]
291 %tmp1 = extractelement <2 x float> %v, i32 1
292 %tmp2 = call float @llvm.experimental.constrained.fma.f32(float %b, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
296 define double @test_fmla_ddD_0_strict(double %a, double %b, <1 x double> %v) #0 {
297 ; CHECK-LABEL: test_fmla_ddD_0_strict
298 ; CHECK: fmadd d0, d1, d2, d0
299 %tmp1 = extractelement <1 x double> %v, i32 0
300 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %b, double %tmp1, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
304 define double @test_fmla_ddD_0_swap_strict(double %a, double %b, <1 x double> %v) #0 {
305 ; CHECK-LABEL: test_fmla_ddD_0_swap_strict
306 ; CHECK: fmadd d0, d2, d1, d0
307 %tmp1 = extractelement <1 x double> %v, i32 0
308 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %tmp1, double %b, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
312 define double @test_fmla_dd2D_0_strict(double %a, double %b, <2 x double> %v) #0 {
313 ; CHECK-LABEL: test_fmla_dd2D_0_strict
314 ; CHECK: fmadd d0, d1, d2, d0
315 %tmp1 = extractelement <2 x double> %v, i32 0
316 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %b, double %tmp1, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
320 define double @test_fmla_dd2D_0_swap_strict(double %a, double %b, <2 x double> %v) #0 {
321 ; CHECK-LABEL: test_fmla_dd2D_0_swap_strict
322 ; CHECK: fmadd d0, d2, d1, d0
323 %tmp1 = extractelement <2 x double> %v, i32 0
324 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %tmp1, double %b, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
328 define double @test_fmla_dd2D_1_strict(double %a, double %b, <2 x double> %v) #0 {
329 ; CHECK-LABEL: test_fmla_dd2D_1_strict
330 ; CHECK: fmla {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
331 %tmp1 = extractelement <2 x double> %v, i32 1
332 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %b, double %tmp1, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
336 define double @test_fmla_dd2D_1_swap_strict(double %a, double %b, <2 x double> %v) #0 {
337 ; CHECK-LABEL: test_fmla_dd2D_1_swap_strict
338 ; CHECK: fmla {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
339 %tmp1 = extractelement <2 x double> %v, i32 1
340 %tmp2 = call double @llvm.experimental.constrained.fma.f64(double %tmp1, double %b, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
344 define float @test_fmls_ss4S_0_strict(float %a, float %b, <4 x float> %v) #0 {
345 ; CHECK-LABEL: test_fmls_ss4S_0_strict
346 ; CHECK: fmsub s0, s2, s1, s0
348 %fneg = fneg float %b
349 %extract = extractelement <4 x float> %v, i64 0
350 %0 = tail call float @llvm.experimental.constrained.fma.f32(float %fneg, float %extract, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
354 define float @test_fmls_ss4S_0_swap_strict(float %a, float %b, <4 x float> %v) #0 {
355 ; CHECK-LABEL: test_fmls_ss4S_0_swap_strict
356 ; CHECK: fmsub s0, s2, s1, s0
358 %fneg = fneg float %b
359 %extract = extractelement <4 x float> %v, i64 0
360 %0 = tail call float @llvm.experimental.constrained.fma.f32(float %extract, float %fneg, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
364 define float @test_fmls_ss4S_3_strict(float %a, float %b, <4 x float> %v) #0 {
365 ; CHECK-LABEL: test_fmls_ss4S_3_strict
366 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
367 %tmp1 = extractelement <4 x float> %v, i32 3
368 %tmp2 = fneg float %tmp1
369 %tmp3 = call float @llvm.experimental.constrained.fma.f32(float %tmp2, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
373 define float @test_fmls_ss4S_3_swap_strict(float %a, float %b, <4 x float> %v) #0 {
374 ; CHECK-LABEL: test_fmls_ss4S_3_swap_strict
375 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3]
376 %tmp1 = extractelement <4 x float> %v, i32 3
377 %tmp2 = fneg float %tmp1
378 %tmp3 = call float @llvm.experimental.constrained.fma.f32(float %tmp1, float %tmp2, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
382 define float @test_fmls_ss2S_0_strict(float %a, float %b, <2 x float> %v) #0 {
383 ; CHECK-LABEL: test_fmls_ss2S_0_strict
384 ; CHECK: fmsub s0, s2, s1, s0
386 %fneg = fneg float %b
387 %extract = extractelement <2 x float> %v, i64 0
388 %0 = tail call float @llvm.experimental.constrained.fma.f32(float %fneg, float %extract, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
392 define float @test_fmls_ss2S_0_swap_strict(float %a, float %b, <2 x float> %v) #0 {
393 ; CHECK-LABEL: test_fmls_ss2S_0_swap_strict
394 ; CHECK: fmsub s0, s2, s1, s0
396 %fneg = fneg float %b
397 %extract = extractelement <2 x float> %v, i64 0
398 %0 = tail call float @llvm.experimental.constrained.fma.f32(float %extract, float %fneg, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
402 define float @test_fmls_ss2S_1_strict(float %a, float %b, <2 x float> %v) #0 {
403 ; CHECK-LABEL: test_fmls_ss2S_1_strict
404 ; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1]
405 %tmp1 = extractelement <2 x float> %v, i32 1
406 %tmp2 = fneg float %tmp1
407 %tmp3 = call float @llvm.experimental.constrained.fma.f32(float %tmp2, float %tmp1, float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
411 define double @test_fmls_ddD_0_strict(double %a, double %b, <1 x double> %v) #0 {
412 ; CHECK-LABEL: test_fmls_ddD_0_strict
413 ; CHECK: fmsub d0, d2, d1, d0
415 %fneg = fneg double %b
416 %extract = extractelement <1 x double> %v, i64 0
417 %0 = tail call double @llvm.experimental.constrained.fma.f64(double %fneg, double %extract, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
421 define double @test_fmls_ddD_0_swap_strict(double %a, double %b, <1 x double> %v) #0 {
422 ; CHECK-LABEL: test_fmls_ddD_0_swap_strict
423 ; CHECK: fmsub d0, d2, d1, d0
425 %fneg = fneg double %b
426 %extract = extractelement <1 x double> %v, i64 0
427 %0 = tail call double @llvm.experimental.constrained.fma.f64(double %extract, double %fneg, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
431 define double @test_fmls_dd2D_0_strict(double %a, double %b, <2 x double> %v) #0 {
432 ; CHECK-LABEL: test_fmls_dd2D_0_strict
433 ; CHECK: fmsub d0, d2, d1, d0
435 %fneg = fneg double %b
436 %extract = extractelement <2 x double> %v, i64 0
437 %0 = tail call double @llvm.experimental.constrained.fma.f64(double %fneg, double %extract, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
441 define double @test_fmls_dd2D_0_swap_strict(double %a, double %b, <2 x double> %v) #0 {
442 ; CHECK-LABEL: test_fmls_dd2D_0_swap_strict
443 ; CHECK: fmsub d0, d2, d1, d0
445 %fneg = fneg double %b
446 %extract = extractelement <2 x double> %v, i64 0
447 %0 = tail call double @llvm.experimental.constrained.fma.f64(double %extract, double %fneg, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
451 define double @test_fmls_dd2D_1_strict(double %a, double %b, <2 x double> %v) #0 {
452 ; CHECK-LABEL: test_fmls_dd2D_1_strict
453 ; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
454 %tmp1 = extractelement <2 x double> %v, i32 1
455 %tmp2 = fneg double %tmp1
456 %tmp3 = call double @llvm.experimental.constrained.fma.f64(double %tmp2, double %tmp1, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
460 define double @test_fmls_dd2D_1_swap_strict(double %a, double %b, <2 x double> %v) #0 {
461 ; CHECK-LABEL: test_fmls_dd2D_1_swap_strict
462 ; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1]
463 %tmp1 = extractelement <2 x double> %v, i32 1
464 %tmp2 = fneg double %tmp1
465 %tmp3 = call double @llvm.experimental.constrained.fma.f64(double %tmp1, double %tmp2, double %a, metadata !"round.tonearest", metadata !"fpexcept.strict")