1 ; RUN: llc < %s -march=arm -mattr=+neon -mcpu=cortex-a8 | FileCheck %s
3 define <8 x i8> @v_andi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
6 %tmp1 = load <8 x i8>* %A
7 %tmp2 = load <8 x i8>* %B
8 %tmp3 = and <8 x i8> %tmp1, %tmp2
12 define <4 x i16> @v_andi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
15 %tmp1 = load <4 x i16>* %A
16 %tmp2 = load <4 x i16>* %B
17 %tmp3 = and <4 x i16> %tmp1, %tmp2
21 define <2 x i32> @v_andi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
24 %tmp1 = load <2 x i32>* %A
25 %tmp2 = load <2 x i32>* %B
26 %tmp3 = and <2 x i32> %tmp1, %tmp2
30 define <1 x i64> @v_andi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
33 %tmp1 = load <1 x i64>* %A
34 %tmp2 = load <1 x i64>* %B
35 %tmp3 = and <1 x i64> %tmp1, %tmp2
39 define <16 x i8> @v_andQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
42 %tmp1 = load <16 x i8>* %A
43 %tmp2 = load <16 x i8>* %B
44 %tmp3 = and <16 x i8> %tmp1, %tmp2
48 define <8 x i16> @v_andQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
51 %tmp1 = load <8 x i16>* %A
52 %tmp2 = load <8 x i16>* %B
53 %tmp3 = and <8 x i16> %tmp1, %tmp2
57 define <4 x i32> @v_andQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
60 %tmp1 = load <4 x i32>* %A
61 %tmp2 = load <4 x i32>* %B
62 %tmp3 = and <4 x i32> %tmp1, %tmp2
66 define <2 x i64> @v_andQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
69 %tmp1 = load <2 x i64>* %A
70 %tmp2 = load <2 x i64>* %B
71 %tmp3 = and <2 x i64> %tmp1, %tmp2
75 define <8 x i8> @v_bici8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
78 %tmp1 = load <8 x i8>* %A
79 %tmp2 = load <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
85 define <4 x i16> @v_bici16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
88 %tmp1 = load <4 x i16>* %A
89 %tmp2 = load <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
95 define <2 x i32> @v_bici32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
98 %tmp1 = load <2 x i32>* %A
99 %tmp2 = load <2 x i32>* %B
100 %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
101 %tmp4 = and <2 x i32> %tmp1, %tmp3
105 define <1 x i64> @v_bici64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
108 %tmp1 = load <1 x i64>* %A
109 %tmp2 = load <1 x i64>* %B
110 %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
111 %tmp4 = and <1 x i64> %tmp1, %tmp3
115 define <16 x i8> @v_bicQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
118 %tmp1 = load <16 x i8>* %A
119 %tmp2 = load <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
125 define <8 x i16> @v_bicQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
128 %tmp1 = load <8 x i16>* %A
129 %tmp2 = load <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
135 define <4 x i32> @v_bicQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
138 %tmp1 = load <4 x i32>* %A
139 %tmp2 = load <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
145 define <2 x i64> @v_bicQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
148 %tmp1 = load <2 x i64>* %A
149 %tmp2 = load <2 x i64>* %B
150 %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
151 %tmp4 = and <2 x i64> %tmp1, %tmp3
155 define <8 x i8> @v_eori8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
158 %tmp1 = load <8 x i8>* %A
159 %tmp2 = load <8 x i8>* %B
160 %tmp3 = xor <8 x i8> %tmp1, %tmp2
164 define <4 x i16> @v_eori16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
167 %tmp1 = load <4 x i16>* %A
168 %tmp2 = load <4 x i16>* %B
169 %tmp3 = xor <4 x i16> %tmp1, %tmp2
173 define <2 x i32> @v_eori32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
176 %tmp1 = load <2 x i32>* %A
177 %tmp2 = load <2 x i32>* %B
178 %tmp3 = xor <2 x i32> %tmp1, %tmp2
182 define <1 x i64> @v_eori64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
185 %tmp1 = load <1 x i64>* %A
186 %tmp2 = load <1 x i64>* %B
187 %tmp3 = xor <1 x i64> %tmp1, %tmp2
191 define <16 x i8> @v_eorQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
194 %tmp1 = load <16 x i8>* %A
195 %tmp2 = load <16 x i8>* %B
196 %tmp3 = xor <16 x i8> %tmp1, %tmp2
200 define <8 x i16> @v_eorQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
203 %tmp1 = load <8 x i16>* %A
204 %tmp2 = load <8 x i16>* %B
205 %tmp3 = xor <8 x i16> %tmp1, %tmp2
209 define <4 x i32> @v_eorQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
212 %tmp1 = load <4 x i32>* %A
213 %tmp2 = load <4 x i32>* %B
214 %tmp3 = xor <4 x i32> %tmp1, %tmp2
218 define <2 x i64> @v_eorQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
221 %tmp1 = load <2 x i64>* %A
222 %tmp2 = load <2 x i64>* %B
223 %tmp3 = xor <2 x i64> %tmp1, %tmp2
227 define <8 x i8> @v_mvni8(<8 x i8>* %A) nounwind {
230 %tmp1 = load <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 >
235 define <4 x i16> @v_mvni16(<4 x i16>* %A) nounwind {
238 %tmp1 = load <4 x i16>* %A
239 %tmp2 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
243 define <2 x i32> @v_mvni32(<2 x i32>* %A) nounwind {
246 %tmp1 = load <2 x i32>* %A
247 %tmp2 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
251 define <1 x i64> @v_mvni64(<1 x i64>* %A) nounwind {
254 %tmp1 = load <1 x i64>* %A
255 %tmp2 = xor <1 x i64> %tmp1, < i64 -1 >
259 define <16 x i8> @v_mvnQi8(<16 x i8>* %A) nounwind {
262 %tmp1 = load <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 >
267 define <8 x i16> @v_mvnQi16(<8 x i16>* %A) nounwind {
270 %tmp1 = load <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 >
275 define <4 x i32> @v_mvnQi32(<4 x i32>* %A) nounwind {
278 %tmp1 = load <4 x i32>* %A
279 %tmp2 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
283 define <2 x i64> @v_mvnQi64(<2 x i64>* %A) nounwind {
286 %tmp1 = load <2 x i64>* %A
287 %tmp2 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
291 define <8 x i8> @v_orri8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
294 %tmp1 = load <8 x i8>* %A
295 %tmp2 = load <8 x i8>* %B
296 %tmp3 = or <8 x i8> %tmp1, %tmp2
300 define <4 x i16> @v_orri16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
303 %tmp1 = load <4 x i16>* %A
304 %tmp2 = load <4 x i16>* %B
305 %tmp3 = or <4 x i16> %tmp1, %tmp2
309 define <2 x i32> @v_orri32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
312 %tmp1 = load <2 x i32>* %A
313 %tmp2 = load <2 x i32>* %B
314 %tmp3 = or <2 x i32> %tmp1, %tmp2
318 define <1 x i64> @v_orri64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
321 %tmp1 = load <1 x i64>* %A
322 %tmp2 = load <1 x i64>* %B
323 %tmp3 = or <1 x i64> %tmp1, %tmp2
327 define <16 x i8> @v_orrQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
330 %tmp1 = load <16 x i8>* %A
331 %tmp2 = load <16 x i8>* %B
332 %tmp3 = or <16 x i8> %tmp1, %tmp2
336 define <8 x i16> @v_orrQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
339 %tmp1 = load <8 x i16>* %A
340 %tmp2 = load <8 x i16>* %B
341 %tmp3 = or <8 x i16> %tmp1, %tmp2
345 define <4 x i32> @v_orrQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
348 %tmp1 = load <4 x i32>* %A
349 %tmp2 = load <4 x i32>* %B
350 %tmp3 = or <4 x i32> %tmp1, %tmp2
354 define <2 x i64> @v_orrQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
357 %tmp1 = load <2 x i64>* %A
358 %tmp2 = load <2 x i64>* %B
359 %tmp3 = or <2 x i64> %tmp1, %tmp2
363 define <8 x i8> @v_orni8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
366 %tmp1 = load <8 x i8>* %A
367 %tmp2 = load <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
373 define <4 x i16> @v_orni16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
376 %tmp1 = load <4 x i16>* %A
377 %tmp2 = load <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
383 define <2 x i32> @v_orni32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
386 %tmp1 = load <2 x i32>* %A
387 %tmp2 = load <2 x i32>* %B
388 %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
389 %tmp4 = or <2 x i32> %tmp1, %tmp3
393 define <1 x i64> @v_orni64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
396 %tmp1 = load <1 x i64>* %A
397 %tmp2 = load <1 x i64>* %B
398 %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
399 %tmp4 = or <1 x i64> %tmp1, %tmp3
403 define <16 x i8> @v_ornQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
406 %tmp1 = load <16 x i8>* %A
407 %tmp2 = load <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
413 define <8 x i16> @v_ornQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
416 %tmp1 = load <8 x i16>* %A
417 %tmp2 = load <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
423 define <4 x i32> @v_ornQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
426 %tmp1 = load <4 x i32>* %A
427 %tmp2 = load <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
433 define <2 x i64> @v_ornQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
436 %tmp1 = load <2 x i64>* %A
437 %tmp2 = load <2 x i64>* %B
438 %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
439 %tmp4 = or <2 x i64> %tmp1, %tmp3
443 define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
446 %tmp1 = load <8 x i8>* %A
447 %tmp2 = load <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>
454 define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
457 %tmp1 = load <4 x i16>* %A
458 %tmp2 = load <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>
465 define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
468 %tmp1 = load <2 x i32>* %A
469 %tmp2 = load <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>
476 define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
479 %tmp1 = load <16 x i8>* %A
480 %tmp2 = load <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>
487 define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
490 %tmp1 = load <8 x i16>* %A
491 %tmp2 = load <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>
498 define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
501 %tmp1 = load <4 x i32>* %A
502 %tmp2 = load <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>
509 define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
514 %tmp1 = load <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>
519 define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
524 %tmp1 = load <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>
529 define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
534 %tmp1 = load <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 >
539 define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
544 %tmp1 = load <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 >