AArch64/ARM64: move ARM64 into AArch64's place
[oota-llvm.git] / test / CodeGen / AArch64 / arm64-vector-imm.ll
1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
2
3 define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
4 ; CHECK-LABEL: v_orrimm:
5 ; CHECK-NOT: mov
6 ; CHECK-NOT: mvn
7 ; CHECK: orr
8         %tmp1 = load <8 x i8>* %A
9         %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
10         ret <8 x i8> %tmp3
11 }
12
13 define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
14 ; CHECK: v_orrimmQ
15 ; CHECK-NOT: mov
16 ; CHECK-NOT: mvn
17 ; CHECK: orr
18         %tmp1 = load <16 x i8>* %A
19         %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>
20         ret <16 x i8> %tmp3
21 }
22
23 define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
24 ; CHECK-LABEL: v_bicimm:
25 ; CHECK-NOT: mov
26 ; CHECK-NOT: mvn
27 ; CHECK: bic
28         %tmp1 = load <8 x i8>* %A
29         %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
30         ret <8 x i8> %tmp3
31 }
32
33 define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
34 ; CHECK-LABEL: v_bicimmQ:
35 ; CHECK-NOT: mov
36 ; CHECK-NOT: mvn
37 ; CHECK: bic
38         %tmp1 = load <16 x i8>* %A
39         %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 >
40         ret <16 x i8> %tmp3
41 }
42
43 define <2 x double> @foo(<2 x double> %bar) nounwind {
44 ; CHECK: foo
45 ; CHECK: fmov.2d        v1, #1.0000000
46   %add = fadd <2 x double> %bar, <double 1.0, double 1.0>
47   ret <2 x double> %add
48 }
49
50 define <4 x i32> @movi_4s_imm_t1() nounwind readnone ssp {
51 entry:
52 ; CHECK-LABEL: movi_4s_imm_t1:
53 ; CHECK: movi.4s v0, #0x4b
54   ret <4 x i32> <i32 75, i32 75, i32 75, i32 75>
55 }
56
57 define <4 x i32> @movi_4s_imm_t2() nounwind readnone ssp {
58 entry:
59 ; CHECK-LABEL: movi_4s_imm_t2:
60 ; CHECK: movi.4s v0, #0x4b, lsl #8
61   ret <4 x i32> <i32 19200, i32 19200, i32 19200, i32 19200>
62 }
63
64 define <4 x i32> @movi_4s_imm_t3() nounwind readnone ssp {
65 entry:
66 ; CHECK-LABEL: movi_4s_imm_t3:
67 ; CHECK: movi.4s v0, #0x4b, lsl #16
68   ret <4 x i32> <i32 4915200, i32 4915200, i32 4915200, i32 4915200>
69 }
70
71 define <4 x i32> @movi_4s_imm_t4() nounwind readnone ssp {
72 entry:
73 ; CHECK-LABEL: movi_4s_imm_t4:
74 ; CHECK: movi.4s v0, #0x4b, lsl #24
75   ret <4 x i32> <i32 1258291200, i32 1258291200, i32 1258291200, i32 1258291200>
76 }
77
78 define <8 x i16> @movi_8h_imm_t5() nounwind readnone ssp {
79 entry:
80 ; CHECK-LABEL: movi_8h_imm_t5:
81 ; CHECK: movi.8h v0, #0x4b
82   ret <8 x i16> <i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75>
83 }
84
85 ; rdar://11989841
86 define <8 x i16> @movi_8h_imm_t6() nounwind readnone ssp {
87 entry:
88 ; CHECK-LABEL: movi_8h_imm_t6:
89 ; CHECK: movi.8h v0, #0x4b, lsl #8
90   ret <8 x i16> <i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200>
91 }
92
93 define <4 x i32> @movi_4s_imm_t7() nounwind readnone ssp {
94 entry:
95 ; CHECK-LABEL: movi_4s_imm_t7:
96 ; CHECK: movi.4s v0, #0x4b, msl #8
97 ret <4 x i32> <i32 19455, i32 19455, i32 19455, i32 19455>
98 }
99
100 define <4 x i32> @movi_4s_imm_t8() nounwind readnone ssp {
101 entry:
102 ; CHECK-LABEL: movi_4s_imm_t8:
103 ; CHECK: movi.4s v0, #0x4b, msl #16
104 ret <4 x i32> <i32 4980735, i32 4980735, i32 4980735, i32 4980735>
105 }
106
107 define <16 x i8> @movi_16b_imm_t9() nounwind readnone ssp {
108 entry:
109 ; CHECK-LABEL: movi_16b_imm_t9:
110 ; CHECK: movi.16b v0, #0x4b
111 ret <16 x i8> <i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75,
112                i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75>
113 }
114
115 define <2 x i64> @movi_2d_imm_t10() nounwind readnone ssp {
116 entry:
117 ; CHECK-LABEL: movi_2d_imm_t10:
118 ; CHECK: movi.2d v0, #0xff00ff00ff00ff
119 ret <2 x i64> <i64 71777214294589695, i64 71777214294589695>
120 }
121
122 define <4 x i32> @movi_4s_imm_t11() nounwind readnone ssp {
123 entry:
124 ; CHECK-LABEL: movi_4s_imm_t11:
125 ; CHECK: fmov.4s v0, #-0.32812500
126 ret <4 x i32> <i32 3198681088, i32 3198681088, i32 3198681088, i32 3198681088>
127 }
128
129 define <2 x i64> @movi_2d_imm_t12() nounwind readnone ssp {
130 entry:
131 ; CHECK-LABEL: movi_2d_imm_t12:
132 ; CHECK: fmov.2d v0, #-0.17187500
133 ret <2 x i64> <i64 13818732506632945664, i64 13818732506632945664>
134 }