Fix part 1 of pr4682. PICADD is a 16-bit instruction even in thumb2 mode.
[llvm/avr.git] / test / CodeGen / ARM / vshift.ll
blob8c5c4aad18d83b7668ce5bc3966998ce6c12a878
1 ; RUN: llvm-as < %s | llc -march=arm -mattr=+neon > %t
2 ; RUN: grep {vshl\\.s8} %t | count 2
3 ; RUN: grep {vshl\\.s16} %t | count 2
4 ; RUN: grep {vshl\\.s32} %t | count 2
5 ; RUN: grep {vshl\\.s64} %t | count 2
6 ; RUN: grep {vshl\\.u8} %t | count 4
7 ; RUN: grep {vshl\\.u16} %t | count 4
8 ; RUN: grep {vshl\\.u32} %t | count 4
9 ; RUN: grep {vshl\\.u64} %t | count 4
10 ; RUN: grep {vshl\\.i8} %t | count 2
11 ; RUN: grep {vshl\\.i16} %t | count 2
12 ; RUN: grep {vshl\\.i32} %t | count 2
13 ; RUN: grep {vshl\\.i64} %t | count 2
14 ; RUN: grep {vshr\\.u8} %t | count 2
15 ; RUN: grep {vshr\\.u16} %t | count 2
16 ; RUN: grep {vshr\\.u32} %t | count 2
17 ; RUN: grep {vshr\\.u64} %t | count 2
18 ; RUN: grep {vshr\\.s8} %t | count 2
19 ; RUN: grep {vshr\\.s16} %t | count 2
20 ; RUN: grep {vshr\\.s32} %t | count 2
21 ; RUN: grep {vshr\\.s64} %t | count 2
22 ; RUN: grep {vneg\\.s8} %t | count 4
23 ; RUN: grep {vneg\\.s16} %t | count 4
24 ; RUN: grep {vneg\\.s32} %t | count 4
25 ; RUN: grep {vsub\\.i64} %t | count 4
27 define <8 x i8> @vshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
28         %tmp1 = load <8 x i8>* %A
29         %tmp2 = load <8 x i8>* %B
30         %tmp3 = shl <8 x i8> %tmp1, %tmp2
31         ret <8 x i8> %tmp3
34 define <4 x i16> @vshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
35         %tmp1 = load <4 x i16>* %A
36         %tmp2 = load <4 x i16>* %B
37         %tmp3 = shl <4 x i16> %tmp1, %tmp2
38         ret <4 x i16> %tmp3
41 define <2 x i32> @vshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
42         %tmp1 = load <2 x i32>* %A
43         %tmp2 = load <2 x i32>* %B
44         %tmp3 = shl <2 x i32> %tmp1, %tmp2
45         ret <2 x i32> %tmp3
48 define <1 x i64> @vshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
49         %tmp1 = load <1 x i64>* %A
50         %tmp2 = load <1 x i64>* %B
51         %tmp3 = shl <1 x i64> %tmp1, %tmp2
52         ret <1 x i64> %tmp3
55 define <8 x i8> @vshli8(<8 x i8>* %A) nounwind {
56         %tmp1 = load <8 x i8>* %A
57         %tmp2 = shl <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
58         ret <8 x i8> %tmp2
61 define <4 x i16> @vshli16(<4 x i16>* %A) nounwind {
62         %tmp1 = load <4 x i16>* %A
63         %tmp2 = shl <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 >
64         ret <4 x i16> %tmp2
67 define <2 x i32> @vshli32(<2 x i32>* %A) nounwind {
68         %tmp1 = load <2 x i32>* %A
69         %tmp2 = shl <2 x i32> %tmp1, < i32 31, i32 31 >
70         ret <2 x i32> %tmp2
73 define <1 x i64> @vshli64(<1 x i64>* %A) nounwind {
74         %tmp1 = load <1 x i64>* %A
75         %tmp2 = shl <1 x i64> %tmp1, < i64 63 >
76         ret <1 x i64> %tmp2
79 define <16 x i8> @vshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
80         %tmp1 = load <16 x i8>* %A
81         %tmp2 = load <16 x i8>* %B
82         %tmp3 = shl <16 x i8> %tmp1, %tmp2
83         ret <16 x i8> %tmp3
86 define <8 x i16> @vshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
87         %tmp1 = load <8 x i16>* %A
88         %tmp2 = load <8 x i16>* %B
89         %tmp3 = shl <8 x i16> %tmp1, %tmp2
90         ret <8 x i16> %tmp3
93 define <4 x i32> @vshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
94         %tmp1 = load <4 x i32>* %A
95         %tmp2 = load <4 x i32>* %B
96         %tmp3 = shl <4 x i32> %tmp1, %tmp2
97         ret <4 x i32> %tmp3
100 define <2 x i64> @vshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
101         %tmp1 = load <2 x i64>* %A
102         %tmp2 = load <2 x i64>* %B
103         %tmp3 = shl <2 x i64> %tmp1, %tmp2
104         ret <2 x i64> %tmp3
107 define <16 x i8> @vshlQi8(<16 x i8>* %A) nounwind {
108         %tmp1 = load <16 x i8>* %A
109         %tmp2 = shl <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
110         ret <16 x i8> %tmp2
113 define <8 x i16> @vshlQi16(<8 x i16>* %A) nounwind {
114         %tmp1 = load <8 x i16>* %A
115         %tmp2 = shl <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >
116         ret <8 x i16> %tmp2
119 define <4 x i32> @vshlQi32(<4 x i32>* %A) nounwind {
120         %tmp1 = load <4 x i32>* %A
121         %tmp2 = shl <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 >
122         ret <4 x i32> %tmp2
125 define <2 x i64> @vshlQi64(<2 x i64>* %A) nounwind {
126         %tmp1 = load <2 x i64>* %A
127         %tmp2 = shl <2 x i64> %tmp1, < i64 63, i64 63 >
128         ret <2 x i64> %tmp2
131 define <8 x i8> @vlshru8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
132         %tmp1 = load <8 x i8>* %A
133         %tmp2 = load <8 x i8>* %B
134         %tmp3 = lshr <8 x i8> %tmp1, %tmp2
135         ret <8 x i8> %tmp3
138 define <4 x i16> @vlshru16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
139         %tmp1 = load <4 x i16>* %A
140         %tmp2 = load <4 x i16>* %B
141         %tmp3 = lshr <4 x i16> %tmp1, %tmp2
142         ret <4 x i16> %tmp3
145 define <2 x i32> @vlshru32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
146         %tmp1 = load <2 x i32>* %A
147         %tmp2 = load <2 x i32>* %B
148         %tmp3 = lshr <2 x i32> %tmp1, %tmp2
149         ret <2 x i32> %tmp3
152 define <1 x i64> @vlshru64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
153         %tmp1 = load <1 x i64>* %A
154         %tmp2 = load <1 x i64>* %B
155         %tmp3 = lshr <1 x i64> %tmp1, %tmp2
156         ret <1 x i64> %tmp3
159 define <8 x i8> @vlshri8(<8 x i8>* %A) nounwind {
160         %tmp1 = load <8 x i8>* %A
161         %tmp2 = lshr <8 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
162         ret <8 x i8> %tmp2
165 define <4 x i16> @vlshri16(<4 x i16>* %A) nounwind {
166         %tmp1 = load <4 x i16>* %A
167         %tmp2 = lshr <4 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16 >
168         ret <4 x i16> %tmp2
171 define <2 x i32> @vlshri32(<2 x i32>* %A) nounwind {
172         %tmp1 = load <2 x i32>* %A
173         %tmp2 = lshr <2 x i32> %tmp1, < i32 32, i32 32 >
174         ret <2 x i32> %tmp2
177 define <1 x i64> @vlshri64(<1 x i64>* %A) nounwind {
178         %tmp1 = load <1 x i64>* %A
179         %tmp2 = lshr <1 x i64> %tmp1, < i64 64 >
180         ret <1 x i64> %tmp2
183 define <16 x i8> @vlshrQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
184         %tmp1 = load <16 x i8>* %A
185         %tmp2 = load <16 x i8>* %B
186         %tmp3 = lshr <16 x i8> %tmp1, %tmp2
187         ret <16 x i8> %tmp3
190 define <8 x i16> @vlshrQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
191         %tmp1 = load <8 x i16>* %A
192         %tmp2 = load <8 x i16>* %B
193         %tmp3 = lshr <8 x i16> %tmp1, %tmp2
194         ret <8 x i16> %tmp3
197 define <4 x i32> @vlshrQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
198         %tmp1 = load <4 x i32>* %A
199         %tmp2 = load <4 x i32>* %B
200         %tmp3 = lshr <4 x i32> %tmp1, %tmp2
201         ret <4 x i32> %tmp3
204 define <2 x i64> @vlshrQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
205         %tmp1 = load <2 x i64>* %A
206         %tmp2 = load <2 x i64>* %B
207         %tmp3 = lshr <2 x i64> %tmp1, %tmp2
208         ret <2 x i64> %tmp3
211 define <16 x i8> @vlshrQi8(<16 x i8>* %A) nounwind {
212         %tmp1 = load <16 x i8>* %A
213         %tmp2 = lshr <16 x i8> %tmp1, < 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 >
214         ret <16 x i8> %tmp2
217 define <8 x i16> @vlshrQi16(<8 x i16>* %A) nounwind {
218         %tmp1 = load <8 x i16>* %A
219         %tmp2 = lshr <8 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 >
220         ret <8 x i16> %tmp2
223 define <4 x i32> @vlshrQi32(<4 x i32>* %A) nounwind {
224         %tmp1 = load <4 x i32>* %A
225         %tmp2 = lshr <4 x i32> %tmp1, < i32 32, i32 32, i32 32, i32 32 >
226         ret <4 x i32> %tmp2
229 define <2 x i64> @vlshrQi64(<2 x i64>* %A) nounwind {
230         %tmp1 = load <2 x i64>* %A
231         %tmp2 = lshr <2 x i64> %tmp1, < i64 64, i64 64 >
232         ret <2 x i64> %tmp2
235 define <8 x i8> @vashrs8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
236         %tmp1 = load <8 x i8>* %A
237         %tmp2 = load <8 x i8>* %B
238         %tmp3 = ashr <8 x i8> %tmp1, %tmp2
239         ret <8 x i8> %tmp3
242 define <4 x i16> @vashrs16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
243         %tmp1 = load <4 x i16>* %A
244         %tmp2 = load <4 x i16>* %B
245         %tmp3 = ashr <4 x i16> %tmp1, %tmp2
246         ret <4 x i16> %tmp3
249 define <2 x i32> @vashrs32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
250         %tmp1 = load <2 x i32>* %A
251         %tmp2 = load <2 x i32>* %B
252         %tmp3 = ashr <2 x i32> %tmp1, %tmp2
253         ret <2 x i32> %tmp3
256 define <1 x i64> @vashrs64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
257         %tmp1 = load <1 x i64>* %A
258         %tmp2 = load <1 x i64>* %B
259         %tmp3 = ashr <1 x i64> %tmp1, %tmp2
260         ret <1 x i64> %tmp3
263 define <8 x i8> @vashri8(<8 x i8>* %A) nounwind {
264         %tmp1 = load <8 x i8>* %A
265         %tmp2 = ashr <8 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
266         ret <8 x i8> %tmp2
269 define <4 x i16> @vashri16(<4 x i16>* %A) nounwind {
270         %tmp1 = load <4 x i16>* %A
271         %tmp2 = ashr <4 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16 >
272         ret <4 x i16> %tmp2
275 define <2 x i32> @vashri32(<2 x i32>* %A) nounwind {
276         %tmp1 = load <2 x i32>* %A
277         %tmp2 = ashr <2 x i32> %tmp1, < i32 32, i32 32 >
278         ret <2 x i32> %tmp2
281 define <1 x i64> @vashri64(<1 x i64>* %A) nounwind {
282         %tmp1 = load <1 x i64>* %A
283         %tmp2 = ashr <1 x i64> %tmp1, < i64 64 >
284         ret <1 x i64> %tmp2
287 define <16 x i8> @vashrQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
288         %tmp1 = load <16 x i8>* %A
289         %tmp2 = load <16 x i8>* %B
290         %tmp3 = ashr <16 x i8> %tmp1, %tmp2
291         ret <16 x i8> %tmp3
294 define <8 x i16> @vashrQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
295         %tmp1 = load <8 x i16>* %A
296         %tmp2 = load <8 x i16>* %B
297         %tmp3 = ashr <8 x i16> %tmp1, %tmp2
298         ret <8 x i16> %tmp3
301 define <4 x i32> @vashrQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
302         %tmp1 = load <4 x i32>* %A
303         %tmp2 = load <4 x i32>* %B
304         %tmp3 = ashr <4 x i32> %tmp1, %tmp2
305         ret <4 x i32> %tmp3
308 define <2 x i64> @vashrQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
309         %tmp1 = load <2 x i64>* %A
310         %tmp2 = load <2 x i64>* %B
311         %tmp3 = ashr <2 x i64> %tmp1, %tmp2
312         ret <2 x i64> %tmp3
315 define <16 x i8> @vashrQi8(<16 x i8>* %A) nounwind {
316         %tmp1 = load <16 x i8>* %A
317         %tmp2 = ashr <16 x i8> %tmp1, < 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 >
318         ret <16 x i8> %tmp2
321 define <8 x i16> @vashrQi16(<8 x i16>* %A) nounwind {
322         %tmp1 = load <8 x i16>* %A
323         %tmp2 = ashr <8 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 >
324         ret <8 x i16> %tmp2
327 define <4 x i32> @vashrQi32(<4 x i32>* %A) nounwind {
328         %tmp1 = load <4 x i32>* %A
329         %tmp2 = ashr <4 x i32> %tmp1, < i32 32, i32 32, i32 32, i32 32 >
330         ret <4 x i32> %tmp2
333 define <2 x i64> @vashrQi64(<2 x i64>* %A) nounwind {
334         %tmp1 = load <2 x i64>* %A
335         %tmp2 = ashr <2 x i64> %tmp1, < i64 64, i64 64 >
336         ret <2 x i64> %tmp2