Convert more NEON tests to use FileCheck.
[oota-llvm.git] / test / CodeGen / ARM / vrshl.ll
1 ; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
2
3 define <8 x i8> @vrshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
4 ;CHECK: vrshls8:
5 ;CHECK: vrshl.s8
6         %tmp1 = load <8 x i8>* %A
7         %tmp2 = load <8 x i8>* %B
8         %tmp3 = call <8 x i8> @llvm.arm.neon.vrshifts.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
9         ret <8 x i8> %tmp3
10 }
11
12 define <4 x i16> @vrshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
13 ;CHECK: vrshls16:
14 ;CHECK: vrshl.s16
15         %tmp1 = load <4 x i16>* %A
16         %tmp2 = load <4 x i16>* %B
17         %tmp3 = call <4 x i16> @llvm.arm.neon.vrshifts.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
18         ret <4 x i16> %tmp3
19 }
20
21 define <2 x i32> @vrshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
22 ;CHECK: vrshls32:
23 ;CHECK: vrshl.s32
24         %tmp1 = load <2 x i32>* %A
25         %tmp2 = load <2 x i32>* %B
26         %tmp3 = call <2 x i32> @llvm.arm.neon.vrshifts.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
27         ret <2 x i32> %tmp3
28 }
29
30 define <1 x i64> @vrshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
31 ;CHECK: vrshls64:
32 ;CHECK: vrshl.s64
33         %tmp1 = load <1 x i64>* %A
34         %tmp2 = load <1 x i64>* %B
35         %tmp3 = call <1 x i64> @llvm.arm.neon.vrshifts.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
36         ret <1 x i64> %tmp3
37 }
38
39 define <8 x i8> @vrshlu8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
40 ;CHECK: vrshlu8:
41 ;CHECK: vrshl.u8
42         %tmp1 = load <8 x i8>* %A
43         %tmp2 = load <8 x i8>* %B
44         %tmp3 = call <8 x i8> @llvm.arm.neon.vrshiftu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
45         ret <8 x i8> %tmp3
46 }
47
48 define <4 x i16> @vrshlu16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
49 ;CHECK: vrshlu16:
50 ;CHECK: vrshl.u16
51         %tmp1 = load <4 x i16>* %A
52         %tmp2 = load <4 x i16>* %B
53         %tmp3 = call <4 x i16> @llvm.arm.neon.vrshiftu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
54         ret <4 x i16> %tmp3
55 }
56
57 define <2 x i32> @vrshlu32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
58 ;CHECK: vrshlu32:
59 ;CHECK: vrshl.u32
60         %tmp1 = load <2 x i32>* %A
61         %tmp2 = load <2 x i32>* %B
62         %tmp3 = call <2 x i32> @llvm.arm.neon.vrshiftu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
63         ret <2 x i32> %tmp3
64 }
65
66 define <1 x i64> @vrshlu64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
67 ;CHECK: vrshlu64:
68 ;CHECK: vrshl.u64
69         %tmp1 = load <1 x i64>* %A
70         %tmp2 = load <1 x i64>* %B
71         %tmp3 = call <1 x i64> @llvm.arm.neon.vrshiftu.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
72         ret <1 x i64> %tmp3
73 }
74
75 define <16 x i8> @vrshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
76 ;CHECK: vrshlQs8:
77 ;CHECK: vrshl.s8
78         %tmp1 = load <16 x i8>* %A
79         %tmp2 = load <16 x i8>* %B
80         %tmp3 = call <16 x i8> @llvm.arm.neon.vrshifts.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
81         ret <16 x i8> %tmp3
82 }
83
84 define <8 x i16> @vrshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
85 ;CHECK: vrshlQs16:
86 ;CHECK: vrshl.s16
87         %tmp1 = load <8 x i16>* %A
88         %tmp2 = load <8 x i16>* %B
89         %tmp3 = call <8 x i16> @llvm.arm.neon.vrshifts.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
90         ret <8 x i16> %tmp3
91 }
92
93 define <4 x i32> @vrshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
94 ;CHECK: vrshlQs32:
95 ;CHECK: vrshl.s32
96         %tmp1 = load <4 x i32>* %A
97         %tmp2 = load <4 x i32>* %B
98         %tmp3 = call <4 x i32> @llvm.arm.neon.vrshifts.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
99         ret <4 x i32> %tmp3
100 }
101
102 define <2 x i64> @vrshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
103 ;CHECK: vrshlQs64:
104 ;CHECK: vrshl.s64
105         %tmp1 = load <2 x i64>* %A
106         %tmp2 = load <2 x i64>* %B
107         %tmp3 = call <2 x i64> @llvm.arm.neon.vrshifts.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
108         ret <2 x i64> %tmp3
109 }
110
111 define <16 x i8> @vrshlQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
112 ;CHECK: vrshlQu8:
113 ;CHECK: vrshl.u8
114         %tmp1 = load <16 x i8>* %A
115         %tmp2 = load <16 x i8>* %B
116         %tmp3 = call <16 x i8> @llvm.arm.neon.vrshiftu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
117         ret <16 x i8> %tmp3
118 }
119
120 define <8 x i16> @vrshlQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
121 ;CHECK: vrshlQu16:
122 ;CHECK: vrshl.u16
123         %tmp1 = load <8 x i16>* %A
124         %tmp2 = load <8 x i16>* %B
125         %tmp3 = call <8 x i16> @llvm.arm.neon.vrshiftu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
126         ret <8 x i16> %tmp3
127 }
128
129 define <4 x i32> @vrshlQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
130 ;CHECK: vrshlQu32:
131 ;CHECK: vrshl.u32
132         %tmp1 = load <4 x i32>* %A
133         %tmp2 = load <4 x i32>* %B
134         %tmp3 = call <4 x i32> @llvm.arm.neon.vrshiftu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
135         ret <4 x i32> %tmp3
136 }
137
138 define <2 x i64> @vrshlQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
139 ;CHECK: vrshlQu64:
140 ;CHECK: vrshl.u64
141         %tmp1 = load <2 x i64>* %A
142         %tmp2 = load <2 x i64>* %B
143         %tmp3 = call <2 x i64> @llvm.arm.neon.vrshiftu.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
144         ret <2 x i64> %tmp3
145 }
146
147 define <8 x i8> @vrshrs8(<8 x i8>* %A) nounwind {
148 ;CHECK: vrshrs8:
149 ;CHECK: vrshr.s8
150         %tmp1 = load <8 x i8>* %A
151         %tmp2 = call <8 x i8> @llvm.arm.neon.vrshifts.v8i8(<8 x i8> %tmp1, <8 x i8> < i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8 >)
152         ret <8 x i8> %tmp2
153 }
154
155 define <4 x i16> @vrshrs16(<4 x i16>* %A) nounwind {
156 ;CHECK: vrshrs16:
157 ;CHECK: vrshr.s16
158         %tmp1 = load <4 x i16>* %A
159         %tmp2 = call <4 x i16> @llvm.arm.neon.vrshifts.v4i16(<4 x i16> %tmp1, <4 x i16> < i16 -16, i16 -16, i16 -16, i16 -16 >)
160         ret <4 x i16> %tmp2
161 }
162
163 define <2 x i32> @vrshrs32(<2 x i32>* %A) nounwind {
164 ;CHECK: vrshrs32:
165 ;CHECK: vrshr.s32
166         %tmp1 = load <2 x i32>* %A
167         %tmp2 = call <2 x i32> @llvm.arm.neon.vrshifts.v2i32(<2 x i32> %tmp1, <2 x i32> < i32 -32, i32 -32 >)
168         ret <2 x i32> %tmp2
169 }
170
171 define <1 x i64> @vrshrs64(<1 x i64>* %A) nounwind {
172 ;CHECK: vrshrs64:
173 ;CHECK: vrshr.s64
174         %tmp1 = load <1 x i64>* %A
175         %tmp2 = call <1 x i64> @llvm.arm.neon.vrshifts.v1i64(<1 x i64> %tmp1, <1 x i64> < i64 -64 >)
176         ret <1 x i64> %tmp2
177 }
178
179 define <8 x i8> @vrshru8(<8 x i8>* %A) nounwind {
180 ;CHECK: vrshru8:
181 ;CHECK: vrshr.u8
182         %tmp1 = load <8 x i8>* %A
183         %tmp2 = call <8 x i8> @llvm.arm.neon.vrshiftu.v8i8(<8 x i8> %tmp1, <8 x i8> < i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8, i8 -8 >)
184         ret <8 x i8> %tmp2
185 }
186
187 define <4 x i16> @vrshru16(<4 x i16>* %A) nounwind {
188 ;CHECK: vrshru16:
189 ;CHECK: vrshr.u16
190         %tmp1 = load <4 x i16>* %A
191         %tmp2 = call <4 x i16> @llvm.arm.neon.vrshiftu.v4i16(<4 x i16> %tmp1, <4 x i16> < i16 -16, i16 -16, i16 -16, i16 -16 >)
192         ret <4 x i16> %tmp2
193 }
194
195 define <2 x i32> @vrshru32(<2 x i32>* %A) nounwind {
196 ;CHECK: vrshru32:
197 ;CHECK: vrshr.u32
198         %tmp1 = load <2 x i32>* %A
199         %tmp2 = call <2 x i32> @llvm.arm.neon.vrshiftu.v2i32(<2 x i32> %tmp1, <2 x i32> < i32 -32, i32 -32 >)
200         ret <2 x i32> %tmp2
201 }
202
203 define <1 x i64> @vrshru64(<1 x i64>* %A) nounwind {
204 ;CHECK: vrshru64:
205 ;CHECK: vrshr.u64
206         %tmp1 = load <1 x i64>* %A
207         %tmp2 = call <1 x i64> @llvm.arm.neon.vrshiftu.v1i64(<1 x i64> %tmp1, <1 x i64> < i64 -64 >)
208         ret <1 x i64> %tmp2
209 }
210
211 define <16 x i8> @vrshrQs8(<16 x i8>* %A) nounwind {
212 ;CHECK: vrshrQs8:
213 ;CHECK: vrshr.s8
214         %tmp1 = load <16 x i8>* %A
215         %tmp2 = call <16 x i8> @llvm.arm.neon.vrshifts.v16i8(<16 x i8> %tmp1, <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 >)
216         ret <16 x i8> %tmp2
217 }
218
219 define <8 x i16> @vrshrQs16(<8 x i16>* %A) nounwind {
220 ;CHECK: vrshrQs16:
221 ;CHECK: vrshr.s16
222         %tmp1 = load <8 x i16>* %A
223         %tmp2 = call <8 x i16> @llvm.arm.neon.vrshifts.v8i16(<8 x i16> %tmp1, <8 x i16> < i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16 >)
224         ret <8 x i16> %tmp2
225 }
226
227 define <4 x i32> @vrshrQs32(<4 x i32>* %A) nounwind {
228 ;CHECK: vrshrQs32:
229 ;CHECK: vrshr.s32
230         %tmp1 = load <4 x i32>* %A
231         %tmp2 = call <4 x i32> @llvm.arm.neon.vrshifts.v4i32(<4 x i32> %tmp1, <4 x i32> < i32 -32, i32 -32, i32 -32, i32 -32 >)
232         ret <4 x i32> %tmp2
233 }
234
235 define <2 x i64> @vrshrQs64(<2 x i64>* %A) nounwind {
236 ;CHECK: vrshrQs64:
237 ;CHECK: vrshr.s64
238         %tmp1 = load <2 x i64>* %A
239         %tmp2 = call <2 x i64> @llvm.arm.neon.vrshifts.v2i64(<2 x i64> %tmp1, <2 x i64> < i64 -64, i64 -64 >)
240         ret <2 x i64> %tmp2
241 }
242
243 define <16 x i8> @vrshrQu8(<16 x i8>* %A) nounwind {
244 ;CHECK: vrshrQu8:
245 ;CHECK: vrshr.u8
246         %tmp1 = load <16 x i8>* %A
247         %tmp2 = call <16 x i8> @llvm.arm.neon.vrshiftu.v16i8(<16 x i8> %tmp1, <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 >)
248         ret <16 x i8> %tmp2
249 }
250
251 define <8 x i16> @vrshrQu16(<8 x i16>* %A) nounwind {
252 ;CHECK: vrshrQu16:
253 ;CHECK: vrshr.u16
254         %tmp1 = load <8 x i16>* %A
255         %tmp2 = call <8 x i16> @llvm.arm.neon.vrshiftu.v8i16(<8 x i16> %tmp1, <8 x i16> < i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16, i16 -16 >)
256         ret <8 x i16> %tmp2
257 }
258
259 define <4 x i32> @vrshrQu32(<4 x i32>* %A) nounwind {
260 ;CHECK: vrshrQu32:
261 ;CHECK: vrshr.u32
262         %tmp1 = load <4 x i32>* %A
263         %tmp2 = call <4 x i32> @llvm.arm.neon.vrshiftu.v4i32(<4 x i32> %tmp1, <4 x i32> < i32 -32, i32 -32, i32 -32, i32 -32 >)
264         ret <4 x i32> %tmp2
265 }
266
267 define <2 x i64> @vrshrQu64(<2 x i64>* %A) nounwind {
268 ;CHECK: vrshrQu64:
269 ;CHECK: vrshr.u64
270         %tmp1 = load <2 x i64>* %A
271         %tmp2 = call <2 x i64> @llvm.arm.neon.vrshiftu.v2i64(<2 x i64> %tmp1, <2 x i64> < i64 -64, i64 -64 >)
272         ret <2 x i64> %tmp2
273 }
274
275 declare <8 x i8>  @llvm.arm.neon.vrshifts.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
276 declare <4 x i16> @llvm.arm.neon.vrshifts.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
277 declare <2 x i32> @llvm.arm.neon.vrshifts.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
278 declare <1 x i64> @llvm.arm.neon.vrshifts.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
279
280 declare <8 x i8>  @llvm.arm.neon.vrshiftu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
281 declare <4 x i16> @llvm.arm.neon.vrshiftu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
282 declare <2 x i32> @llvm.arm.neon.vrshiftu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
283 declare <1 x i64> @llvm.arm.neon.vrshiftu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
284
285 declare <16 x i8> @llvm.arm.neon.vrshifts.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
286 declare <8 x i16> @llvm.arm.neon.vrshifts.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
287 declare <4 x i32> @llvm.arm.neon.vrshifts.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
288 declare <2 x i64> @llvm.arm.neon.vrshifts.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
289
290 declare <16 x i8> @llvm.arm.neon.vrshiftu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
291 declare <8 x i16> @llvm.arm.neon.vrshiftu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
292 declare <4 x i32> @llvm.arm.neon.vrshiftu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
293 declare <2 x i64> @llvm.arm.neon.vrshiftu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone