blob: ed69f970c611cc93eed802a6d4ed80c82a6f8f5f [file] [log] [blame]
Bob Wilsonfe27c512009-10-07 23:47:21 +00001; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
Bob Wilson5bafff32009-06-22 23:27:02 +00002
3define <8 x i8> @v_movi8() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +00004;CHECK: v_movi8:
5;CHECK: vmov.i8
Bob Wilson5bafff32009-06-22 23:27:02 +00006 ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
7}
8
9define <4 x i16> @v_movi16a() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000010;CHECK: v_movi16a:
11;CHECK: vmov.i16
Bob Wilson5bafff32009-06-22 23:27:02 +000012 ret <4 x i16> < i16 16, i16 16, i16 16, i16 16 >
13}
14
15; 0x1000 = 4096
16define <4 x i16> @v_movi16b() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000017;CHECK: v_movi16b:
18;CHECK: vmov.i16
Bob Wilson5bafff32009-06-22 23:27:02 +000019 ret <4 x i16> < i16 4096, i16 4096, i16 4096, i16 4096 >
20}
21
22define <2 x i32> @v_movi32a() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000023;CHECK: v_movi32a:
24;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000025 ret <2 x i32> < i32 32, i32 32 >
26}
27
28; 0x2000 = 8192
29define <2 x i32> @v_movi32b() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000030;CHECK: v_movi32b:
31;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000032 ret <2 x i32> < i32 8192, i32 8192 >
33}
34
35; 0x200000 = 2097152
36define <2 x i32> @v_movi32c() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000037;CHECK: v_movi32c:
38;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000039 ret <2 x i32> < i32 2097152, i32 2097152 >
40}
41
42; 0x20000000 = 536870912
43define <2 x i32> @v_movi32d() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000044;CHECK: v_movi32d:
45;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000046 ret <2 x i32> < i32 536870912, i32 536870912 >
47}
48
49; 0x20ff = 8447
50define <2 x i32> @v_movi32e() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000051;CHECK: v_movi32e:
52;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000053 ret <2 x i32> < i32 8447, i32 8447 >
54}
55
56; 0x20ffff = 2162687
57define <2 x i32> @v_movi32f() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000058;CHECK: v_movi32f:
59;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000060 ret <2 x i32> < i32 2162687, i32 2162687 >
61}
62
63; 0xff0000ff0000ffff = 18374687574888349695
64define <1 x i64> @v_movi64() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000065;CHECK: v_movi64:
66;CHECK: vmov.i64
Bob Wilson5bafff32009-06-22 23:27:02 +000067 ret <1 x i64> < i64 18374687574888349695 >
68}
69
70define <16 x i8> @v_movQi8() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000071;CHECK: v_movQi8:
72;CHECK: vmov.i8
Bob Wilson5bafff32009-06-22 23:27:02 +000073 ret <16 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
74}
75
76define <8 x i16> @v_movQi16a() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000077;CHECK: v_movQi16a:
78;CHECK: vmov.i16
Bob Wilson5bafff32009-06-22 23:27:02 +000079 ret <8 x i16> < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 >
80}
81
82; 0x1000 = 4096
83define <8 x i16> @v_movQi16b() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000084;CHECK: v_movQi16b:
85;CHECK: vmov.i16
Bob Wilson5bafff32009-06-22 23:27:02 +000086 ret <8 x i16> < i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096 >
87}
88
89define <4 x i32> @v_movQi32a() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000090;CHECK: v_movQi32a:
91;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000092 ret <4 x i32> < i32 32, i32 32, i32 32, i32 32 >
93}
94
95; 0x2000 = 8192
96define <4 x i32> @v_movQi32b() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +000097;CHECK: v_movQi32b:
98;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +000099 ret <4 x i32> < i32 8192, i32 8192, i32 8192, i32 8192 >
100}
101
102; 0x200000 = 2097152
103define <4 x i32> @v_movQi32c() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +0000104;CHECK: v_movQi32c:
105;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +0000106 ret <4 x i32> < i32 2097152, i32 2097152, i32 2097152, i32 2097152 >
107}
108
109; 0x20000000 = 536870912
110define <4 x i32> @v_movQi32d() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +0000111;CHECK: v_movQi32d:
112;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +0000113 ret <4 x i32> < i32 536870912, i32 536870912, i32 536870912, i32 536870912 >
114}
115
116; 0x20ff = 8447
117define <4 x i32> @v_movQi32e() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +0000118;CHECK: v_movQi32e:
119;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +0000120 ret <4 x i32> < i32 8447, i32 8447, i32 8447, i32 8447 >
121}
122
123; 0x20ffff = 2162687
124define <4 x i32> @v_movQi32f() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +0000125;CHECK: v_movQi32f:
126;CHECK: vmov.i32
Bob Wilson5bafff32009-06-22 23:27:02 +0000127 ret <4 x i32> < i32 2162687, i32 2162687, i32 2162687, i32 2162687 >
128}
129
130; 0xff0000ff0000ffff = 18374687574888349695
131define <2 x i64> @v_movQi64() nounwind {
Bob Wilsonfe27c512009-10-07 23:47:21 +0000132;CHECK: v_movQi64:
133;CHECK: vmov.i64
Bob Wilson5bafff32009-06-22 23:27:02 +0000134 ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 >
135}
Bob Wilson83815ae2009-10-09 20:20:54 +0000136
137define <8 x i16> @vmovls8(<8 x i8>* %A) nounwind {
138;CHECK: vmovls8:
139;CHECK: vmovl.s8
140 %tmp1 = load <8 x i8>* %A
141 %tmp2 = call <8 x i16> @llvm.arm.neon.vmovls.v8i16(<8 x i8> %tmp1)
142 ret <8 x i16> %tmp2
143}
144
145define <4 x i32> @vmovls16(<4 x i16>* %A) nounwind {
146;CHECK: vmovls16:
147;CHECK: vmovl.s16
148 %tmp1 = load <4 x i16>* %A
149 %tmp2 = call <4 x i32> @llvm.arm.neon.vmovls.v4i32(<4 x i16> %tmp1)
150 ret <4 x i32> %tmp2
151}
152
153define <2 x i64> @vmovls32(<2 x i32>* %A) nounwind {
154;CHECK: vmovls32:
155;CHECK: vmovl.s32
156 %tmp1 = load <2 x i32>* %A
157 %tmp2 = call <2 x i64> @llvm.arm.neon.vmovls.v2i64(<2 x i32> %tmp1)
158 ret <2 x i64> %tmp2
159}
160
161define <8 x i16> @vmovlu8(<8 x i8>* %A) nounwind {
162;CHECK: vmovlu8:
163;CHECK: vmovl.u8
164 %tmp1 = load <8 x i8>* %A
165 %tmp2 = call <8 x i16> @llvm.arm.neon.vmovlu.v8i16(<8 x i8> %tmp1)
166 ret <8 x i16> %tmp2
167}
168
169define <4 x i32> @vmovlu16(<4 x i16>* %A) nounwind {
170;CHECK: vmovlu16:
171;CHECK: vmovl.u16
172 %tmp1 = load <4 x i16>* %A
173 %tmp2 = call <4 x i32> @llvm.arm.neon.vmovlu.v4i32(<4 x i16> %tmp1)
174 ret <4 x i32> %tmp2
175}
176
177define <2 x i64> @vmovlu32(<2 x i32>* %A) nounwind {
178;CHECK: vmovlu32:
179;CHECK: vmovl.u32
180 %tmp1 = load <2 x i32>* %A
181 %tmp2 = call <2 x i64> @llvm.arm.neon.vmovlu.v2i64(<2 x i32> %tmp1)
182 ret <2 x i64> %tmp2
183}
184
185declare <8 x i16> @llvm.arm.neon.vmovls.v8i16(<8 x i8>) nounwind readnone
186declare <4 x i32> @llvm.arm.neon.vmovls.v4i32(<4 x i16>) nounwind readnone
187declare <2 x i64> @llvm.arm.neon.vmovls.v2i64(<2 x i32>) nounwind readnone
188
189declare <8 x i16> @llvm.arm.neon.vmovlu.v8i16(<8 x i8>) nounwind readnone
190declare <4 x i32> @llvm.arm.neon.vmovlu.v4i32(<4 x i16>) nounwind readnone
191declare <2 x i64> @llvm.arm.neon.vmovlu.v2i64(<2 x i32>) nounwind readnone
192
193define <8 x i8> @vmovni16(<8 x i16>* %A) nounwind {
194;CHECK: vmovni16:
195;CHECK: vmovn.i16
196 %tmp1 = load <8 x i16>* %A
197 %tmp2 = call <8 x i8> @llvm.arm.neon.vmovn.v8i8(<8 x i16> %tmp1)
198 ret <8 x i8> %tmp2
199}
200
201define <4 x i16> @vmovni32(<4 x i32>* %A) nounwind {
202;CHECK: vmovni32:
203;CHECK: vmovn.i32
204 %tmp1 = load <4 x i32>* %A
205 %tmp2 = call <4 x i16> @llvm.arm.neon.vmovn.v4i16(<4 x i32> %tmp1)
206 ret <4 x i16> %tmp2
207}
208
209define <2 x i32> @vmovni64(<2 x i64>* %A) nounwind {
210;CHECK: vmovni64:
211;CHECK: vmovn.i64
212 %tmp1 = load <2 x i64>* %A
213 %tmp2 = call <2 x i32> @llvm.arm.neon.vmovn.v2i32(<2 x i64> %tmp1)
214 ret <2 x i32> %tmp2
215}
216
217declare <8 x i8> @llvm.arm.neon.vmovn.v8i8(<8 x i16>) nounwind readnone
218declare <4 x i16> @llvm.arm.neon.vmovn.v4i16(<4 x i32>) nounwind readnone
219declare <2 x i32> @llvm.arm.neon.vmovn.v2i32(<2 x i64>) nounwind readnone
220
221define <8 x i8> @vqmovns16(<8 x i16>* %A) nounwind {
222;CHECK: vqmovns16:
223;CHECK: vqmovn.s16
224 %tmp1 = load <8 x i16>* %A
225 %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovns.v8i8(<8 x i16> %tmp1)
226 ret <8 x i8> %tmp2
227}
228
229define <4 x i16> @vqmovns32(<4 x i32>* %A) nounwind {
230;CHECK: vqmovns32:
231;CHECK: vqmovn.s32
232 %tmp1 = load <4 x i32>* %A
233 %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovns.v4i16(<4 x i32> %tmp1)
234 ret <4 x i16> %tmp2
235}
236
237define <2 x i32> @vqmovns64(<2 x i64>* %A) nounwind {
238;CHECK: vqmovns64:
239;CHECK: vqmovn.s64
240 %tmp1 = load <2 x i64>* %A
241 %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovns.v2i32(<2 x i64> %tmp1)
242 ret <2 x i32> %tmp2
243}
244
245define <8 x i8> @vqmovnu16(<8 x i16>* %A) nounwind {
246;CHECK: vqmovnu16:
247;CHECK: vqmovn.u16
248 %tmp1 = load <8 x i16>* %A
249 %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovnu.v8i8(<8 x i16> %tmp1)
250 ret <8 x i8> %tmp2
251}
252
253define <4 x i16> @vqmovnu32(<4 x i32>* %A) nounwind {
254;CHECK: vqmovnu32:
255;CHECK: vqmovn.u32
256 %tmp1 = load <4 x i32>* %A
257 %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovnu.v4i16(<4 x i32> %tmp1)
258 ret <4 x i16> %tmp2
259}
260
261define <2 x i32> @vqmovnu64(<2 x i64>* %A) nounwind {
262;CHECK: vqmovnu64:
263;CHECK: vqmovn.u64
264 %tmp1 = load <2 x i64>* %A
265 %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovnu.v2i32(<2 x i64> %tmp1)
266 ret <2 x i32> %tmp2
267}
268
269define <8 x i8> @vqmovuns16(<8 x i16>* %A) nounwind {
270;CHECK: vqmovuns16:
271;CHECK: vqmovun.s16
272 %tmp1 = load <8 x i16>* %A
273 %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovnsu.v8i8(<8 x i16> %tmp1)
274 ret <8 x i8> %tmp2
275}
276
277define <4 x i16> @vqmovuns32(<4 x i32>* %A) nounwind {
278;CHECK: vqmovuns32:
279;CHECK: vqmovun.s32
280 %tmp1 = load <4 x i32>* %A
281 %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovnsu.v4i16(<4 x i32> %tmp1)
282 ret <4 x i16> %tmp2
283}
284
285define <2 x i32> @vqmovuns64(<2 x i64>* %A) nounwind {
286;CHECK: vqmovuns64:
287;CHECK: vqmovun.s64
288 %tmp1 = load <2 x i64>* %A
289 %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovnsu.v2i32(<2 x i64> %tmp1)
290 ret <2 x i32> %tmp2
291}
292
293declare <8 x i8> @llvm.arm.neon.vqmovns.v8i8(<8 x i16>) nounwind readnone
294declare <4 x i16> @llvm.arm.neon.vqmovns.v4i16(<4 x i32>) nounwind readnone
295declare <2 x i32> @llvm.arm.neon.vqmovns.v2i32(<2 x i64>) nounwind readnone
296
297declare <8 x i8> @llvm.arm.neon.vqmovnu.v8i8(<8 x i16>) nounwind readnone
298declare <4 x i16> @llvm.arm.neon.vqmovnu.v4i16(<4 x i32>) nounwind readnone
299declare <2 x i32> @llvm.arm.neon.vqmovnu.v2i32(<2 x i64>) nounwind readnone
300
301declare <8 x i8> @llvm.arm.neon.vqmovnsu.v8i8(<8 x i16>) nounwind readnone
302declare <4 x i16> @llvm.arm.neon.vqmovnsu.v4i16(<4 x i32>) nounwind readnone
303declare <2 x i32> @llvm.arm.neon.vqmovnsu.v2i32(<2 x i64>) nounwind readnone