Add explicit -mtriple=arm-unknown to llvm/test/CodeGen/ARM/disable-tail-calls.ll...
[oota-llvm.git] / test / CodeGen / ARM / vbits.ll
1 ; RUN: llc -mtriple=arm-eabi -mattr=+neon -mcpu=cortex-a8 %s -o - | FileCheck %s
2
3 define <8 x i8> @v_andi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
4 ;CHECK-LABEL: v_andi8:
5 ;CHECK: vand
6         %tmp1 = load <8 x i8>, <8 x i8>* %A
7         %tmp2 = load <8 x i8>, <8 x i8>* %B
8         %tmp3 = and <8 x i8> %tmp1, %tmp2
9         ret <8 x i8> %tmp3
10 }
11
12 define <4 x i16> @v_andi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
13 ;CHECK-LABEL: v_andi16:
14 ;CHECK: vand
15         %tmp1 = load <4 x i16>, <4 x i16>* %A
16         %tmp2 = load <4 x i16>, <4 x i16>* %B
17         %tmp3 = and <4 x i16> %tmp1, %tmp2
18         ret <4 x i16> %tmp3
19 }
20
21 define <2 x i32> @v_andi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
22 ;CHECK-LABEL: v_andi32:
23 ;CHECK: vand
24         %tmp1 = load <2 x i32>, <2 x i32>* %A
25         %tmp2 = load <2 x i32>, <2 x i32>* %B
26         %tmp3 = and <2 x i32> %tmp1, %tmp2
27         ret <2 x i32> %tmp3
28 }
29
30 define <1 x i64> @v_andi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
31 ;CHECK-LABEL: v_andi64:
32 ;CHECK: vand
33         %tmp1 = load <1 x i64>, <1 x i64>* %A
34         %tmp2 = load <1 x i64>, <1 x i64>* %B
35         %tmp3 = and <1 x i64> %tmp1, %tmp2
36         ret <1 x i64> %tmp3
37 }
38
39 define <16 x i8> @v_andQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
40 ;CHECK-LABEL: v_andQi8:
41 ;CHECK: vand
42         %tmp1 = load <16 x i8>, <16 x i8>* %A
43         %tmp2 = load <16 x i8>, <16 x i8>* %B
44         %tmp3 = and <16 x i8> %tmp1, %tmp2
45         ret <16 x i8> %tmp3
46 }
47
48 define <8 x i16> @v_andQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
49 ;CHECK-LABEL: v_andQi16:
50 ;CHECK: vand
51         %tmp1 = load <8 x i16>, <8 x i16>* %A
52         %tmp2 = load <8 x i16>, <8 x i16>* %B
53         %tmp3 = and <8 x i16> %tmp1, %tmp2
54         ret <8 x i16> %tmp3
55 }
56
57 define <4 x i32> @v_andQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
58 ;CHECK-LABEL: v_andQi32:
59 ;CHECK: vand
60         %tmp1 = load <4 x i32>, <4 x i32>* %A
61         %tmp2 = load <4 x i32>, <4 x i32>* %B
62         %tmp3 = and <4 x i32> %tmp1, %tmp2
63         ret <4 x i32> %tmp3
64 }
65
66 define <2 x i64> @v_andQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
67 ;CHECK-LABEL: v_andQi64:
68 ;CHECK: vand
69         %tmp1 = load <2 x i64>, <2 x i64>* %A
70         %tmp2 = load <2 x i64>, <2 x i64>* %B
71         %tmp3 = and <2 x i64> %tmp1, %tmp2
72         ret <2 x i64> %tmp3
73 }
74
75 define <8 x i8> @v_bici8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
76 ;CHECK-LABEL: v_bici8:
77 ;CHECK: vbic
78         %tmp1 = load <8 x i8>, <8 x i8>* %A
79         %tmp2 = load <8 x i8>, <8 x i8>* %B
80         %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
81         %tmp4 = and <8 x i8> %tmp1, %tmp3
82         ret <8 x i8> %tmp4
83 }
84
85 define <4 x i16> @v_bici16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
86 ;CHECK-LABEL: v_bici16:
87 ;CHECK: vbic
88         %tmp1 = load <4 x i16>, <4 x i16>* %A
89         %tmp2 = load <4 x i16>, <4 x i16>* %B
90         %tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
91         %tmp4 = and <4 x i16> %tmp1, %tmp3
92         ret <4 x i16> %tmp4
93 }
94
95 define <2 x i32> @v_bici32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
96 ;CHECK-LABEL: v_bici32:
97 ;CHECK: vbic
98         %tmp1 = load <2 x i32>, <2 x i32>* %A
99         %tmp2 = load <2 x i32>, <2 x i32>* %B
100         %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
101         %tmp4 = and <2 x i32> %tmp1, %tmp3
102         ret <2 x i32> %tmp4
103 }
104
105 define <1 x i64> @v_bici64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
106 ;CHECK-LABEL: v_bici64:
107 ;CHECK: vbic
108         %tmp1 = load <1 x i64>, <1 x i64>* %A
109         %tmp2 = load <1 x i64>, <1 x i64>* %B
110         %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
111         %tmp4 = and <1 x i64> %tmp1, %tmp3
112         ret <1 x i64> %tmp4
113 }
114
115 define <16 x i8> @v_bicQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
116 ;CHECK-LABEL: v_bicQi8:
117 ;CHECK: vbic
118         %tmp1 = load <16 x i8>, <16 x i8>* %A
119         %tmp2 = load <16 x i8>, <16 x i8>* %B
120         %tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
121         %tmp4 = and <16 x i8> %tmp1, %tmp3
122         ret <16 x i8> %tmp4
123 }
124
125 define <8 x i16> @v_bicQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
126 ;CHECK-LABEL: v_bicQi16:
127 ;CHECK: vbic
128         %tmp1 = load <8 x i16>, <8 x i16>* %A
129         %tmp2 = load <8 x i16>, <8 x i16>* %B
130         %tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
131         %tmp4 = and <8 x i16> %tmp1, %tmp3
132         ret <8 x i16> %tmp4
133 }
134
135 define <4 x i32> @v_bicQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
136 ;CHECK-LABEL: v_bicQi32:
137 ;CHECK: vbic
138         %tmp1 = load <4 x i32>, <4 x i32>* %A
139         %tmp2 = load <4 x i32>, <4 x i32>* %B
140         %tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
141         %tmp4 = and <4 x i32> %tmp1, %tmp3
142         ret <4 x i32> %tmp4
143 }
144
145 define <2 x i64> @v_bicQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
146 ;CHECK-LABEL: v_bicQi64:
147 ;CHECK: vbic
148         %tmp1 = load <2 x i64>, <2 x i64>* %A
149         %tmp2 = load <2 x i64>, <2 x i64>* %B
150         %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
151         %tmp4 = and <2 x i64> %tmp1, %tmp3
152         ret <2 x i64> %tmp4
153 }
154
155 define <8 x i8> @v_eori8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
156 ;CHECK-LABEL: v_eori8:
157 ;CHECK: veor
158         %tmp1 = load <8 x i8>, <8 x i8>* %A
159         %tmp2 = load <8 x i8>, <8 x i8>* %B
160         %tmp3 = xor <8 x i8> %tmp1, %tmp2
161         ret <8 x i8> %tmp3
162 }
163
164 define <4 x i16> @v_eori16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
165 ;CHECK-LABEL: v_eori16:
166 ;CHECK: veor
167         %tmp1 = load <4 x i16>, <4 x i16>* %A
168         %tmp2 = load <4 x i16>, <4 x i16>* %B
169         %tmp3 = xor <4 x i16> %tmp1, %tmp2
170         ret <4 x i16> %tmp3
171 }
172
173 define <2 x i32> @v_eori32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
174 ;CHECK-LABEL: v_eori32:
175 ;CHECK: veor
176         %tmp1 = load <2 x i32>, <2 x i32>* %A
177         %tmp2 = load <2 x i32>, <2 x i32>* %B
178         %tmp3 = xor <2 x i32> %tmp1, %tmp2
179         ret <2 x i32> %tmp3
180 }
181
182 define <1 x i64> @v_eori64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
183 ;CHECK-LABEL: v_eori64:
184 ;CHECK: veor
185         %tmp1 = load <1 x i64>, <1 x i64>* %A
186         %tmp2 = load <1 x i64>, <1 x i64>* %B
187         %tmp3 = xor <1 x i64> %tmp1, %tmp2
188         ret <1 x i64> %tmp3
189 }
190
191 define <16 x i8> @v_eorQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
192 ;CHECK-LABEL: v_eorQi8:
193 ;CHECK: veor
194         %tmp1 = load <16 x i8>, <16 x i8>* %A
195         %tmp2 = load <16 x i8>, <16 x i8>* %B
196         %tmp3 = xor <16 x i8> %tmp1, %tmp2
197         ret <16 x i8> %tmp3
198 }
199
200 define <8 x i16> @v_eorQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
201 ;CHECK-LABEL: v_eorQi16:
202 ;CHECK: veor
203         %tmp1 = load <8 x i16>, <8 x i16>* %A
204         %tmp2 = load <8 x i16>, <8 x i16>* %B
205         %tmp3 = xor <8 x i16> %tmp1, %tmp2
206         ret <8 x i16> %tmp3
207 }
208
209 define <4 x i32> @v_eorQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
210 ;CHECK-LABEL: v_eorQi32:
211 ;CHECK: veor
212         %tmp1 = load <4 x i32>, <4 x i32>* %A
213         %tmp2 = load <4 x i32>, <4 x i32>* %B
214         %tmp3 = xor <4 x i32> %tmp1, %tmp2
215         ret <4 x i32> %tmp3
216 }
217
218 define <2 x i64> @v_eorQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
219 ;CHECK-LABEL: v_eorQi64:
220 ;CHECK: veor
221         %tmp1 = load <2 x i64>, <2 x i64>* %A
222         %tmp2 = load <2 x i64>, <2 x i64>* %B
223         %tmp3 = xor <2 x i64> %tmp1, %tmp2
224         ret <2 x i64> %tmp3
225 }
226
227 define <8 x i8> @v_mvni8(<8 x i8>* %A) nounwind {
228 ;CHECK-LABEL: v_mvni8:
229 ;CHECK: vmvn
230         %tmp1 = load <8 x i8>, <8 x i8>* %A
231         %tmp2 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
232         ret <8 x i8> %tmp2
233 }
234
235 define <4 x i16> @v_mvni16(<4 x i16>* %A) nounwind {
236 ;CHECK-LABEL: v_mvni16:
237 ;CHECK: vmvn
238         %tmp1 = load <4 x i16>, <4 x i16>* %A
239         %tmp2 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
240         ret <4 x i16> %tmp2
241 }
242
243 define <2 x i32> @v_mvni32(<2 x i32>* %A) nounwind {
244 ;CHECK-LABEL: v_mvni32:
245 ;CHECK: vmvn
246         %tmp1 = load <2 x i32>, <2 x i32>* %A
247         %tmp2 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
248         ret <2 x i32> %tmp2
249 }
250
251 define <1 x i64> @v_mvni64(<1 x i64>* %A) nounwind {
252 ;CHECK-LABEL: v_mvni64:
253 ;CHECK: vmvn
254         %tmp1 = load <1 x i64>, <1 x i64>* %A
255         %tmp2 = xor <1 x i64> %tmp1, < i64 -1 >
256         ret <1 x i64> %tmp2
257 }
258
259 define <16 x i8> @v_mvnQi8(<16 x i8>* %A) nounwind {
260 ;CHECK-LABEL: v_mvnQi8:
261 ;CHECK: vmvn
262         %tmp1 = load <16 x i8>, <16 x i8>* %A
263         %tmp2 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
264         ret <16 x i8> %tmp2
265 }
266
267 define <8 x i16> @v_mvnQi16(<8 x i16>* %A) nounwind {
268 ;CHECK-LABEL: v_mvnQi16:
269 ;CHECK: vmvn
270         %tmp1 = load <8 x i16>, <8 x i16>* %A
271         %tmp2 = xor <8 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
272         ret <8 x i16> %tmp2
273 }
274
275 define <4 x i32> @v_mvnQi32(<4 x i32>* %A) nounwind {
276 ;CHECK-LABEL: v_mvnQi32:
277 ;CHECK: vmvn
278         %tmp1 = load <4 x i32>, <4 x i32>* %A
279         %tmp2 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
280         ret <4 x i32> %tmp2
281 }
282
283 define <2 x i64> @v_mvnQi64(<2 x i64>* %A) nounwind {
284 ;CHECK-LABEL: v_mvnQi64:
285 ;CHECK: vmvn
286         %tmp1 = load <2 x i64>, <2 x i64>* %A
287         %tmp2 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
288         ret <2 x i64> %tmp2
289 }
290
291 define <8 x i8> @v_orri8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
292 ;CHECK-LABEL: v_orri8:
293 ;CHECK: vorr
294         %tmp1 = load <8 x i8>, <8 x i8>* %A
295         %tmp2 = load <8 x i8>, <8 x i8>* %B
296         %tmp3 = or <8 x i8> %tmp1, %tmp2
297         ret <8 x i8> %tmp3
298 }
299
300 define <4 x i16> @v_orri16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
301 ;CHECK-LABEL: v_orri16:
302 ;CHECK: vorr
303         %tmp1 = load <4 x i16>, <4 x i16>* %A
304         %tmp2 = load <4 x i16>, <4 x i16>* %B
305         %tmp3 = or <4 x i16> %tmp1, %tmp2
306         ret <4 x i16> %tmp3
307 }
308
309 define <2 x i32> @v_orri32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
310 ;CHECK-LABEL: v_orri32:
311 ;CHECK: vorr
312         %tmp1 = load <2 x i32>, <2 x i32>* %A
313         %tmp2 = load <2 x i32>, <2 x i32>* %B
314         %tmp3 = or <2 x i32> %tmp1, %tmp2
315         ret <2 x i32> %tmp3
316 }
317
318 define <1 x i64> @v_orri64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
319 ;CHECK-LABEL: v_orri64:
320 ;CHECK: vorr
321         %tmp1 = load <1 x i64>, <1 x i64>* %A
322         %tmp2 = load <1 x i64>, <1 x i64>* %B
323         %tmp3 = or <1 x i64> %tmp1, %tmp2
324         ret <1 x i64> %tmp3
325 }
326
327 define <16 x i8> @v_orrQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
328 ;CHECK-LABEL: v_orrQi8:
329 ;CHECK: vorr
330         %tmp1 = load <16 x i8>, <16 x i8>* %A
331         %tmp2 = load <16 x i8>, <16 x i8>* %B
332         %tmp3 = or <16 x i8> %tmp1, %tmp2
333         ret <16 x i8> %tmp3
334 }
335
336 define <8 x i16> @v_orrQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
337 ;CHECK-LABEL: v_orrQi16:
338 ;CHECK: vorr
339         %tmp1 = load <8 x i16>, <8 x i16>* %A
340         %tmp2 = load <8 x i16>, <8 x i16>* %B
341         %tmp3 = or <8 x i16> %tmp1, %tmp2
342         ret <8 x i16> %tmp3
343 }
344
345 define <4 x i32> @v_orrQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
346 ;CHECK-LABEL: v_orrQi32:
347 ;CHECK: vorr
348         %tmp1 = load <4 x i32>, <4 x i32>* %A
349         %tmp2 = load <4 x i32>, <4 x i32>* %B
350         %tmp3 = or <4 x i32> %tmp1, %tmp2
351         ret <4 x i32> %tmp3
352 }
353
354 define <2 x i64> @v_orrQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
355 ;CHECK-LABEL: v_orrQi64:
356 ;CHECK: vorr
357         %tmp1 = load <2 x i64>, <2 x i64>* %A
358         %tmp2 = load <2 x i64>, <2 x i64>* %B
359         %tmp3 = or <2 x i64> %tmp1, %tmp2
360         ret <2 x i64> %tmp3
361 }
362
363 define <8 x i8> @v_orni8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
364 ;CHECK-LABEL: v_orni8:
365 ;CHECK: vorn
366         %tmp1 = load <8 x i8>, <8 x i8>* %A
367         %tmp2 = load <8 x i8>, <8 x i8>* %B
368         %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
369         %tmp4 = or <8 x i8> %tmp1, %tmp3
370         ret <8 x i8> %tmp4
371 }
372
373 define <4 x i16> @v_orni16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
374 ;CHECK-LABEL: v_orni16:
375 ;CHECK: vorn
376         %tmp1 = load <4 x i16>, <4 x i16>* %A
377         %tmp2 = load <4 x i16>, <4 x i16>* %B
378         %tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
379         %tmp4 = or <4 x i16> %tmp1, %tmp3
380         ret <4 x i16> %tmp4
381 }
382
383 define <2 x i32> @v_orni32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
384 ;CHECK-LABEL: v_orni32:
385 ;CHECK: vorn
386         %tmp1 = load <2 x i32>, <2 x i32>* %A
387         %tmp2 = load <2 x i32>, <2 x i32>* %B
388         %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
389         %tmp4 = or <2 x i32> %tmp1, %tmp3
390         ret <2 x i32> %tmp4
391 }
392
393 define <1 x i64> @v_orni64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
394 ;CHECK-LABEL: v_orni64:
395 ;CHECK: vorn
396         %tmp1 = load <1 x i64>, <1 x i64>* %A
397         %tmp2 = load <1 x i64>, <1 x i64>* %B
398         %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
399         %tmp4 = or <1 x i64> %tmp1, %tmp3
400         ret <1 x i64> %tmp4
401 }
402
403 define <16 x i8> @v_ornQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
404 ;CHECK-LABEL: v_ornQi8:
405 ;CHECK: vorn
406         %tmp1 = load <16 x i8>, <16 x i8>* %A
407         %tmp2 = load <16 x i8>, <16 x i8>* %B
408         %tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
409         %tmp4 = or <16 x i8> %tmp1, %tmp3
410         ret <16 x i8> %tmp4
411 }
412
413 define <8 x i16> @v_ornQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
414 ;CHECK-LABEL: v_ornQi16:
415 ;CHECK: vorn
416         %tmp1 = load <8 x i16>, <8 x i16>* %A
417         %tmp2 = load <8 x i16>, <8 x i16>* %B
418         %tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
419         %tmp4 = or <8 x i16> %tmp1, %tmp3
420         ret <8 x i16> %tmp4
421 }
422
423 define <4 x i32> @v_ornQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
424 ;CHECK-LABEL: v_ornQi32:
425 ;CHECK: vorn
426         %tmp1 = load <4 x i32>, <4 x i32>* %A
427         %tmp2 = load <4 x i32>, <4 x i32>* %B
428         %tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
429         %tmp4 = or <4 x i32> %tmp1, %tmp3
430         ret <4 x i32> %tmp4
431 }
432
433 define <2 x i64> @v_ornQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
434 ;CHECK-LABEL: v_ornQi64:
435 ;CHECK: vorn
436         %tmp1 = load <2 x i64>, <2 x i64>* %A
437         %tmp2 = load <2 x i64>, <2 x i64>* %B
438         %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
439         %tmp4 = or <2 x i64> %tmp1, %tmp3
440         ret <2 x i64> %tmp4
441 }
442
443 define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
444 ;CHECK-LABEL: vtsti8:
445 ;CHECK: vtst.8
446         %tmp1 = load <8 x i8>, <8 x i8>* %A
447         %tmp2 = load <8 x i8>, <8 x i8>* %B
448         %tmp3 = and <8 x i8> %tmp1, %tmp2
449         %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
450         %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
451         ret <8 x i8> %tmp5
452 }
453
454 define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
455 ;CHECK-LABEL: vtsti16:
456 ;CHECK: vtst.16
457         %tmp1 = load <4 x i16>, <4 x i16>* %A
458         %tmp2 = load <4 x i16>, <4 x i16>* %B
459         %tmp3 = and <4 x i16> %tmp1, %tmp2
460         %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
461         %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
462         ret <4 x i16> %tmp5
463 }
464
465 define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
466 ;CHECK-LABEL: vtsti32:
467 ;CHECK: vtst.32
468         %tmp1 = load <2 x i32>, <2 x i32>* %A
469         %tmp2 = load <2 x i32>, <2 x i32>* %B
470         %tmp3 = and <2 x i32> %tmp1, %tmp2
471         %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
472         %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
473         ret <2 x i32> %tmp5
474 }
475
476 define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
477 ;CHECK-LABEL: vtstQi8:
478 ;CHECK: vtst.8
479         %tmp1 = load <16 x i8>, <16 x i8>* %A
480         %tmp2 = load <16 x i8>, <16 x i8>* %B
481         %tmp3 = and <16 x i8> %tmp1, %tmp2
482         %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
483         %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
484         ret <16 x i8> %tmp5
485 }
486
487 define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
488 ;CHECK-LABEL: vtstQi16:
489 ;CHECK: vtst.16
490         %tmp1 = load <8 x i16>, <8 x i16>* %A
491         %tmp2 = load <8 x i16>, <8 x i16>* %B
492         %tmp3 = and <8 x i16> %tmp1, %tmp2
493         %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
494         %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
495         ret <8 x i16> %tmp5
496 }
497
498 define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
499 ;CHECK-LABEL: vtstQi32:
500 ;CHECK: vtst.32
501         %tmp1 = load <4 x i32>, <4 x i32>* %A
502         %tmp2 = load <4 x i32>, <4 x i32>* %B
503         %tmp3 = and <4 x i32> %tmp1, %tmp2
504         %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
505         %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
506         ret <4 x i32> %tmp5
507 }
508
509 define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
510 ; CHECK-LABEL: v_orrimm:
511 ; CHECK-NOT: vmov
512 ; CHECK-NOT: vmvn
513 ; CHECK: vorr
514         %tmp1 = load <8 x i8>, <8 x i8>* %A
515         %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
516         ret <8 x i8> %tmp3
517 }
518
519 define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
520 ; CHECK: v_orrimmQ
521 ; CHECK-NOT: vmov
522 ; CHECK-NOT: vmvn
523 ; CHECK: vorr
524         %tmp1 = load <16 x i8>, <16 x i8>* %A
525         %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>
526         ret <16 x i8> %tmp3
527 }
528
529 define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
530 ; CHECK-LABEL: v_bicimm:
531 ; CHECK-NOT: vmov
532 ; CHECK-NOT: vmvn
533 ; CHECK: vbic
534         %tmp1 = load <8 x i8>, <8 x i8>* %A
535         %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
536         ret <8 x i8> %tmp3
537 }
538
539 define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
540 ; CHECK-LABEL: v_bicimmQ:
541 ; CHECK-NOT: vmov
542 ; CHECK-NOT: vmvn
543 ; CHECK: vbic
544         %tmp1 = load <16 x i8>, <16 x i8>* %A
545         %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 >
546         ret <16 x i8> %tmp3
547 }