1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=arm-eabi -mattr=+neon -mcpu=cortex-a8 | FileCheck %s
4 define <8 x i8> @v_andi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
5 ; CHECK-LABEL: v_andi8:
7 ; CHECK-NEXT: vldr d16, [r1]
8 ; CHECK-NEXT: vldr d17, [r0]
9 ; CHECK-NEXT: vand d16, d17, d16
10 ; CHECK-NEXT: vmov r0, r1, d16
12 %tmp1 = load <8 x i8>, <8 x i8>* %A
13 %tmp2 = load <8 x i8>, <8 x i8>* %B
14 %tmp3 = and <8 x i8> %tmp1, %tmp2
18 define <4 x i16> @v_andi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
19 ; CHECK-LABEL: v_andi16:
21 ; CHECK-NEXT: vldr d16, [r1]
22 ; CHECK-NEXT: vldr d17, [r0]
23 ; CHECK-NEXT: vand d16, d17, d16
24 ; CHECK-NEXT: vmov r0, r1, d16
26 %tmp1 = load <4 x i16>, <4 x i16>* %A
27 %tmp2 = load <4 x i16>, <4 x i16>* %B
28 %tmp3 = and <4 x i16> %tmp1, %tmp2
32 define <2 x i32> @v_andi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
33 ; CHECK-LABEL: v_andi32:
35 ; CHECK-NEXT: vldr d16, [r1]
36 ; CHECK-NEXT: vldr d17, [r0]
37 ; CHECK-NEXT: vand d16, d17, d16
38 ; CHECK-NEXT: vmov r0, r1, d16
40 %tmp1 = load <2 x i32>, <2 x i32>* %A
41 %tmp2 = load <2 x i32>, <2 x i32>* %B
42 %tmp3 = and <2 x i32> %tmp1, %tmp2
46 define <1 x i64> @v_andi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
47 ; CHECK-LABEL: v_andi64:
49 ; CHECK-NEXT: vldr d16, [r1]
50 ; CHECK-NEXT: vldr d17, [r0]
51 ; CHECK-NEXT: vand d16, d17, d16
52 ; CHECK-NEXT: vmov r0, r1, d16
54 %tmp1 = load <1 x i64>, <1 x i64>* %A
55 %tmp2 = load <1 x i64>, <1 x i64>* %B
56 %tmp3 = and <1 x i64> %tmp1, %tmp2
60 define <16 x i8> @v_andQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
61 ; CHECK-LABEL: v_andQi8:
63 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
64 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
65 ; CHECK-NEXT: vand q8, q9, q8
66 ; CHECK-NEXT: vmov r0, r1, d16
67 ; CHECK-NEXT: vmov r2, r3, d17
69 %tmp1 = load <16 x i8>, <16 x i8>* %A
70 %tmp2 = load <16 x i8>, <16 x i8>* %B
71 %tmp3 = and <16 x i8> %tmp1, %tmp2
75 define <8 x i16> @v_andQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
76 ; CHECK-LABEL: v_andQi16:
78 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
79 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
80 ; CHECK-NEXT: vand q8, q9, q8
81 ; CHECK-NEXT: vmov r0, r1, d16
82 ; CHECK-NEXT: vmov r2, r3, d17
84 %tmp1 = load <8 x i16>, <8 x i16>* %A
85 %tmp2 = load <8 x i16>, <8 x i16>* %B
86 %tmp3 = and <8 x i16> %tmp1, %tmp2
90 define <4 x i32> @v_andQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
91 ; CHECK-LABEL: v_andQi32:
93 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
94 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
95 ; CHECK-NEXT: vand q8, q9, q8
96 ; CHECK-NEXT: vmov r0, r1, d16
97 ; CHECK-NEXT: vmov r2, r3, d17
99 %tmp1 = load <4 x i32>, <4 x i32>* %A
100 %tmp2 = load <4 x i32>, <4 x i32>* %B
101 %tmp3 = and <4 x i32> %tmp1, %tmp2
105 define <2 x i64> @v_andQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
106 ; CHECK-LABEL: v_andQi64:
108 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
109 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
110 ; CHECK-NEXT: vand q8, q9, q8
111 ; CHECK-NEXT: vmov r0, r1, d16
112 ; CHECK-NEXT: vmov r2, r3, d17
114 %tmp1 = load <2 x i64>, <2 x i64>* %A
115 %tmp2 = load <2 x i64>, <2 x i64>* %B
116 %tmp3 = and <2 x i64> %tmp1, %tmp2
120 define <8 x i8> @v_bici8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
121 ; CHECK-LABEL: v_bici8:
123 ; CHECK-NEXT: vldr d16, [r1]
124 ; CHECK-NEXT: vldr d17, [r0]
125 ; CHECK-NEXT: vbic d16, d17, d16
126 ; CHECK-NEXT: vmov r0, r1, d16
128 %tmp1 = load <8 x i8>, <8 x i8>* %A
129 %tmp2 = load <8 x i8>, <8 x i8>* %B
130 %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
131 %tmp4 = and <8 x i8> %tmp1, %tmp3
135 define <4 x i16> @v_bici16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
136 ; CHECK-LABEL: v_bici16:
138 ; CHECK-NEXT: vldr d16, [r1]
139 ; CHECK-NEXT: vldr d17, [r0]
140 ; CHECK-NEXT: vbic d16, d17, d16
141 ; CHECK-NEXT: vmov r0, r1, d16
143 %tmp1 = load <4 x i16>, <4 x i16>* %A
144 %tmp2 = load <4 x i16>, <4 x i16>* %B
145 %tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
146 %tmp4 = and <4 x i16> %tmp1, %tmp3
150 define <2 x i32> @v_bici32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
151 ; CHECK-LABEL: v_bici32:
153 ; CHECK-NEXT: vldr d16, [r1]
154 ; CHECK-NEXT: vldr d17, [r0]
155 ; CHECK-NEXT: vbic d16, d17, d16
156 ; CHECK-NEXT: vmov r0, r1, d16
158 %tmp1 = load <2 x i32>, <2 x i32>* %A
159 %tmp2 = load <2 x i32>, <2 x i32>* %B
160 %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
161 %tmp4 = and <2 x i32> %tmp1, %tmp3
165 define <1 x i64> @v_bici64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
166 ; CHECK-LABEL: v_bici64:
168 ; CHECK-NEXT: vldr d16, [r1]
169 ; CHECK-NEXT: vldr d17, [r0]
170 ; CHECK-NEXT: vbic d16, d17, d16
171 ; CHECK-NEXT: vmov r0, r1, d16
173 %tmp1 = load <1 x i64>, <1 x i64>* %A
174 %tmp2 = load <1 x i64>, <1 x i64>* %B
175 %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
176 %tmp4 = and <1 x i64> %tmp1, %tmp3
180 define <16 x i8> @v_bicQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
181 ; CHECK-LABEL: v_bicQi8:
183 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
184 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
185 ; CHECK-NEXT: vbic q8, q9, q8
186 ; CHECK-NEXT: vmov r0, r1, d16
187 ; CHECK-NEXT: vmov r2, r3, d17
189 %tmp1 = load <16 x i8>, <16 x i8>* %A
190 %tmp2 = load <16 x i8>, <16 x i8>* %B
191 %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 >
192 %tmp4 = and <16 x i8> %tmp1, %tmp3
196 define <8 x i16> @v_bicQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
197 ; CHECK-LABEL: v_bicQi16:
199 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
200 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
201 ; CHECK-NEXT: vbic q8, q9, q8
202 ; CHECK-NEXT: vmov r0, r1, d16
203 ; CHECK-NEXT: vmov r2, r3, d17
205 %tmp1 = load <8 x i16>, <8 x i16>* %A
206 %tmp2 = load <8 x i16>, <8 x i16>* %B
207 %tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
208 %tmp4 = and <8 x i16> %tmp1, %tmp3
212 define <4 x i32> @v_bicQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
213 ; CHECK-LABEL: v_bicQi32:
215 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
216 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
217 ; CHECK-NEXT: vbic q8, q9, q8
218 ; CHECK-NEXT: vmov r0, r1, d16
219 ; CHECK-NEXT: vmov r2, r3, d17
221 %tmp1 = load <4 x i32>, <4 x i32>* %A
222 %tmp2 = load <4 x i32>, <4 x i32>* %B
223 %tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
224 %tmp4 = and <4 x i32> %tmp1, %tmp3
228 define <2 x i64> @v_bicQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
229 ; CHECK-LABEL: v_bicQi64:
231 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
232 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
233 ; CHECK-NEXT: vbic q8, q9, q8
234 ; CHECK-NEXT: vmov r0, r1, d16
235 ; CHECK-NEXT: vmov r2, r3, d17
237 %tmp1 = load <2 x i64>, <2 x i64>* %A
238 %tmp2 = load <2 x i64>, <2 x i64>* %B
239 %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
240 %tmp4 = and <2 x i64> %tmp1, %tmp3
244 define <8 x i8> @v_eori8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
245 ; CHECK-LABEL: v_eori8:
247 ; CHECK-NEXT: vldr d16, [r1]
248 ; CHECK-NEXT: vldr d17, [r0]
249 ; CHECK-NEXT: veor d16, d17, d16
250 ; CHECK-NEXT: vmov r0, r1, d16
252 %tmp1 = load <8 x i8>, <8 x i8>* %A
253 %tmp2 = load <8 x i8>, <8 x i8>* %B
254 %tmp3 = xor <8 x i8> %tmp1, %tmp2
258 define <4 x i16> @v_eori16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
259 ; CHECK-LABEL: v_eori16:
261 ; CHECK-NEXT: vldr d16, [r1]
262 ; CHECK-NEXT: vldr d17, [r0]
263 ; CHECK-NEXT: veor d16, d17, d16
264 ; CHECK-NEXT: vmov r0, r1, d16
266 %tmp1 = load <4 x i16>, <4 x i16>* %A
267 %tmp2 = load <4 x i16>, <4 x i16>* %B
268 %tmp3 = xor <4 x i16> %tmp1, %tmp2
272 define <2 x i32> @v_eori32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
273 ; CHECK-LABEL: v_eori32:
275 ; CHECK-NEXT: vldr d16, [r1]
276 ; CHECK-NEXT: vldr d17, [r0]
277 ; CHECK-NEXT: veor d16, d17, d16
278 ; CHECK-NEXT: vmov r0, r1, d16
280 %tmp1 = load <2 x i32>, <2 x i32>* %A
281 %tmp2 = load <2 x i32>, <2 x i32>* %B
282 %tmp3 = xor <2 x i32> %tmp1, %tmp2
286 define <1 x i64> @v_eori64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
287 ; CHECK-LABEL: v_eori64:
289 ; CHECK-NEXT: vldr d16, [r1]
290 ; CHECK-NEXT: vldr d17, [r0]
291 ; CHECK-NEXT: veor d16, d17, d16
292 ; CHECK-NEXT: vmov r0, r1, d16
294 %tmp1 = load <1 x i64>, <1 x i64>* %A
295 %tmp2 = load <1 x i64>, <1 x i64>* %B
296 %tmp3 = xor <1 x i64> %tmp1, %tmp2
300 define <16 x i8> @v_eorQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
301 ; CHECK-LABEL: v_eorQi8:
303 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
304 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
305 ; CHECK-NEXT: veor q8, q9, q8
306 ; CHECK-NEXT: vmov r0, r1, d16
307 ; CHECK-NEXT: vmov r2, r3, d17
309 %tmp1 = load <16 x i8>, <16 x i8>* %A
310 %tmp2 = load <16 x i8>, <16 x i8>* %B
311 %tmp3 = xor <16 x i8> %tmp1, %tmp2
315 define <8 x i16> @v_eorQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
316 ; CHECK-LABEL: v_eorQi16:
318 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
319 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
320 ; CHECK-NEXT: veor q8, q9, q8
321 ; CHECK-NEXT: vmov r0, r1, d16
322 ; CHECK-NEXT: vmov r2, r3, d17
324 %tmp1 = load <8 x i16>, <8 x i16>* %A
325 %tmp2 = load <8 x i16>, <8 x i16>* %B
326 %tmp3 = xor <8 x i16> %tmp1, %tmp2
330 define <4 x i32> @v_eorQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
331 ; CHECK-LABEL: v_eorQi32:
333 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
334 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
335 ; CHECK-NEXT: veor q8, q9, q8
336 ; CHECK-NEXT: vmov r0, r1, d16
337 ; CHECK-NEXT: vmov r2, r3, d17
339 %tmp1 = load <4 x i32>, <4 x i32>* %A
340 %tmp2 = load <4 x i32>, <4 x i32>* %B
341 %tmp3 = xor <4 x i32> %tmp1, %tmp2
345 define <2 x i64> @v_eorQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
346 ; CHECK-LABEL: v_eorQi64:
348 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
349 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
350 ; CHECK-NEXT: veor q8, q9, q8
351 ; CHECK-NEXT: vmov r0, r1, d16
352 ; CHECK-NEXT: vmov r2, r3, d17
354 %tmp1 = load <2 x i64>, <2 x i64>* %A
355 %tmp2 = load <2 x i64>, <2 x i64>* %B
356 %tmp3 = xor <2 x i64> %tmp1, %tmp2
360 define <8 x i8> @v_mvni8(<8 x i8>* %A) nounwind {
361 ; CHECK-LABEL: v_mvni8:
363 ; CHECK-NEXT: vldr d16, [r0]
364 ; CHECK-NEXT: vmvn d16, d16
365 ; CHECK-NEXT: vmov r0, r1, d16
367 %tmp1 = load <8 x i8>, <8 x i8>* %A
368 %tmp2 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
372 define <4 x i16> @v_mvni16(<4 x i16>* %A) nounwind {
373 ; CHECK-LABEL: v_mvni16:
375 ; CHECK-NEXT: vldr d16, [r0]
376 ; CHECK-NEXT: vmvn d16, d16
377 ; CHECK-NEXT: vmov r0, r1, d16
379 %tmp1 = load <4 x i16>, <4 x i16>* %A
380 %tmp2 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
384 define <2 x i32> @v_mvni32(<2 x i32>* %A) nounwind {
385 ; CHECK-LABEL: v_mvni32:
387 ; CHECK-NEXT: vldr d16, [r0]
388 ; CHECK-NEXT: vmvn d16, d16
389 ; CHECK-NEXT: vmov r0, r1, d16
391 %tmp1 = load <2 x i32>, <2 x i32>* %A
392 %tmp2 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
396 define <1 x i64> @v_mvni64(<1 x i64>* %A) nounwind {
397 ; CHECK-LABEL: v_mvni64:
399 ; CHECK-NEXT: vldr d16, [r0]
400 ; CHECK-NEXT: vmvn d16, d16
401 ; CHECK-NEXT: vmov r0, r1, d16
403 %tmp1 = load <1 x i64>, <1 x i64>* %A
404 %tmp2 = xor <1 x i64> %tmp1, < i64 -1 >
408 define <16 x i8> @v_mvnQi8(<16 x i8>* %A) nounwind {
409 ; CHECK-LABEL: v_mvnQi8:
411 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
412 ; CHECK-NEXT: vmvn q8, q8
413 ; CHECK-NEXT: vmov r0, r1, d16
414 ; CHECK-NEXT: vmov r2, r3, d17
416 %tmp1 = load <16 x i8>, <16 x i8>* %A
417 %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 >
421 define <8 x i16> @v_mvnQi16(<8 x i16>* %A) nounwind {
422 ; CHECK-LABEL: v_mvnQi16:
424 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
425 ; CHECK-NEXT: vmvn q8, q8
426 ; CHECK-NEXT: vmov r0, r1, d16
427 ; CHECK-NEXT: vmov r2, r3, d17
429 %tmp1 = load <8 x i16>, <8 x i16>* %A
430 %tmp2 = xor <8 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
434 define <4 x i32> @v_mvnQi32(<4 x i32>* %A) nounwind {
435 ; CHECK-LABEL: v_mvnQi32:
437 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
438 ; CHECK-NEXT: vmvn q8, q8
439 ; CHECK-NEXT: vmov r0, r1, d16
440 ; CHECK-NEXT: vmov r2, r3, d17
442 %tmp1 = load <4 x i32>, <4 x i32>* %A
443 %tmp2 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
447 define <2 x i64> @v_mvnQi64(<2 x i64>* %A) nounwind {
448 ; CHECK-LABEL: v_mvnQi64:
450 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
451 ; CHECK-NEXT: vmvn q8, q8
452 ; CHECK-NEXT: vmov r0, r1, d16
453 ; CHECK-NEXT: vmov r2, r3, d17
455 %tmp1 = load <2 x i64>, <2 x i64>* %A
456 %tmp2 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
460 define <8 x i8> @v_orri8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
461 ; CHECK-LABEL: v_orri8:
463 ; CHECK-NEXT: vldr d16, [r1]
464 ; CHECK-NEXT: vldr d17, [r0]
465 ; CHECK-NEXT: vorr d16, d17, d16
466 ; CHECK-NEXT: vmov r0, r1, d16
468 %tmp1 = load <8 x i8>, <8 x i8>* %A
469 %tmp2 = load <8 x i8>, <8 x i8>* %B
470 %tmp3 = or <8 x i8> %tmp1, %tmp2
474 define <4 x i16> @v_orri16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
475 ; CHECK-LABEL: v_orri16:
477 ; CHECK-NEXT: vldr d16, [r1]
478 ; CHECK-NEXT: vldr d17, [r0]
479 ; CHECK-NEXT: vorr d16, d17, d16
480 ; CHECK-NEXT: vmov r0, r1, d16
482 %tmp1 = load <4 x i16>, <4 x i16>* %A
483 %tmp2 = load <4 x i16>, <4 x i16>* %B
484 %tmp3 = or <4 x i16> %tmp1, %tmp2
488 define <2 x i32> @v_orri32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
489 ; CHECK-LABEL: v_orri32:
491 ; CHECK-NEXT: vldr d16, [r1]
492 ; CHECK-NEXT: vldr d17, [r0]
493 ; CHECK-NEXT: vorr d16, d17, d16
494 ; CHECK-NEXT: vmov r0, r1, d16
496 %tmp1 = load <2 x i32>, <2 x i32>* %A
497 %tmp2 = load <2 x i32>, <2 x i32>* %B
498 %tmp3 = or <2 x i32> %tmp1, %tmp2
502 define <1 x i64> @v_orri64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
503 ; CHECK-LABEL: v_orri64:
505 ; CHECK-NEXT: vldr d16, [r1]
506 ; CHECK-NEXT: vldr d17, [r0]
507 ; CHECK-NEXT: vorr d16, d17, d16
508 ; CHECK-NEXT: vmov r0, r1, d16
510 %tmp1 = load <1 x i64>, <1 x i64>* %A
511 %tmp2 = load <1 x i64>, <1 x i64>* %B
512 %tmp3 = or <1 x i64> %tmp1, %tmp2
516 define <16 x i8> @v_orrQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
517 ; CHECK-LABEL: v_orrQi8:
519 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
520 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
521 ; CHECK-NEXT: vorr q8, q9, q8
522 ; CHECK-NEXT: vmov r0, r1, d16
523 ; CHECK-NEXT: vmov r2, r3, d17
525 %tmp1 = load <16 x i8>, <16 x i8>* %A
526 %tmp2 = load <16 x i8>, <16 x i8>* %B
527 %tmp3 = or <16 x i8> %tmp1, %tmp2
531 define <8 x i16> @v_orrQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
532 ; CHECK-LABEL: v_orrQi16:
534 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
535 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
536 ; CHECK-NEXT: vorr q8, q9, q8
537 ; CHECK-NEXT: vmov r0, r1, d16
538 ; CHECK-NEXT: vmov r2, r3, d17
540 %tmp1 = load <8 x i16>, <8 x i16>* %A
541 %tmp2 = load <8 x i16>, <8 x i16>* %B
542 %tmp3 = or <8 x i16> %tmp1, %tmp2
546 define <4 x i32> @v_orrQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
547 ; CHECK-LABEL: v_orrQi32:
549 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
550 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
551 ; CHECK-NEXT: vorr q8, q9, q8
552 ; CHECK-NEXT: vmov r0, r1, d16
553 ; CHECK-NEXT: vmov r2, r3, d17
555 %tmp1 = load <4 x i32>, <4 x i32>* %A
556 %tmp2 = load <4 x i32>, <4 x i32>* %B
557 %tmp3 = or <4 x i32> %tmp1, %tmp2
561 define <2 x i64> @v_orrQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
562 ; CHECK-LABEL: v_orrQi64:
564 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
565 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
566 ; CHECK-NEXT: vorr q8, q9, q8
567 ; CHECK-NEXT: vmov r0, r1, d16
568 ; CHECK-NEXT: vmov r2, r3, d17
570 %tmp1 = load <2 x i64>, <2 x i64>* %A
571 %tmp2 = load <2 x i64>, <2 x i64>* %B
572 %tmp3 = or <2 x i64> %tmp1, %tmp2
576 define <8 x i8> @v_orni8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
577 ; CHECK-LABEL: v_orni8:
579 ; CHECK-NEXT: vldr d16, [r1]
580 ; CHECK-NEXT: vldr d17, [r0]
581 ; CHECK-NEXT: vorn d16, d17, d16
582 ; CHECK-NEXT: vmov r0, r1, d16
584 %tmp1 = load <8 x i8>, <8 x i8>* %A
585 %tmp2 = load <8 x i8>, <8 x i8>* %B
586 %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
587 %tmp4 = or <8 x i8> %tmp1, %tmp3
591 define <4 x i16> @v_orni16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
592 ; CHECK-LABEL: v_orni16:
594 ; CHECK-NEXT: vldr d16, [r1]
595 ; CHECK-NEXT: vldr d17, [r0]
596 ; CHECK-NEXT: vorn d16, d17, d16
597 ; CHECK-NEXT: vmov r0, r1, d16
599 %tmp1 = load <4 x i16>, <4 x i16>* %A
600 %tmp2 = load <4 x i16>, <4 x i16>* %B
601 %tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
602 %tmp4 = or <4 x i16> %tmp1, %tmp3
606 define <2 x i32> @v_orni32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
607 ; CHECK-LABEL: v_orni32:
609 ; CHECK-NEXT: vldr d16, [r1]
610 ; CHECK-NEXT: vldr d17, [r0]
611 ; CHECK-NEXT: vorn d16, d17, d16
612 ; CHECK-NEXT: vmov r0, r1, d16
614 %tmp1 = load <2 x i32>, <2 x i32>* %A
615 %tmp2 = load <2 x i32>, <2 x i32>* %B
616 %tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
617 %tmp4 = or <2 x i32> %tmp1, %tmp3
621 define <1 x i64> @v_orni64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
622 ; CHECK-LABEL: v_orni64:
624 ; CHECK-NEXT: vldr d16, [r1]
625 ; CHECK-NEXT: vldr d17, [r0]
626 ; CHECK-NEXT: vorn d16, d17, d16
627 ; CHECK-NEXT: vmov r0, r1, d16
629 %tmp1 = load <1 x i64>, <1 x i64>* %A
630 %tmp2 = load <1 x i64>, <1 x i64>* %B
631 %tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
632 %tmp4 = or <1 x i64> %tmp1, %tmp3
636 define <16 x i8> @v_ornQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
637 ; CHECK-LABEL: v_ornQi8:
639 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
640 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
641 ; CHECK-NEXT: vorn q8, q9, q8
642 ; CHECK-NEXT: vmov r0, r1, d16
643 ; CHECK-NEXT: vmov r2, r3, d17
645 %tmp1 = load <16 x i8>, <16 x i8>* %A
646 %tmp2 = load <16 x i8>, <16 x i8>* %B
647 %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 >
648 %tmp4 = or <16 x i8> %tmp1, %tmp3
652 define <8 x i16> @v_ornQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
653 ; CHECK-LABEL: v_ornQi16:
655 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
656 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
657 ; CHECK-NEXT: vorn q8, q9, q8
658 ; CHECK-NEXT: vmov r0, r1, d16
659 ; CHECK-NEXT: vmov r2, r3, d17
661 %tmp1 = load <8 x i16>, <8 x i16>* %A
662 %tmp2 = load <8 x i16>, <8 x i16>* %B
663 %tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
664 %tmp4 = or <8 x i16> %tmp1, %tmp3
668 define <4 x i32> @v_ornQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
669 ; CHECK-LABEL: v_ornQi32:
671 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
672 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
673 ; CHECK-NEXT: vorn q8, q9, q8
674 ; CHECK-NEXT: vmov r0, r1, d16
675 ; CHECK-NEXT: vmov r2, r3, d17
677 %tmp1 = load <4 x i32>, <4 x i32>* %A
678 %tmp2 = load <4 x i32>, <4 x i32>* %B
679 %tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
680 %tmp4 = or <4 x i32> %tmp1, %tmp3
684 define <2 x i64> @v_ornQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
685 ; CHECK-LABEL: v_ornQi64:
687 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
688 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
689 ; CHECK-NEXT: vorn q8, q9, q8
690 ; CHECK-NEXT: vmov r0, r1, d16
691 ; CHECK-NEXT: vmov r2, r3, d17
693 %tmp1 = load <2 x i64>, <2 x i64>* %A
694 %tmp2 = load <2 x i64>, <2 x i64>* %B
695 %tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
696 %tmp4 = or <2 x i64> %tmp1, %tmp3
700 define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
701 ; CHECK-LABEL: vtsti8:
703 ; CHECK-NEXT: vldr d16, [r1]
704 ; CHECK-NEXT: vldr d17, [r0]
705 ; CHECK-NEXT: vtst.8 d16, d17, d16
706 ; CHECK-NEXT: vmov r0, r1, d16
708 %tmp1 = load <8 x i8>, <8 x i8>* %A
709 %tmp2 = load <8 x i8>, <8 x i8>* %B
710 %tmp3 = and <8 x i8> %tmp1, %tmp2
711 %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
712 %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
716 define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
717 ; CHECK-LABEL: vtsti16:
719 ; CHECK-NEXT: vldr d16, [r1]
720 ; CHECK-NEXT: vldr d17, [r0]
721 ; CHECK-NEXT: vtst.16 d16, d17, d16
722 ; CHECK-NEXT: vmov r0, r1, d16
724 %tmp1 = load <4 x i16>, <4 x i16>* %A
725 %tmp2 = load <4 x i16>, <4 x i16>* %B
726 %tmp3 = and <4 x i16> %tmp1, %tmp2
727 %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
728 %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
732 define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
733 ; CHECK-LABEL: vtsti32:
735 ; CHECK-NEXT: vldr d16, [r1]
736 ; CHECK-NEXT: vldr d17, [r0]
737 ; CHECK-NEXT: vtst.32 d16, d17, d16
738 ; CHECK-NEXT: vmov r0, r1, d16
740 %tmp1 = load <2 x i32>, <2 x i32>* %A
741 %tmp2 = load <2 x i32>, <2 x i32>* %B
742 %tmp3 = and <2 x i32> %tmp1, %tmp2
743 %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
744 %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
748 define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
749 ; CHECK-LABEL: vtstQi8:
751 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
752 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
753 ; CHECK-NEXT: vtst.8 q8, q9, q8
754 ; CHECK-NEXT: vmov r0, r1, d16
755 ; CHECK-NEXT: vmov r2, r3, d17
757 %tmp1 = load <16 x i8>, <16 x i8>* %A
758 %tmp2 = load <16 x i8>, <16 x i8>* %B
759 %tmp3 = and <16 x i8> %tmp1, %tmp2
760 %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
761 %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
765 define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
766 ; CHECK-LABEL: vtstQi16:
768 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
769 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
770 ; CHECK-NEXT: vtst.16 q8, q9, q8
771 ; CHECK-NEXT: vmov r0, r1, d16
772 ; CHECK-NEXT: vmov r2, r3, d17
774 %tmp1 = load <8 x i16>, <8 x i16>* %A
775 %tmp2 = load <8 x i16>, <8 x i16>* %B
776 %tmp3 = and <8 x i16> %tmp1, %tmp2
777 %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
778 %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
782 define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
783 ; CHECK-LABEL: vtstQi32:
785 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
786 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
787 ; CHECK-NEXT: vtst.32 q8, q9, q8
788 ; CHECK-NEXT: vmov r0, r1, d16
789 ; CHECK-NEXT: vmov r2, r3, d17
791 %tmp1 = load <4 x i32>, <4 x i32>* %A
792 %tmp2 = load <4 x i32>, <4 x i32>* %B
793 %tmp3 = and <4 x i32> %tmp1, %tmp2
794 %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
795 %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
799 define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
800 ; CHECK-LABEL: v_orrimm:
802 ; CHECK-NEXT: vldr d16, [r0]
803 ; CHECK-NEXT: vorr.i32 d16, #0x1000000
804 ; CHECK-NEXT: vmov r0, r1, d16
806 %tmp1 = load <8 x i8>, <8 x i8>* %A
807 %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
811 define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
812 ; CHECK-LABEL: v_orrimmQ:
814 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
815 ; CHECK-NEXT: vorr.i32 q8, #0x1000000
816 ; CHECK-NEXT: vmov r0, r1, d16
817 ; CHECK-NEXT: vmov r2, r3, d17
819 %tmp1 = load <16 x i8>, <16 x i8>* %A
820 %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>
824 define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
825 ; CHECK-LABEL: v_bicimm:
827 ; CHECK-NEXT: vldr d16, [r0]
828 ; CHECK-NEXT: vbic.i32 d16, #0xff000000
829 ; CHECK-NEXT: vmov r0, r1, d16
831 %tmp1 = load <8 x i8>, <8 x i8>* %A
832 %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
836 define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
837 ; CHECK-LABEL: v_bicimmQ:
839 ; CHECK-NEXT: vld1.64 {d16, d17}, [r0]
840 ; CHECK-NEXT: vbic.i32 q8, #0xff000000
841 ; CHECK-NEXT: vmov r0, r1, d16
842 ; CHECK-NEXT: vmov r2, r3, d17
844 %tmp1 = load <16 x i8>, <16 x i8>* %A
845 %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 >
849 define <4 x i32> @hidden_not_v4i32(<4 x i32> %x) nounwind {
850 ; CHECK-LABEL: hidden_not_v4i32:
852 ; CHECK-NEXT: vmov d19, r2, r3
853 ; CHECK-NEXT: vmov.i32 q8, #0x6
854 ; CHECK-NEXT: vmov d18, r0, r1
855 ; CHECK-NEXT: vbic q8, q8, q9
856 ; CHECK-NEXT: vmov r0, r1, d16
857 ; CHECK-NEXT: vmov r2, r3, d17
859 %xor = xor <4 x i32> %x, <i32 15, i32 15, i32 15, i32 15>
860 %and = and <4 x i32> %xor, <i32 6, i32 6, i32 6, i32 6>