1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+neon,-use-reciprocal-square-root | FileCheck %s --check-prefix=FAULT
3 ; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+neon,+use-reciprocal-square-root | FileCheck %s
5 declare float @llvm.sqrt.f32(float) #0
6 declare <2 x float> @llvm.sqrt.v2f32(<2 x float>) #0
7 declare <4 x float> @llvm.sqrt.v4f32(<4 x float>) #0
8 declare <8 x float> @llvm.sqrt.v8f32(<8 x float>) #0
9 declare double @llvm.sqrt.f64(double) #0
10 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #0
11 declare <4 x double> @llvm.sqrt.v4f64(<4 x double>) #0
13 define float @fsqrt(float %a) #0 {
16 ; FAULT-NEXT: fsqrt s0, s0
21 ; CHECK-NEXT: frsqrte s1, s0
22 ; CHECK-NEXT: fmul s2, s1, s1
23 ; CHECK-NEXT: frsqrts s2, s0, s2
24 ; CHECK-NEXT: fmul s1, s1, s2
25 ; CHECK-NEXT: fmul s2, s1, s1
26 ; CHECK-NEXT: frsqrts s2, s0, s2
27 ; CHECK-NEXT: fmul s2, s2, s0
28 ; CHECK-NEXT: fmul s1, s1, s2
29 ; CHECK-NEXT: fcmp s0, #0.0
30 ; CHECK-NEXT: fcsel s0, s0, s1, eq
32 %1 = tail call fast float @llvm.sqrt.f32(float %a)
36 define float @fsqrt_ieee_denorms(float %a) #1 {
37 ; FAULT-LABEL: fsqrt_ieee_denorms:
39 ; FAULT-NEXT: fsqrt s0, s0
42 ; CHECK-LABEL: fsqrt_ieee_denorms:
44 ; CHECK-NEXT: frsqrte s1, s0
45 ; CHECK-NEXT: fmul s2, s1, s1
46 ; CHECK-NEXT: frsqrts s2, s0, s2
47 ; CHECK-NEXT: fmul s1, s1, s2
48 ; CHECK-NEXT: fmul s2, s1, s1
49 ; CHECK-NEXT: frsqrts s2, s0, s2
50 ; CHECK-NEXT: fmul s2, s2, s0
51 ; CHECK-NEXT: fmul s1, s1, s2
52 ; CHECK-NEXT: fcmp s0, #0.0
53 ; CHECK-NEXT: fcsel s0, s0, s1, eq
55 %1 = tail call fast float @llvm.sqrt.f32(float %a)
59 define <2 x float> @f2sqrt(<2 x float> %a) #0 {
60 ; FAULT-LABEL: f2sqrt:
62 ; FAULT-NEXT: fsqrt v0.2s, v0.2s
65 ; CHECK-LABEL: f2sqrt:
67 ; CHECK-NEXT: frsqrte v1.2s, v0.2s
68 ; CHECK-NEXT: fmul v2.2s, v1.2s, v1.2s
69 ; CHECK-NEXT: frsqrts v2.2s, v0.2s, v2.2s
70 ; CHECK-NEXT: fmul v1.2s, v1.2s, v2.2s
71 ; CHECK-NEXT: fmul v2.2s, v1.2s, v1.2s
72 ; CHECK-NEXT: frsqrts v2.2s, v0.2s, v2.2s
73 ; CHECK-NEXT: fmul v2.2s, v2.2s, v0.2s
74 ; CHECK-NEXT: fmul v2.2s, v1.2s, v2.2s
75 ; CHECK-NEXT: fcmeq v1.2s, v0.2s, #0.0
76 ; CHECK-NEXT: bsl v1.8b, v0.8b, v2.8b
77 ; CHECK-NEXT: mov v0.16b, v1.16b
79 %1 = tail call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> %a)
83 define <4 x float> @f4sqrt(<4 x float> %a) #0 {
84 ; FAULT-LABEL: f4sqrt:
86 ; FAULT-NEXT: fsqrt v0.4s, v0.4s
89 ; CHECK-LABEL: f4sqrt:
91 ; CHECK-NEXT: frsqrte v1.4s, v0.4s
92 ; CHECK-NEXT: fmul v2.4s, v1.4s, v1.4s
93 ; CHECK-NEXT: frsqrts v2.4s, v0.4s, v2.4s
94 ; CHECK-NEXT: fmul v1.4s, v1.4s, v2.4s
95 ; CHECK-NEXT: fmul v2.4s, v1.4s, v1.4s
96 ; CHECK-NEXT: frsqrts v2.4s, v0.4s, v2.4s
97 ; CHECK-NEXT: fmul v2.4s, v2.4s, v0.4s
98 ; CHECK-NEXT: fmul v2.4s, v1.4s, v2.4s
99 ; CHECK-NEXT: fcmeq v1.4s, v0.4s, #0.0
100 ; CHECK-NEXT: bsl v1.16b, v0.16b, v2.16b
101 ; CHECK-NEXT: mov v0.16b, v1.16b
103 %1 = tail call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)
107 define <8 x float> @f8sqrt(<8 x float> %a) #0 {
108 ; FAULT-LABEL: f8sqrt:
110 ; FAULT-NEXT: fsqrt v0.4s, v0.4s
111 ; FAULT-NEXT: fsqrt v1.4s, v1.4s
114 ; CHECK-LABEL: f8sqrt:
116 ; CHECK-NEXT: frsqrte v2.4s, v0.4s
117 ; CHECK-NEXT: fmul v3.4s, v2.4s, v2.4s
118 ; CHECK-NEXT: frsqrts v3.4s, v0.4s, v3.4s
119 ; CHECK-NEXT: fmul v2.4s, v2.4s, v3.4s
120 ; CHECK-NEXT: fmul v3.4s, v2.4s, v2.4s
121 ; CHECK-NEXT: frsqrts v3.4s, v0.4s, v3.4s
122 ; CHECK-NEXT: fmul v3.4s, v3.4s, v0.4s
123 ; CHECK-NEXT: fmul v3.4s, v2.4s, v3.4s
124 ; CHECK-NEXT: fcmeq v2.4s, v0.4s, #0.0
125 ; CHECK-NEXT: bsl v2.16b, v0.16b, v3.16b
126 ; CHECK-NEXT: frsqrte v0.4s, v1.4s
127 ; CHECK-NEXT: fmul v3.4s, v0.4s, v0.4s
128 ; CHECK-NEXT: frsqrts v3.4s, v1.4s, v3.4s
129 ; CHECK-NEXT: fmul v0.4s, v0.4s, v3.4s
130 ; CHECK-NEXT: fmul v3.4s, v0.4s, v0.4s
131 ; CHECK-NEXT: frsqrts v3.4s, v1.4s, v3.4s
132 ; CHECK-NEXT: fmul v3.4s, v3.4s, v1.4s
133 ; CHECK-NEXT: fmul v0.4s, v0.4s, v3.4s
134 ; CHECK-NEXT: fcmeq v3.4s, v1.4s, #0.0
135 ; CHECK-NEXT: bsl v3.16b, v1.16b, v0.16b
136 ; CHECK-NEXT: mov v0.16b, v2.16b
137 ; CHECK-NEXT: mov v1.16b, v3.16b
139 %1 = tail call fast <8 x float> @llvm.sqrt.v8f32(<8 x float> %a)
143 define double @dsqrt(double %a) #0 {
144 ; FAULT-LABEL: dsqrt:
146 ; FAULT-NEXT: fsqrt d0, d0
149 ; CHECK-LABEL: dsqrt:
151 ; CHECK-NEXT: frsqrte d1, d0
152 ; CHECK-NEXT: fmul d2, d1, d1
153 ; CHECK-NEXT: frsqrts d2, d0, d2
154 ; CHECK-NEXT: fmul d1, d1, d2
155 ; CHECK-NEXT: fmul d2, d1, d1
156 ; CHECK-NEXT: frsqrts d2, d0, d2
157 ; CHECK-NEXT: fmul d1, d1, d2
158 ; CHECK-NEXT: fmul d2, d1, d1
159 ; CHECK-NEXT: frsqrts d2, d0, d2
160 ; CHECK-NEXT: fmul d2, d2, d0
161 ; CHECK-NEXT: fmul d1, d1, d2
162 ; CHECK-NEXT: fcmp d0, #0.0
163 ; CHECK-NEXT: fcsel d0, d0, d1, eq
165 %1 = tail call fast double @llvm.sqrt.f64(double %a)
169 define double @dsqrt_ieee_denorms(double %a) #1 {
170 ; FAULT-LABEL: dsqrt_ieee_denorms:
172 ; FAULT-NEXT: fsqrt d0, d0
175 ; CHECK-LABEL: dsqrt_ieee_denorms:
177 ; CHECK-NEXT: frsqrte d1, d0
178 ; CHECK-NEXT: fmul d2, d1, d1
179 ; CHECK-NEXT: frsqrts d2, d0, d2
180 ; CHECK-NEXT: fmul d1, d1, d2
181 ; CHECK-NEXT: fmul d2, d1, d1
182 ; CHECK-NEXT: frsqrts d2, d0, d2
183 ; CHECK-NEXT: fmul d1, d1, d2
184 ; CHECK-NEXT: fmul d2, d1, d1
185 ; CHECK-NEXT: frsqrts d2, d0, d2
186 ; CHECK-NEXT: fmul d2, d2, d0
187 ; CHECK-NEXT: fmul d1, d1, d2
188 ; CHECK-NEXT: fcmp d0, #0.0
189 ; CHECK-NEXT: fcsel d0, d0, d1, eq
191 %1 = tail call fast double @llvm.sqrt.f64(double %a)
195 define <2 x double> @d2sqrt(<2 x double> %a) #0 {
196 ; FAULT-LABEL: d2sqrt:
198 ; FAULT-NEXT: fsqrt v0.2d, v0.2d
201 ; CHECK-LABEL: d2sqrt:
203 ; CHECK-NEXT: frsqrte v1.2d, v0.2d
204 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
205 ; CHECK-NEXT: frsqrts v2.2d, v0.2d, v2.2d
206 ; CHECK-NEXT: fmul v1.2d, v1.2d, v2.2d
207 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
208 ; CHECK-NEXT: frsqrts v2.2d, v0.2d, v2.2d
209 ; CHECK-NEXT: fmul v1.2d, v1.2d, v2.2d
210 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
211 ; CHECK-NEXT: frsqrts v2.2d, v0.2d, v2.2d
212 ; CHECK-NEXT: fmul v2.2d, v2.2d, v0.2d
213 ; CHECK-NEXT: fmul v2.2d, v1.2d, v2.2d
214 ; CHECK-NEXT: fcmeq v1.2d, v0.2d, #0.0
215 ; CHECK-NEXT: bsl v1.16b, v0.16b, v2.16b
216 ; CHECK-NEXT: mov v0.16b, v1.16b
218 %1 = tail call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> %a)
222 define <4 x double> @d4sqrt(<4 x double> %a) #0 {
223 ; FAULT-LABEL: d4sqrt:
225 ; FAULT-NEXT: fsqrt v0.2d, v0.2d
226 ; FAULT-NEXT: fsqrt v1.2d, v1.2d
229 ; CHECK-LABEL: d4sqrt:
231 ; CHECK-NEXT: frsqrte v2.2d, v0.2d
232 ; CHECK-NEXT: fmul v3.2d, v2.2d, v2.2d
233 ; CHECK-NEXT: frsqrts v3.2d, v0.2d, v3.2d
234 ; CHECK-NEXT: fmul v2.2d, v2.2d, v3.2d
235 ; CHECK-NEXT: fmul v3.2d, v2.2d, v2.2d
236 ; CHECK-NEXT: frsqrts v3.2d, v0.2d, v3.2d
237 ; CHECK-NEXT: fmul v2.2d, v2.2d, v3.2d
238 ; CHECK-NEXT: fmul v3.2d, v2.2d, v2.2d
239 ; CHECK-NEXT: frsqrts v3.2d, v0.2d, v3.2d
240 ; CHECK-NEXT: fmul v3.2d, v3.2d, v0.2d
241 ; CHECK-NEXT: fmul v3.2d, v2.2d, v3.2d
242 ; CHECK-NEXT: fcmeq v2.2d, v0.2d, #0.0
243 ; CHECK-NEXT: bsl v2.16b, v0.16b, v3.16b
244 ; CHECK-NEXT: frsqrte v0.2d, v1.2d
245 ; CHECK-NEXT: fmul v3.2d, v0.2d, v0.2d
246 ; CHECK-NEXT: frsqrts v3.2d, v1.2d, v3.2d
247 ; CHECK-NEXT: fmul v0.2d, v0.2d, v3.2d
248 ; CHECK-NEXT: fmul v3.2d, v0.2d, v0.2d
249 ; CHECK-NEXT: frsqrts v3.2d, v1.2d, v3.2d
250 ; CHECK-NEXT: fmul v0.2d, v0.2d, v3.2d
251 ; CHECK-NEXT: fmul v3.2d, v0.2d, v0.2d
252 ; CHECK-NEXT: frsqrts v3.2d, v1.2d, v3.2d
253 ; CHECK-NEXT: fmul v3.2d, v3.2d, v1.2d
254 ; CHECK-NEXT: fmul v0.2d, v0.2d, v3.2d
255 ; CHECK-NEXT: fcmeq v3.2d, v1.2d, #0.0
256 ; CHECK-NEXT: bsl v3.16b, v1.16b, v0.16b
257 ; CHECK-NEXT: mov v0.16b, v2.16b
258 ; CHECK-NEXT: mov v1.16b, v3.16b
260 %1 = tail call fast <4 x double> @llvm.sqrt.v4f64(<4 x double> %a)
264 define float @frsqrt(float %a) #0 {
265 ; FAULT-LABEL: frsqrt:
267 ; FAULT-NEXT: fsqrt s0, s0
268 ; FAULT-NEXT: fmov s1, #1.00000000
269 ; FAULT-NEXT: fdiv s0, s1, s0
272 ; CHECK-LABEL: frsqrt:
274 ; CHECK-NEXT: frsqrte s1, s0
275 ; CHECK-NEXT: fmul s2, s1, s1
276 ; CHECK-NEXT: frsqrts s2, s0, s2
277 ; CHECK-NEXT: fmul s1, s1, s2
278 ; CHECK-NEXT: fmul s2, s1, s1
279 ; CHECK-NEXT: frsqrts s0, s0, s2
280 ; CHECK-NEXT: fmul s0, s1, s0
282 %1 = tail call fast float @llvm.sqrt.f32(float %a)
283 %2 = fdiv fast float 1.000000e+00, %1
287 define <2 x float> @f2rsqrt(<2 x float> %a) #0 {
288 ; FAULT-LABEL: f2rsqrt:
290 ; FAULT-NEXT: fsqrt v0.2s, v0.2s
291 ; FAULT-NEXT: fmov v1.2s, #1.00000000
292 ; FAULT-NEXT: fdiv v0.2s, v1.2s, v0.2s
295 ; CHECK-LABEL: f2rsqrt:
297 ; CHECK-NEXT: frsqrte v1.2s, v0.2s
298 ; CHECK-NEXT: fmul v2.2s, v1.2s, v1.2s
299 ; CHECK-NEXT: frsqrts v2.2s, v0.2s, v2.2s
300 ; CHECK-NEXT: fmul v1.2s, v1.2s, v2.2s
301 ; CHECK-NEXT: fmul v2.2s, v1.2s, v1.2s
302 ; CHECK-NEXT: frsqrts v0.2s, v0.2s, v2.2s
303 ; CHECK-NEXT: fmul v0.2s, v1.2s, v0.2s
305 %1 = tail call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> %a)
306 %2 = fdiv fast <2 x float> <float 1.000000e+00, float 1.000000e+00>, %1
310 define <4 x float> @f4rsqrt(<4 x float> %a) #0 {
311 ; FAULT-LABEL: f4rsqrt:
313 ; FAULT-NEXT: fsqrt v0.4s, v0.4s
314 ; FAULT-NEXT: fmov v1.4s, #1.00000000
315 ; FAULT-NEXT: fdiv v0.4s, v1.4s, v0.4s
318 ; CHECK-LABEL: f4rsqrt:
320 ; CHECK-NEXT: frsqrte v1.4s, v0.4s
321 ; CHECK-NEXT: fmul v2.4s, v1.4s, v1.4s
322 ; CHECK-NEXT: frsqrts v2.4s, v0.4s, v2.4s
323 ; CHECK-NEXT: fmul v1.4s, v1.4s, v2.4s
324 ; CHECK-NEXT: fmul v2.4s, v1.4s, v1.4s
325 ; CHECK-NEXT: frsqrts v0.4s, v0.4s, v2.4s
326 ; CHECK-NEXT: fmul v0.4s, v1.4s, v0.4s
328 %1 = tail call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)
329 %2 = fdiv fast <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %1
333 define <8 x float> @f8rsqrt(<8 x float> %a) #0 {
334 ; FAULT-LABEL: f8rsqrt:
336 ; FAULT-NEXT: fsqrt v1.4s, v1.4s
337 ; FAULT-NEXT: fsqrt v0.4s, v0.4s
338 ; FAULT-NEXT: fmov v2.4s, #1.00000000
339 ; FAULT-NEXT: fdiv v0.4s, v2.4s, v0.4s
340 ; FAULT-NEXT: fdiv v1.4s, v2.4s, v1.4s
343 ; CHECK-LABEL: f8rsqrt:
345 ; CHECK-NEXT: frsqrte v2.4s, v0.4s
346 ; CHECK-NEXT: fmul v4.4s, v2.4s, v2.4s
347 ; CHECK-NEXT: frsqrte v3.4s, v1.4s
348 ; CHECK-NEXT: frsqrts v4.4s, v0.4s, v4.4s
349 ; CHECK-NEXT: fmul v2.4s, v2.4s, v4.4s
350 ; CHECK-NEXT: fmul v4.4s, v3.4s, v3.4s
351 ; CHECK-NEXT: frsqrts v4.4s, v1.4s, v4.4s
352 ; CHECK-NEXT: fmul v3.4s, v3.4s, v4.4s
353 ; CHECK-NEXT: fmul v4.4s, v2.4s, v2.4s
354 ; CHECK-NEXT: frsqrts v0.4s, v0.4s, v4.4s
355 ; CHECK-NEXT: fmul v4.4s, v3.4s, v3.4s
356 ; CHECK-NEXT: frsqrts v1.4s, v1.4s, v4.4s
357 ; CHECK-NEXT: fmul v0.4s, v2.4s, v0.4s
358 ; CHECK-NEXT: fmul v1.4s, v3.4s, v1.4s
360 %1 = tail call fast <8 x float> @llvm.sqrt.v8f32(<8 x float> %a)
361 %2 = fdiv fast <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %1
365 define double @drsqrt(double %a) #0 {
366 ; FAULT-LABEL: drsqrt:
368 ; FAULT-NEXT: fsqrt d0, d0
369 ; FAULT-NEXT: fmov d1, #1.00000000
370 ; FAULT-NEXT: fdiv d0, d1, d0
373 ; CHECK-LABEL: drsqrt:
375 ; CHECK-NEXT: frsqrte d1, d0
376 ; CHECK-NEXT: fmul d2, d1, d1
377 ; CHECK-NEXT: frsqrts d2, d0, d2
378 ; CHECK-NEXT: fmul d1, d1, d2
379 ; CHECK-NEXT: fmul d2, d1, d1
380 ; CHECK-NEXT: frsqrts d2, d0, d2
381 ; CHECK-NEXT: fmul d1, d1, d2
382 ; CHECK-NEXT: fmul d2, d1, d1
383 ; CHECK-NEXT: frsqrts d0, d0, d2
384 ; CHECK-NEXT: fmul d0, d1, d0
386 %1 = tail call fast double @llvm.sqrt.f64(double %a)
387 %2 = fdiv fast double 1.000000e+00, %1
391 define <2 x double> @d2rsqrt(<2 x double> %a) #0 {
392 ; FAULT-LABEL: d2rsqrt:
394 ; FAULT-NEXT: fsqrt v0.2d, v0.2d
395 ; FAULT-NEXT: fmov v1.2d, #1.00000000
396 ; FAULT-NEXT: fdiv v0.2d, v1.2d, v0.2d
399 ; CHECK-LABEL: d2rsqrt:
401 ; CHECK-NEXT: frsqrte v1.2d, v0.2d
402 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
403 ; CHECK-NEXT: frsqrts v2.2d, v0.2d, v2.2d
404 ; CHECK-NEXT: fmul v1.2d, v1.2d, v2.2d
405 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
406 ; CHECK-NEXT: frsqrts v2.2d, v0.2d, v2.2d
407 ; CHECK-NEXT: fmul v1.2d, v1.2d, v2.2d
408 ; CHECK-NEXT: fmul v2.2d, v1.2d, v1.2d
409 ; CHECK-NEXT: frsqrts v0.2d, v0.2d, v2.2d
410 ; CHECK-NEXT: fmul v0.2d, v1.2d, v0.2d
412 %1 = tail call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> %a)
413 %2 = fdiv fast <2 x double> <double 1.000000e+00, double 1.000000e+00>, %1
417 define <4 x double> @d4rsqrt(<4 x double> %a) #0 {
418 ; FAULT-LABEL: d4rsqrt:
420 ; FAULT-NEXT: fsqrt v1.2d, v1.2d
421 ; FAULT-NEXT: fsqrt v0.2d, v0.2d
422 ; FAULT-NEXT: fmov v2.2d, #1.00000000
423 ; FAULT-NEXT: fdiv v0.2d, v2.2d, v0.2d
424 ; FAULT-NEXT: fdiv v1.2d, v2.2d, v1.2d
427 ; CHECK-LABEL: d4rsqrt:
429 ; CHECK-NEXT: frsqrte v2.2d, v0.2d
430 ; CHECK-NEXT: fmul v4.2d, v2.2d, v2.2d
431 ; CHECK-NEXT: frsqrte v3.2d, v1.2d
432 ; CHECK-NEXT: frsqrts v4.2d, v0.2d, v4.2d
433 ; CHECK-NEXT: fmul v2.2d, v2.2d, v4.2d
434 ; CHECK-NEXT: fmul v4.2d, v3.2d, v3.2d
435 ; CHECK-NEXT: frsqrts v4.2d, v1.2d, v4.2d
436 ; CHECK-NEXT: fmul v3.2d, v3.2d, v4.2d
437 ; CHECK-NEXT: fmul v4.2d, v2.2d, v2.2d
438 ; CHECK-NEXT: frsqrts v4.2d, v0.2d, v4.2d
439 ; CHECK-NEXT: fmul v2.2d, v2.2d, v4.2d
440 ; CHECK-NEXT: fmul v4.2d, v3.2d, v3.2d
441 ; CHECK-NEXT: frsqrts v4.2d, v1.2d, v4.2d
442 ; CHECK-NEXT: fmul v3.2d, v3.2d, v4.2d
443 ; CHECK-NEXT: fmul v4.2d, v2.2d, v2.2d
444 ; CHECK-NEXT: frsqrts v0.2d, v0.2d, v4.2d
445 ; CHECK-NEXT: fmul v4.2d, v3.2d, v3.2d
446 ; CHECK-NEXT: frsqrts v1.2d, v1.2d, v4.2d
447 ; CHECK-NEXT: fmul v0.2d, v2.2d, v0.2d
448 ; CHECK-NEXT: fmul v1.2d, v3.2d, v1.2d
450 %1 = tail call fast <4 x double> @llvm.sqrt.v4f64(<4 x double> %a)
451 %2 = fdiv fast <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %1
455 attributes #0 = { "unsafe-fp-math"="true" }
456 attributes #1 = { "unsafe-fp-math"="true" "denormal-fp-math"="ieee" }