1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
2 ; RUN: llc < %s -mtriple=arm64-eabi -pass-remarks-missed=gisel-* \
3 ; RUN: -aarch64-neon-syntax=apple -global-isel -global-isel-abort=2 2>&1 | \
4 ; RUN: FileCheck %s --check-prefixes=FALLBACK,CHECK
6 define <2 x i32> @fcvtas_2s(<2 x float> %A) nounwind {
7 ;CHECK-LABEL: fcvtas_2s:
9 ;CHECK: fcvtas.2s v0, v0
11 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> %A)
15 define <4 x i32> @fcvtas_4s(<4 x float> %A) nounwind {
16 ;CHECK-LABEL: fcvtas_4s:
18 ;CHECK: fcvtas.4s v0, v0
20 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> %A)
24 define <2 x i64> @fcvtas_2d(<2 x double> %A) nounwind {
25 ;CHECK-LABEL: fcvtas_2d:
27 ;CHECK: fcvtas.2d v0, v0
29 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> %A)
33 declare <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float>) nounwind readnone
34 declare <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float>) nounwind readnone
35 declare <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double>) nounwind readnone
37 define <2 x i32> @fcvtau_2s(<2 x float> %A) nounwind {
38 ;CHECK-LABEL: fcvtau_2s:
40 ;CHECK: fcvtau.2s v0, v0
42 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> %A)
46 define <4 x i32> @fcvtau_4s(<4 x float> %A) nounwind {
47 ;CHECK-LABEL: fcvtau_4s:
49 ;CHECK: fcvtau.4s v0, v0
51 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> %A)
55 define <2 x i64> @fcvtau_2d(<2 x double> %A) nounwind {
56 ;CHECK-LABEL: fcvtau_2d:
58 ;CHECK: fcvtau.2d v0, v0
60 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> %A)
64 declare <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float>) nounwind readnone
65 declare <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float>) nounwind readnone
66 declare <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double>) nounwind readnone
68 define <2 x i32> @fcvtms_2s(<2 x float> %A) nounwind {
69 ;CHECK-LABEL: fcvtms_2s:
71 ;CHECK: fcvtms.2s v0, v0
73 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> %A)
77 define <4 x i32> @fcvtms_4s(<4 x float> %A) nounwind {
78 ;CHECK-LABEL: fcvtms_4s:
80 ;CHECK: fcvtms.4s v0, v0
82 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> %A)
86 define <2 x i64> @fcvtms_2d(<2 x double> %A) nounwind {
87 ;CHECK-LABEL: fcvtms_2d:
89 ;CHECK: fcvtms.2d v0, v0
91 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> %A)
95 declare <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float>) nounwind readnone
96 declare <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float>) nounwind readnone
97 declare <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double>) nounwind readnone
99 define <2 x i32> @fcvtmu_2s(<2 x float> %A) nounwind {
100 ;CHECK-LABEL: fcvtmu_2s:
102 ;CHECK: fcvtmu.2s v0, v0
104 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> %A)
108 define <4 x i32> @fcvtmu_4s(<4 x float> %A) nounwind {
109 ;CHECK-LABEL: fcvtmu_4s:
111 ;CHECK: fcvtmu.4s v0, v0
113 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> %A)
117 define <2 x i64> @fcvtmu_2d(<2 x double> %A) nounwind {
118 ;CHECK-LABEL: fcvtmu_2d:
120 ;CHECK: fcvtmu.2d v0, v0
122 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> %A)
126 declare <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float>) nounwind readnone
127 declare <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float>) nounwind readnone
128 declare <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double>) nounwind readnone
130 define <2 x i32> @fcvtps_2s(<2 x float> %A) nounwind {
131 ;CHECK-LABEL: fcvtps_2s:
133 ;CHECK: fcvtps.2s v0, v0
135 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> %A)
139 define <4 x i32> @fcvtps_4s(<4 x float> %A) nounwind {
140 ;CHECK-LABEL: fcvtps_4s:
142 ;CHECK: fcvtps.4s v0, v0
144 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> %A)
148 define <2 x i64> @fcvtps_2d(<2 x double> %A) nounwind {
149 ;CHECK-LABEL: fcvtps_2d:
151 ;CHECK: fcvtps.2d v0, v0
153 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> %A)
157 declare <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float>) nounwind readnone
158 declare <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float>) nounwind readnone
159 declare <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double>) nounwind readnone
161 define <2 x i32> @fcvtpu_2s(<2 x float> %A) nounwind {
162 ;CHECK-LABEL: fcvtpu_2s:
164 ;CHECK: fcvtpu.2s v0, v0
166 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> %A)
170 define <4 x i32> @fcvtpu_4s(<4 x float> %A) nounwind {
171 ;CHECK-LABEL: fcvtpu_4s:
173 ;CHECK: fcvtpu.4s v0, v0
175 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> %A)
179 define <2 x i64> @fcvtpu_2d(<2 x double> %A) nounwind {
180 ;CHECK-LABEL: fcvtpu_2d:
182 ;CHECK: fcvtpu.2d v0, v0
184 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> %A)
188 declare <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float>) nounwind readnone
189 declare <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float>) nounwind readnone
190 declare <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double>) nounwind readnone
192 define <2 x i32> @fcvtns_2s(<2 x float> %A) nounwind {
193 ;CHECK-LABEL: fcvtns_2s:
195 ;CHECK: fcvtns.2s v0, v0
197 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> %A)
201 define <4 x i32> @fcvtns_4s(<4 x float> %A) nounwind {
202 ;CHECK-LABEL: fcvtns_4s:
204 ;CHECK: fcvtns.4s v0, v0
206 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> %A)
210 define <2 x i64> @fcvtns_2d(<2 x double> %A) nounwind {
211 ;CHECK-LABEL: fcvtns_2d:
213 ;CHECK: fcvtns.2d v0, v0
215 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> %A)
219 declare <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float>) nounwind readnone
220 declare <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float>) nounwind readnone
221 declare <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double>) nounwind readnone
223 define <2 x i32> @fcvtnu_2s(<2 x float> %A) nounwind {
224 ;CHECK-LABEL: fcvtnu_2s:
226 ;CHECK: fcvtnu.2s v0, v0
228 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> %A)
232 define <4 x i32> @fcvtnu_4s(<4 x float> %A) nounwind {
233 ;CHECK-LABEL: fcvtnu_4s:
235 ;CHECK: fcvtnu.4s v0, v0
237 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> %A)
241 define <2 x i64> @fcvtnu_2d(<2 x double> %A) nounwind {
242 ;CHECK-LABEL: fcvtnu_2d:
244 ;CHECK: fcvtnu.2d v0, v0
246 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> %A)
250 declare <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float>) nounwind readnone
251 declare <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float>) nounwind readnone
252 declare <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double>) nounwind readnone
254 define <2 x i32> @fcvtzs_2s(<2 x float> %A) nounwind {
255 ;CHECK-LABEL: fcvtzs_2s:
257 ;CHECK: fcvtzs.2s v0, v0
259 %tmp3 = fptosi <2 x float> %A to <2 x i32>
263 define <4 x i32> @fcvtzs_4s(<4 x float> %A) nounwind {
264 ;CHECK-LABEL: fcvtzs_4s:
266 ;CHECK: fcvtzs.4s v0, v0
268 %tmp3 = fptosi <4 x float> %A to <4 x i32>
272 define <2 x i64> @fcvtzs_2d(<2 x double> %A) nounwind {
273 ;CHECK-LABEL: fcvtzs_2d:
275 ;CHECK: fcvtzs.2d v0, v0
277 %tmp3 = fptosi <2 x double> %A to <2 x i64>
282 define <2 x i32> @fcvtzu_2s(<2 x float> %A) nounwind {
283 ;CHECK-LABEL: fcvtzu_2s:
285 ;CHECK: fcvtzu.2s v0, v0
287 %tmp3 = fptoui <2 x float> %A to <2 x i32>
291 define <4 x i32> @fcvtzu_4s(<4 x float> %A) nounwind {
292 ;CHECK-LABEL: fcvtzu_4s:
294 ;CHECK: fcvtzu.4s v0, v0
296 %tmp3 = fptoui <4 x float> %A to <4 x i32>
300 define <2 x i64> @fcvtzu_2d(<2 x double> %A) nounwind {
301 ;CHECK-LABEL: fcvtzu_2d:
303 ;CHECK: fcvtzu.2d v0, v0
305 %tmp3 = fptoui <2 x double> %A to <2 x i64>
309 define <2 x float> @frinta_2s(<2 x float> %A) nounwind {
310 ;CHECK-LABEL: frinta_2s:
312 ;CHECK: frinta.2s v0, v0
314 %tmp3 = call <2 x float> @llvm.round.v2f32(<2 x float> %A)
315 ret <2 x float> %tmp3
318 define <4 x float> @frinta_4s(<4 x float> %A) nounwind {
319 ;CHECK-LABEL: frinta_4s:
321 ;CHECK: frinta.4s v0, v0
323 %tmp3 = call <4 x float> @llvm.round.v4f32(<4 x float> %A)
324 ret <4 x float> %tmp3
327 define <2 x double> @frinta_2d(<2 x double> %A) nounwind {
328 ;CHECK-LABEL: frinta_2d:
330 ;CHECK: frinta.2d v0, v0
332 %tmp3 = call <2 x double> @llvm.round.v2f64(<2 x double> %A)
333 ret <2 x double> %tmp3
336 declare <2 x float> @llvm.round.v2f32(<2 x float>) nounwind readnone
337 declare <4 x float> @llvm.round.v4f32(<4 x float>) nounwind readnone
338 declare <2 x double> @llvm.round.v2f64(<2 x double>) nounwind readnone
340 define <2 x float> @frinti_2s(<2 x float> %A) nounwind {
341 ;CHECK-LABEL: frinti_2s:
343 ;CHECK: frinti.2s v0, v0
345 %tmp3 = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %A)
346 ret <2 x float> %tmp3
349 define <4 x float> @frinti_4s(<4 x float> %A) nounwind {
350 ;CHECK-LABEL: frinti_4s:
352 ;CHECK: frinti.4s v0, v0
354 %tmp3 = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %A)
355 ret <4 x float> %tmp3
358 define <2 x double> @frinti_2d(<2 x double> %A) nounwind {
359 ;CHECK-LABEL: frinti_2d:
361 ;CHECK: frinti.2d v0, v0
363 %tmp3 = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %A)
364 ret <2 x double> %tmp3
367 declare <2 x float> @llvm.nearbyint.v2f32(<2 x float>) nounwind readnone
368 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>) nounwind readnone
369 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>) nounwind readnone
371 define <2 x float> @frintm_2s(<2 x float> %A) nounwind {
372 ;CHECK-LABEL: frintm_2s:
374 ;CHECK: frintm.2s v0, v0
376 %tmp3 = call <2 x float> @llvm.floor.v2f32(<2 x float> %A)
377 ret <2 x float> %tmp3
380 define <4 x float> @frintm_4s(<4 x float> %A) nounwind {
381 ;CHECK-LABEL: frintm_4s:
383 ;CHECK: frintm.4s v0, v0
385 %tmp3 = call <4 x float> @llvm.floor.v4f32(<4 x float> %A)
386 ret <4 x float> %tmp3
389 define <2 x double> @frintm_2d(<2 x double> %A) nounwind {
390 ;CHECK-LABEL: frintm_2d:
392 ;CHECK: frintm.2d v0, v0
394 %tmp3 = call <2 x double> @llvm.floor.v2f64(<2 x double> %A)
395 ret <2 x double> %tmp3
398 declare <2 x float> @llvm.floor.v2f32(<2 x float>) nounwind readnone
399 declare <4 x float> @llvm.floor.v4f32(<4 x float>) nounwind readnone
400 declare <2 x double> @llvm.floor.v2f64(<2 x double>) nounwind readnone
402 define <2 x float> @frintn_2s(<2 x float> %A) nounwind {
403 ;CHECK-LABEL: frintn_2s:
405 ;CHECK: frintn.2s v0, v0
407 %tmp3 = call <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float> %A)
408 ret <2 x float> %tmp3
411 define <4 x float> @frintn_4s(<4 x float> %A) nounwind {
412 ;CHECK-LABEL: frintn_4s:
414 ;CHECK: frintn.4s v0, v0
416 %tmp3 = call <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float> %A)
417 ret <4 x float> %tmp3
420 define <2 x double> @frintn_2d(<2 x double> %A) nounwind {
421 ;CHECK-LABEL: frintn_2d:
423 ;CHECK: frintn.2d v0, v0
425 %tmp3 = call <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double> %A)
426 ret <2 x double> %tmp3
429 declare <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float>) nounwind readnone
430 declare <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float>) nounwind readnone
431 declare <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double>) nounwind readnone
433 ; FALLBACK-NOT: remark{{.*}}frintp_2s
434 define <2 x float> @frintp_2s(<2 x float> %A) nounwind {
435 ;CHECK-LABEL: frintp_2s:
437 ;CHECK: frintp.2s v0, v0
439 %tmp3 = call <2 x float> @llvm.ceil.v2f32(<2 x float> %A)
440 ret <2 x float> %tmp3
443 ; FALLBACK-NOT: remark{{.*}}frintp_4s
444 define <4 x float> @frintp_4s(<4 x float> %A) nounwind {
445 ;CHECK-LABEL: frintp_4s:
447 ;CHECK: frintp.4s v0, v0
449 %tmp3 = call <4 x float> @llvm.ceil.v4f32(<4 x float> %A)
450 ret <4 x float> %tmp3
453 ; FALLBACK-NOT: remark{{.*}}frintp_2d
454 define <2 x double> @frintp_2d(<2 x double> %A) nounwind {
455 ;CHECK-LABEL: frintp_2d:
457 ;CHECK: frintp.2d v0, v0
459 %tmp3 = call <2 x double> @llvm.ceil.v2f64(<2 x double> %A)
460 ret <2 x double> %tmp3
463 declare <2 x float> @llvm.ceil.v2f32(<2 x float>) nounwind readnone
464 declare <4 x float> @llvm.ceil.v4f32(<4 x float>) nounwind readnone
465 declare <2 x double> @llvm.ceil.v2f64(<2 x double>) nounwind readnone
467 define <2 x float> @frintx_2s(<2 x float> %A) nounwind {
468 ;CHECK-LABEL: frintx_2s:
470 ;CHECK: frintx.2s v0, v0
472 %tmp3 = call <2 x float> @llvm.rint.v2f32(<2 x float> %A)
473 ret <2 x float> %tmp3
476 define <4 x float> @frintx_4s(<4 x float> %A) nounwind {
477 ;CHECK-LABEL: frintx_4s:
479 ;CHECK: frintx.4s v0, v0
481 %tmp3 = call <4 x float> @llvm.rint.v4f32(<4 x float> %A)
482 ret <4 x float> %tmp3
485 define <2 x double> @frintx_2d(<2 x double> %A) nounwind {
486 ;CHECK-LABEL: frintx_2d:
488 ;CHECK: frintx.2d v0, v0
490 %tmp3 = call <2 x double> @llvm.rint.v2f64(<2 x double> %A)
491 ret <2 x double> %tmp3
494 declare <2 x float> @llvm.rint.v2f32(<2 x float>) nounwind readnone
495 declare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind readnone
496 declare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind readnone
498 define <2 x float> @frintz_2s(<2 x float> %A) nounwind {
499 ;CHECK-LABEL: frintz_2s:
501 ;CHECK: frintz.2s v0, v0
503 %tmp3 = call <2 x float> @llvm.trunc.v2f32(<2 x float> %A)
504 ret <2 x float> %tmp3
507 define <4 x float> @frintz_4s(<4 x float> %A) nounwind {
508 ;CHECK-LABEL: frintz_4s:
510 ;CHECK: frintz.4s v0, v0
512 %tmp3 = call <4 x float> @llvm.trunc.v4f32(<4 x float> %A)
513 ret <4 x float> %tmp3
516 define <2 x double> @frintz_2d(<2 x double> %A) nounwind {
517 ;CHECK-LABEL: frintz_2d:
519 ;CHECK: frintz.2d v0, v0
521 %tmp3 = call <2 x double> @llvm.trunc.v2f64(<2 x double> %A)
522 ret <2 x double> %tmp3
525 declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone
526 declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone
527 declare <2 x double> @llvm.trunc.v2f64(<2 x double>) nounwind readnone
529 define <2 x float> @fcvtxn_2s(<2 x double> %A) nounwind {
530 ;CHECK-LABEL: fcvtxn_2s:
532 ;CHECK: fcvtxn v0.2s, v0.2d
534 %tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A)
535 ret <2 x float> %tmp3
538 define <4 x float> @fcvtxn_4s(<2 x float> %ret, <2 x double> %A) nounwind {
539 ;CHECK-LABEL: fcvtxn_4s:
541 ;CHECK: fcvtxn2 v0.4s, v1.2d
543 %tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A)
544 %res = shufflevector <2 x float> %ret, <2 x float> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
548 declare <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double>) nounwind readnone
550 define <2 x i32> @fcvtzsc_2s(<2 x float> %A) nounwind {
551 ;CHECK-LABEL: fcvtzsc_2s:
553 ;CHECK: fcvtzs.2s v0, v0, #1
555 %tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float> %A, i32 1)
559 define <4 x i32> @fcvtzsc_4s(<4 x float> %A) nounwind {
560 ;CHECK-LABEL: fcvtzsc_4s:
562 ;CHECK: fcvtzs.4s v0, v0, #1
564 %tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float> %A, i32 1)
568 define <2 x i64> @fcvtzsc_2d(<2 x double> %A) nounwind {
569 ;CHECK-LABEL: fcvtzsc_2d:
571 ;CHECK: fcvtzs.2d v0, v0, #1
573 %tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double> %A, i32 1)
577 declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float>, i32) nounwind readnone
578 declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float>, i32) nounwind readnone
579 declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double>, i32) nounwind readnone
581 define <2 x i32> @fcvtzuc_2s(<2 x float> %A) nounwind {
582 ;CHECK-LABEL: fcvtzuc_2s:
584 ;CHECK: fcvtzu.2s v0, v0, #1
586 %tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float> %A, i32 1)
590 define <4 x i32> @fcvtzuc_4s(<4 x float> %A) nounwind {
591 ;CHECK-LABEL: fcvtzuc_4s:
593 ;CHECK: fcvtzu.4s v0, v0, #1
595 %tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float> %A, i32 1)
599 define <2 x i64> @fcvtzuc_2d(<2 x double> %A) nounwind {
600 ;CHECK-LABEL: fcvtzuc_2d:
602 ;CHECK: fcvtzu.2d v0, v0, #1
604 %tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double> %A, i32 1)
608 declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float>, i32) nounwind readnone
609 declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float>, i32) nounwind readnone
610 declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double>, i32) nounwind readnone
612 define <2 x float> @scvtf_2sc(<2 x i32> %A) nounwind {
613 ;CHECK-LABEL: scvtf_2sc:
615 ;CHECK: scvtf.2s v0, v0, #1
617 %tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32> %A, i32 1)
618 ret <2 x float> %tmp3
621 define <4 x float> @scvtf_4sc(<4 x i32> %A) nounwind {
622 ;CHECK-LABEL: scvtf_4sc:
624 ;CHECK: scvtf.4s v0, v0, #1
626 %tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32> %A, i32 1)
627 ret <4 x float> %tmp3
630 define <2 x double> @scvtf_2dc(<2 x i64> %A) nounwind {
631 ;CHECK-LABEL: scvtf_2dc:
633 ;CHECK: scvtf.2d v0, v0, #1
635 %tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64> %A, i32 1)
636 ret <2 x double> %tmp3
639 declare <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone
640 declare <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone
641 declare <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone
643 define <2 x float> @ucvtf_2sc(<2 x i32> %A) nounwind {
644 ;CHECK-LABEL: ucvtf_2sc:
646 ;CHECK: ucvtf.2s v0, v0, #1
648 %tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32> %A, i32 1)
649 ret <2 x float> %tmp3
652 define <4 x float> @ucvtf_4sc(<4 x i32> %A) nounwind {
653 ;CHECK-LABEL: ucvtf_4sc:
655 ;CHECK: ucvtf.4s v0, v0, #1
657 %tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32> %A, i32 1)
658 ret <4 x float> %tmp3
661 define <2 x double> @ucvtf_2dc(<2 x i64> %A) nounwind {
662 ;CHECK-LABEL: ucvtf_2dc:
664 ;CHECK: ucvtf.2d v0, v0, #1
666 %tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64> %A, i32 1)
667 ret <2 x double> %tmp3
671 ;CHECK-LABEL: autogen_SD28458:
674 define void @autogen_SD28458(<8 x double> %val.f64, <8 x float>* %addr.f32) {
675 %Tr53 = fptrunc <8 x double> %val.f64 to <8 x float>
676 store <8 x float> %Tr53, <8 x float>* %addr.f32
680 ;CHECK-LABEL: autogen_SD19225:
683 define void @autogen_SD19225(<8 x double>* %addr.f64, <8 x float>* %addr.f32) {
684 %A = load <8 x float>, <8 x float>* %addr.f32
685 %Tr53 = fpext <8 x float> %A to <8 x double>
686 store <8 x double> %Tr53, <8 x double>* %addr.f64
690 declare <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone
691 declare <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone
692 declare <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone