[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / arm64-vector-imm.ll
bloba3efa6b961e63ca0e58ad3f0550583a258f23920
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
4 define <8 x i8> @v_orrimm(ptr %A) nounwind {
5 ; CHECK-LABEL: v_orrimm:
6 ; CHECK:       // %bb.0:
7 ; CHECK-NEXT:    ldr d0, [x0]
8 ; CHECK-NEXT:    orr.2s v0, #1, lsl #24
9 ; CHECK-NEXT:    ret
10   %tmp1 = load <8 x i8>, ptr %A
11   %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
12   ret <8 x i8> %tmp3
15 define <16 x i8> @v_orrimmQ(ptr %A) nounwind {
16 ; CHECK-LABEL: v_orrimmQ:
17 ; CHECK:       // %bb.0:
18 ; CHECK-NEXT:    ldr q0, [x0]
19 ; CHECK-NEXT:    orr.4s v0, #1, lsl #24
20 ; CHECK-NEXT:    ret
21   %tmp1 = load <16 x i8>, ptr %A
22   %tmp3 = or <16 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
23   ret <16 x i8> %tmp3
26 define <8 x i8> @v_bicimm(ptr %A) nounwind {
27 ; CHECK-LABEL: v_bicimm:
28 ; CHECK:       // %bb.0:
29 ; CHECK-NEXT:    ldr d0, [x0]
30 ; CHECK-NEXT:    bic.2s v0, #255, lsl #24
31 ; CHECK-NEXT:    ret
32   %tmp1 = load <8 x i8>, ptr %A
33   %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
34   ret <8 x i8> %tmp3
37 define <16 x i8> @v_bicimmQ(ptr %A) nounwind {
38 ; CHECK-LABEL: v_bicimmQ:
39 ; CHECK:       // %bb.0:
40 ; CHECK-NEXT:    ldr q0, [x0]
41 ; CHECK-NEXT:    bic.4s v0, #255, lsl #24
42 ; CHECK-NEXT:    ret
43   %tmp1 = load <16 x i8>, ptr %A
44   %tmp3 = and <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
45   ret <16 x i8> %tmp3
48 define <2 x double> @foo(<2 x double> %bar) nounwind {
49 ; CHECK-LABEL: foo:
50 ; CHECK:       // %bb.0:
51 ; CHECK-NEXT:    fmov.2d v1, #1.00000000
52 ; CHECK-NEXT:    fadd.2d v0, v0, v1
53 ; CHECK-NEXT:    ret
54   %add = fadd <2 x double> %bar, <double 1.0, double 1.0>
55   ret <2 x double> %add
58 define <4 x i32> @movi_4s_imm_t1() nounwind readnone ssp {
59 ; CHECK-LABEL: movi_4s_imm_t1:
60 ; CHECK:       // %bb.0: // %entry
61 ; CHECK-NEXT:    movi.4s v0, #75
62 ; CHECK-NEXT:    ret
63 entry:
64   ret <4 x i32> <i32 75, i32 75, i32 75, i32 75>
67 define <4 x i32> @movi_4s_imm_t2() nounwind readnone ssp {
68 ; CHECK-LABEL: movi_4s_imm_t2:
69 ; CHECK:       // %bb.0: // %entry
70 ; CHECK-NEXT:    movi.4s v0, #75, lsl #8
71 ; CHECK-NEXT:    ret
72 entry:
73   ret <4 x i32> <i32 19200, i32 19200, i32 19200, i32 19200>
76 define <4 x i32> @movi_4s_imm_t3() nounwind readnone ssp {
77 ; CHECK-LABEL: movi_4s_imm_t3:
78 ; CHECK:       // %bb.0: // %entry
79 ; CHECK-NEXT:    movi.4s v0, #75, lsl #16
80 ; CHECK-NEXT:    ret
81 entry:
82   ret <4 x i32> <i32 4915200, i32 4915200, i32 4915200, i32 4915200>
85 define <4 x i32> @movi_4s_imm_t4() nounwind readnone ssp {
86 ; CHECK-LABEL: movi_4s_imm_t4:
87 ; CHECK:       // %bb.0: // %entry
88 ; CHECK-NEXT:    movi.4s v0, #75, lsl #24
89 ; CHECK-NEXT:    ret
90 entry:
91   ret <4 x i32> <i32 1258291200, i32 1258291200, i32 1258291200, i32 1258291200>
94 define <8 x i16> @movi_8h_imm_t5() nounwind readnone ssp {
95 ; CHECK-LABEL: movi_8h_imm_t5:
96 ; CHECK:       // %bb.0: // %entry
97 ; CHECK-NEXT:    movi.8h v0, #75
98 ; CHECK-NEXT:    ret
99 entry:
100   ret <8 x i16> <i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75>
103 ; rdar://11989841
104 define <8 x i16> @movi_8h_imm_t6() nounwind readnone ssp {
105 ; CHECK-LABEL: movi_8h_imm_t6:
106 ; CHECK:       // %bb.0: // %entry
107 ; CHECK-NEXT:    movi.8h v0, #75, lsl #8
108 ; CHECK-NEXT:    ret
109 entry:
110   ret <8 x i16> <i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200>
113 define <4 x i32> @movi_4s_imm_t7() nounwind readnone ssp {
114 ; CHECK-LABEL: movi_4s_imm_t7:
115 ; CHECK:       // %bb.0: // %entry
116 ; CHECK-NEXT:    movi.4s v0, #75, msl #8
117 ; CHECK-NEXT:    ret
118 entry:
119   ret <4 x i32> <i32 19455, i32 19455, i32 19455, i32 19455>
122 define <4 x i32> @movi_4s_imm_t8() nounwind readnone ssp {
123 ; CHECK-LABEL: movi_4s_imm_t8:
124 ; CHECK:       // %bb.0: // %entry
125 ; CHECK-NEXT:    movi.4s v0, #75, msl #16
126 ; CHECK-NEXT:    ret
127 entry:
128   ret <4 x i32> <i32 4980735, i32 4980735, i32 4980735, i32 4980735>
131 define <16 x i8> @movi_16b_imm_t9() nounwind readnone ssp {
132 ; CHECK-LABEL: movi_16b_imm_t9:
133 ; CHECK:       // %bb.0: // %entry
134 ; CHECK-NEXT:    movi.16b v0, #75
135 ; CHECK-NEXT:    ret
136 entry:
137   ret <16 x i8> <i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75>
140 define <2 x i64> @movi_2d_imm_t10() nounwind readnone ssp {
141 ; CHECK-LABEL: movi_2d_imm_t10:
142 ; CHECK:       // %bb.0: // %entry
143 ; CHECK-NEXT:    movi.2d v0, #0xff00ff00ff00ff
144 ; CHECK-NEXT:    ret
145 entry:
146   ret <2 x i64> <i64 71777214294589695, i64 71777214294589695>
149 define <4 x i32> @movi_4s_imm_t11() nounwind readnone ssp {
150 ; CHECK-LABEL: movi_4s_imm_t11:
151 ; CHECK:       // %bb.0: // %entry
152 ; CHECK-NEXT:    fmov.4s v0, #-0.32812500
153 ; CHECK-NEXT:    ret
154 entry:
155   ret <4 x i32> <i32 3198681088, i32 3198681088, i32 3198681088, i32 3198681088>
158 define <2 x i64> @movi_2d_imm_t12() nounwind readnone ssp {
159 ; CHECK-LABEL: movi_2d_imm_t12:
160 ; CHECK:       // %bb.0: // %entry
161 ; CHECK-NEXT:    fmov.2d v0, #-0.17187500
162 ; CHECK-NEXT:    ret
163 entry:
164   ret <2 x i64> <i64 13818732506632945664, i64 13818732506632945664>