[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-bitwise-instructions.ll
blob4d1e6419b9ef2e1c22b37894da36cf270742b83e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
4 define <8 x i8> @and8xi8(<8 x i8> %a, <8 x i8> %b) {
5 ; CHECK-LABEL: and8xi8:
6 ; CHECK:       // %bb.0:
7 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
8 ; CHECK-NEXT:    ret
9         %tmp1 = and <8 x i8> %a, %b;
10         ret <8 x i8> %tmp1
13 define <16 x i8> @and16xi8(<16 x i8> %a, <16 x i8> %b) {
14 ; CHECK-LABEL: and16xi8:
15 ; CHECK:       // %bb.0:
16 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
17 ; CHECK-NEXT:    ret
18         %tmp1 = and <16 x i8> %a, %b;
19         ret <16 x i8> %tmp1
23 define <8 x i8> @orr8xi8(<8 x i8> %a, <8 x i8> %b) {
24 ; CHECK-LABEL: orr8xi8:
25 ; CHECK:       // %bb.0:
26 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
27 ; CHECK-NEXT:    ret
28         %tmp1 = or <8 x i8> %a, %b;
29         ret <8 x i8> %tmp1
32 define <16 x i8> @orr16xi8(<16 x i8> %a, <16 x i8> %b) {
33 ; CHECK-LABEL: orr16xi8:
34 ; CHECK:       // %bb.0:
35 ; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b
36 ; CHECK-NEXT:    ret
37         %tmp1 = or <16 x i8> %a, %b;
38         ret <16 x i8> %tmp1
42 define <8 x i8> @xor8xi8(<8 x i8> %a, <8 x i8> %b) {
43 ; CHECK-LABEL: xor8xi8:
44 ; CHECK:       // %bb.0:
45 ; CHECK-NEXT:    eor v0.8b, v0.8b, v1.8b
46 ; CHECK-NEXT:    ret
47         %tmp1 = xor <8 x i8> %a, %b;
48         ret <8 x i8> %tmp1
51 define <16 x i8> @xor16xi8(<16 x i8> %a, <16 x i8> %b) {
52 ; CHECK-LABEL: xor16xi8:
53 ; CHECK:       // %bb.0:
54 ; CHECK-NEXT:    eor v0.16b, v0.16b, v1.16b
55 ; CHECK-NEXT:    ret
56         %tmp1 = xor <16 x i8> %a, %b;
57         ret <16 x i8> %tmp1
60 define <8 x i8> @bsl8xi8_const(<8 x i8> %a, <8 x i8> %b)  {
61 ; CHECK-LABEL: bsl8xi8_const:
62 ; CHECK:       // %bb.0:
63 ; CHECK-NEXT:    movi d2, #0x00ffff0000ffff
64 ; CHECK-NEXT:    bif v0.8b, v1.8b, v2.8b
65 ; CHECK-NEXT:    ret
66         %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
67         %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1 >
68         %tmp3 = or <8 x i8> %tmp1, %tmp2
69         ret <8 x i8> %tmp3
72 define <16 x i8> @bsl16xi8_const(<16 x i8> %a, <16 x i8> %b) {
73 ; CHECK-LABEL: bsl16xi8_const:
74 ; CHECK:       // %bb.0:
75 ; CHECK-NEXT:    movi v2.2d, #0x000000ffffffff
76 ; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b
77 ; CHECK-NEXT:    ret
78         %tmp1 = and <16 x i8> %a, < i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0 >
79         %tmp2 = and <16 x i8> %b, < i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1 >
80         %tmp3 = or <16 x i8> %tmp1, %tmp2
81         ret <16 x i8> %tmp3
84 define <8 x i8> @orn8xi8(<8 x i8> %a, <8 x i8> %b)  {
85 ; CHECK-LABEL: orn8xi8:
86 ; CHECK:       // %bb.0:
87 ; CHECK-NEXT:    orn v0.8b, v0.8b, v1.8b
88 ; CHECK-NEXT:    ret
89   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
90   %tmp2 = or <8 x i8> %a, %tmp1
91   ret <8 x i8> %tmp2
94 define <16 x i8> @orn16xi8(<16 x i8> %a, <16 x i8> %b) {
95 ; CHECK-LABEL: orn16xi8:
96 ; CHECK:       // %bb.0:
97 ; CHECK-NEXT:    orn v0.16b, v0.16b, v1.16b
98 ; CHECK-NEXT:    ret
99   %tmp1 = xor <16 x i8> %b, < 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 >
100   %tmp2 = or <16 x i8> %a, %tmp1
101   ret <16 x i8> %tmp2
104 define <8 x i8> @bic8xi8(<8 x i8> %a, <8 x i8> %b)  {
105 ; CHECK-LABEL: bic8xi8:
106 ; CHECK:       // %bb.0:
107 ; CHECK-NEXT:    bic v0.8b, v0.8b, v1.8b
108 ; CHECK-NEXT:    ret
109   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
110   %tmp2 = and <8 x i8> %a, %tmp1
111   ret <8 x i8> %tmp2
114 define <16 x i8> @bic16xi8(<16 x i8> %a, <16 x i8> %b) {
115 ; CHECK-LABEL: bic16xi8:
116 ; CHECK:       // %bb.0:
117 ; CHECK-NEXT:    bic v0.16b, v0.16b, v1.16b
118 ; CHECK-NEXT:    ret
119   %tmp1 = xor <16 x i8> %b, < 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 >
120   %tmp2 = and <16 x i8> %a, %tmp1
121   ret <16 x i8> %tmp2
124 define <2 x i32> @orrimm2s_lsl0(<2 x i32> %a) {
125 ; CHECK-LABEL: orrimm2s_lsl0:
126 ; CHECK:       // %bb.0:
127 ; CHECK-NEXT:    orr v0.2s, #255
128 ; CHECK-NEXT:    ret
129         %tmp1 = or <2 x i32> %a, < i32 255, i32 255>
130         ret <2 x i32> %tmp1
133 define <2 x i32> @orrimm2s_lsl8(<2 x i32> %a) {
134 ; CHECK-LABEL: orrimm2s_lsl8:
135 ; CHECK:       // %bb.0:
136 ; CHECK-NEXT:    orr v0.2s, #255, lsl #8
137 ; CHECK-NEXT:    ret
138         %tmp1 = or <2 x i32> %a, < i32 65280, i32 65280>
139         ret <2 x i32> %tmp1
142 define <2 x i32> @orrimm2s_lsl16(<2 x i32> %a) {
143 ; CHECK-LABEL: orrimm2s_lsl16:
144 ; CHECK:       // %bb.0:
145 ; CHECK-NEXT:    orr v0.2s, #255, lsl #16
146 ; CHECK-NEXT:    ret
147         %tmp1 = or <2 x i32> %a, < i32 16711680, i32 16711680>
148         ret <2 x i32> %tmp1
151 define <2 x i32> @orrimm2s_lsl24(<2 x i32> %a) {
152 ; CHECK-LABEL: orrimm2s_lsl24:
153 ; CHECK:       // %bb.0:
154 ; CHECK-NEXT:    orr v0.2s, #255, lsl #24
155 ; CHECK-NEXT:    ret
156         %tmp1 = or <2 x i32> %a, < i32 4278190080, i32 4278190080>
157         ret <2 x i32> %tmp1
160 define <4 x i32> @orrimm4s_lsl0(<4 x i32> %a) {
161 ; CHECK-LABEL: orrimm4s_lsl0:
162 ; CHECK:       // %bb.0:
163 ; CHECK-NEXT:    orr v0.4s, #255
164 ; CHECK-NEXT:    ret
165         %tmp1 = or <4 x i32> %a, < i32 255, i32 255, i32 255, i32 255>
166         ret <4 x i32> %tmp1
169 define <4 x i32> @orrimm4s_lsl8(<4 x i32> %a) {
170 ; CHECK-LABEL: orrimm4s_lsl8:
171 ; CHECK:       // %bb.0:
172 ; CHECK-NEXT:    orr v0.4s, #255, lsl #8
173 ; CHECK-NEXT:    ret
174         %tmp1 = or <4 x i32> %a, < i32 65280, i32 65280, i32 65280, i32 65280>
175         ret <4 x i32> %tmp1
178 define <4 x i32> @orrimm4s_lsl16(<4 x i32> %a) {
179 ; CHECK-LABEL: orrimm4s_lsl16:
180 ; CHECK:       // %bb.0:
181 ; CHECK-NEXT:    orr v0.4s, #255, lsl #16
182 ; CHECK-NEXT:    ret
183         %tmp1 = or <4 x i32> %a, < i32 16711680, i32 16711680, i32 16711680, i32 16711680>
184         ret <4 x i32> %tmp1
187 define <4 x i32> @orrimm4s_lsl24(<4 x i32> %a) {
188 ; CHECK-LABEL: orrimm4s_lsl24:
189 ; CHECK:       // %bb.0:
190 ; CHECK-NEXT:    orr v0.4s, #255, lsl #24
191 ; CHECK-NEXT:    ret
192         %tmp1 = or <4 x i32> %a, < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080>
193         ret <4 x i32> %tmp1
196 define <4 x i16> @orrimm4h_lsl0(<4 x i16> %a) {
197 ; CHECK-LABEL: orrimm4h_lsl0:
198 ; CHECK:       // %bb.0:
199 ; CHECK-NEXT:    orr v0.4h, #255
200 ; CHECK-NEXT:    ret
201         %tmp1 = or <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255 >
202         ret <4 x i16> %tmp1
205 define <4 x i16> @orrimm4h_lsl8(<4 x i16> %a) {
206 ; CHECK-LABEL: orrimm4h_lsl8:
207 ; CHECK:       // %bb.0:
208 ; CHECK-NEXT:    orr v0.4h, #255, lsl #8
209 ; CHECK-NEXT:    ret
210         %tmp1 = or <4 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280 >
211         ret <4 x i16> %tmp1
214 define <8 x i16> @orrimm8h_lsl0(<8 x i16> %a) {
215 ; CHECK-LABEL: orrimm8h_lsl0:
216 ; CHECK:       // %bb.0:
217 ; CHECK-NEXT:    orr v0.8h, #255
218 ; CHECK-NEXT:    ret
219         %tmp1 = or <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
220         ret <8 x i16> %tmp1
223 define <8 x i16> @orrimm8h_lsl8(<8 x i16> %a) {
224 ; CHECK-LABEL: orrimm8h_lsl8:
225 ; CHECK:       // %bb.0:
226 ; CHECK-NEXT:    orr v0.8h, #255, lsl #8
227 ; CHECK-NEXT:    ret
228         %tmp1 = or <8 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
229         ret <8 x i16> %tmp1
232 define <2 x i32> @bicimm2s_lsl0(<2 x i32> %a) {
233 ; CHECK-LABEL: bicimm2s_lsl0:
234 ; CHECK:       // %bb.0:
235 ; CHECK-NEXT:    bic v0.2s, #16
236 ; CHECK-NEXT:    ret
237         %tmp1 = and <2 x i32> %a, < i32 4294967279, i32 4294967279 >
238         ret <2 x i32> %tmp1
241 define <2 x i32> @bicimm2s_lsl8(<2 x i32> %a) {
242 ; CHECK-LABEL: bicimm2s_lsl8:
243 ; CHECK:       // %bb.0:
244 ; CHECK-NEXT:    bic v0.2s, #16, lsl #8
245 ; CHECK-NEXT:    ret
246         %tmp1 = and <2 x i32> %a, < i32 4294963199, i32  4294963199 >
247         ret <2 x i32> %tmp1
250 define <2 x i32> @bicimm2s_lsl16(<2 x i32> %a) {
251 ; CHECK-LABEL: bicimm2s_lsl16:
252 ; CHECK:       // %bb.0:
253 ; CHECK-NEXT:    bic v0.2s, #16, lsl #16
254 ; CHECK-NEXT:    ret
255         %tmp1 = and <2 x i32> %a, < i32 4293918719, i32 4293918719 >
256         ret <2 x i32> %tmp1
259 define <2 x i32> @bicimm2s_lsl124(<2 x i32> %a) {
260 ; CHECK-LABEL: bicimm2s_lsl124:
261 ; CHECK:       // %bb.0:
262 ; CHECK-NEXT:    bic v0.2s, #16, lsl #24
263 ; CHECK-NEXT:    ret
264         %tmp1 = and <2 x i32> %a, < i32 4026531839, i32  4026531839>
265         ret <2 x i32> %tmp1
268 define <4 x i32> @bicimm4s_lsl0(<4 x i32> %a) {
269 ; CHECK-LABEL: bicimm4s_lsl0:
270 ; CHECK:       // %bb.0:
271 ; CHECK-NEXT:    bic v0.4s, #16
272 ; CHECK-NEXT:    ret
273         %tmp1 = and <4 x i32> %a, < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
274         ret <4 x i32> %tmp1
277 define <4 x i32> @bicimm4s_lsl8(<4 x i32> %a) {
278 ; CHECK-LABEL: bicimm4s_lsl8:
279 ; CHECK:       // %bb.0:
280 ; CHECK-NEXT:    bic v0.4s, #16, lsl #8
281 ; CHECK-NEXT:    ret
282         %tmp1 = and <4 x i32> %a, < i32 4294963199, i32  4294963199, i32  4294963199, i32  4294963199 >
283         ret <4 x i32> %tmp1
286 define <4 x i32> @bicimm4s_lsl16(<4 x i32> %a) {
287 ; CHECK-LABEL: bicimm4s_lsl16:
288 ; CHECK:       // %bb.0:
289 ; CHECK-NEXT:    bic v0.4s, #16, lsl #16
290 ; CHECK-NEXT:    ret
291         %tmp1 = and <4 x i32> %a, < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
292         ret <4 x i32> %tmp1
295 define <4 x i32> @bicimm4s_lsl124(<4 x i32> %a) {
296 ; CHECK-LABEL: bicimm4s_lsl124:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    bic v0.4s, #16, lsl #24
299 ; CHECK-NEXT:    ret
300         %tmp1 = and <4 x i32> %a, < i32 4026531839, i32  4026531839, i32  4026531839, i32  4026531839>
301         ret <4 x i32> %tmp1
304 define <4 x i16> @bicimm4h_lsl0_a(<4 x i16> %a) {
305 ; CHECK-LABEL: bicimm4h_lsl0_a:
306 ; CHECK:       // %bb.0:
307 ; CHECK-NEXT:    bic v0.4h, #16
308 ; CHECK-NEXT:    ret
309         %tmp1 = and <4 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
310         ret <4 x i16> %tmp1
313 define <4 x i16> @bicimm4h_lsl0_b(<4 x i16> %a) {
314 ; CHECK-LABEL: bicimm4h_lsl0_b:
315 ; CHECK:       // %bb.0:
316 ; CHECK-NEXT:    bic v0.4h, #255
317 ; CHECK-NEXT:    ret
318         %tmp1 = and <4 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280 >
319         ret <4 x i16> %tmp1
322 define <4 x i16> @bicimm4h_lsl8_a(<4 x i16> %a) {
323 ; CHECK-LABEL: bicimm4h_lsl8_a:
324 ; CHECK:       // %bb.0:
325 ; CHECK-NEXT:    bic v0.4h, #16, lsl #8
326 ; CHECK-NEXT:    ret
327         %tmp1 = and <4 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
328         ret <4 x i16> %tmp1
331 define <4 x i16> @bicimm4h_lsl8_b(<4 x i16> %a) {
332 ; CHECK-LABEL: bicimm4h_lsl8_b:
333 ; CHECK:       // %bb.0:
334 ; CHECK-NEXT:    bic v0.4h, #255, lsl #8
335 ; CHECK-NEXT:    ret
336         %tmp1 = and <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255>
337         ret <4 x i16> %tmp1
340 define <8 x i16> @bicimm8h_lsl0_a(<8 x i16> %a) {
341 ; CHECK-LABEL: bicimm8h_lsl0_a:
342 ; CHECK:       // %bb.0:
343 ; CHECK-NEXT:    bic v0.8h, #16
344 ; CHECK-NEXT:    ret
345         %tmp1 = and <8 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279,
346    i16  4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
347         ret <8 x i16> %tmp1
350 define <8 x i16> @bicimm8h_lsl0_b(<8 x i16> %a) {
351 ; CHECK-LABEL: bicimm8h_lsl0_b:
352 ; CHECK:       // %bb.0:
353 ; CHECK-NEXT:    bic v0.8h, #255
354 ; CHECK-NEXT:    ret
355         %tmp1 = and <8 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280, i16 65280, i16  65280, i16  65280, i16 65280 >
356         ret <8 x i16> %tmp1
359 define <8 x i16> @bicimm8h_lsl8_a(<8 x i16> %a) {
360 ; CHECK-LABEL: bicimm8h_lsl8_a:
361 ; CHECK:       // %bb.0:
362 ; CHECK-NEXT:    bic v0.8h, #16, lsl #8
363 ; CHECK-NEXT:    ret
364         %tmp1 = and <8 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199,
365    i16  4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
366         ret <8 x i16> %tmp1
369 define <8 x i16> @bicimm8h_lsl8_b(<8 x i16> %a) {
370 ; CHECK-LABEL: bicimm8h_lsl8_b:
371 ; CHECK:       // %bb.0:
372 ; CHECK-NEXT:    bic v0.8h, #255, lsl #8
373 ; CHECK-NEXT:    ret
374         %tmp1 = and <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
375         ret <8 x i16> %tmp1
378 define <2 x i32> @and2xi32(<2 x i32> %a, <2 x i32> %b) {
379 ; CHECK-LABEL: and2xi32:
380 ; CHECK:       // %bb.0:
381 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
382 ; CHECK-NEXT:    ret
383         %tmp1 = and <2 x i32> %a, %b;
384         ret <2 x i32> %tmp1
387 define <4 x i16> @and4xi16(<4 x i16> %a, <4 x i16> %b) {
388 ; CHECK-LABEL: and4xi16:
389 ; CHECK:       // %bb.0:
390 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
391 ; CHECK-NEXT:    ret
392         %tmp1 = and <4 x i16> %a, %b;
393         ret <4 x i16> %tmp1
396 define <1 x i64> @and1xi64(<1 x i64> %a, <1 x i64> %b) {
397 ; CHECK-LABEL: and1xi64:
398 ; CHECK:       // %bb.0:
399 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
400 ; CHECK-NEXT:    ret
401         %tmp1 = and <1 x i64> %a, %b;
402         ret <1 x i64> %tmp1
405 define <4 x i32> @and4xi32(<4 x i32> %a, <4 x i32> %b) {
406 ; CHECK-LABEL: and4xi32:
407 ; CHECK:       // %bb.0:
408 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
409 ; CHECK-NEXT:    ret
410         %tmp1 = and <4 x i32> %a, %b;
411         ret <4 x i32> %tmp1
414 define <8 x i16> @and8xi16(<8 x i16> %a, <8 x i16> %b) {
415 ; CHECK-LABEL: and8xi16:
416 ; CHECK:       // %bb.0:
417 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
418 ; CHECK-NEXT:    ret
419         %tmp1 = and <8 x i16> %a, %b;
420         ret <8 x i16> %tmp1
423 define <2 x i64> @and2xi64(<2 x i64> %a, <2 x i64> %b) {
424 ; CHECK-LABEL: and2xi64:
425 ; CHECK:       // %bb.0:
426 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
427 ; CHECK-NEXT:    ret
428         %tmp1 = and <2 x i64> %a, %b;
429         ret <2 x i64> %tmp1
432 define <2 x i32> @orr2xi32(<2 x i32> %a, <2 x i32> %b) {
433 ; CHECK-LABEL: orr2xi32:
434 ; CHECK:       // %bb.0:
435 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
436 ; CHECK-NEXT:    ret
437         %tmp1 = or <2 x i32> %a, %b;
438         ret <2 x i32> %tmp1
441 define <4 x i16> @orr4xi16(<4 x i16> %a, <4 x i16> %b) {
442 ; CHECK-LABEL: orr4xi16:
443 ; CHECK:       // %bb.0:
444 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
445 ; CHECK-NEXT:    ret
446         %tmp1 = or <4 x i16> %a, %b;
447         ret <4 x i16> %tmp1
450 define <1 x i64> @orr1xi64(<1 x i64> %a, <1 x i64> %b) {
451 ; CHECK-LABEL: orr1xi64:
452 ; CHECK:       // %bb.0:
453 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
454 ; CHECK-NEXT:    ret
455         %tmp1 = or <1 x i64> %a, %b;
456         ret <1 x i64> %tmp1
459 define <4 x i32> @orr4xi32(<4 x i32> %a, <4 x i32> %b) {
460 ; CHECK-LABEL: orr4xi32:
461 ; CHECK:       // %bb.0:
462 ; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b
463 ; CHECK-NEXT:    ret
464         %tmp1 = or <4 x i32> %a, %b;
465         ret <4 x i32> %tmp1
468 define <8 x i16> @orr8xi16(<8 x i16> %a, <8 x i16> %b) {
469 ; CHECK-LABEL: orr8xi16:
470 ; CHECK:       // %bb.0:
471 ; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b
472 ; CHECK-NEXT:    ret
473         %tmp1 = or <8 x i16> %a, %b;
474         ret <8 x i16> %tmp1
477 define <2 x i64> @orr2xi64(<2 x i64> %a, <2 x i64> %b) {
478 ; CHECK-LABEL: orr2xi64:
479 ; CHECK:       // %bb.0:
480 ; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b
481 ; CHECK-NEXT:    ret
482         %tmp1 = or <2 x i64> %a, %b;
483         ret <2 x i64> %tmp1
486 define <2 x i32> @eor2xi32(<2 x i32> %a, <2 x i32> %b) {
487 ; CHECK-LABEL: eor2xi32:
488 ; CHECK:       // %bb.0:
489 ; CHECK-NEXT:    eor v0.8b, v0.8b, v1.8b
490 ; CHECK-NEXT:    ret
491         %tmp1 = xor <2 x i32> %a, %b;
492         ret <2 x i32> %tmp1
495 define <4 x i16> @eor4xi16(<4 x i16> %a, <4 x i16> %b) {
496 ; CHECK-LABEL: eor4xi16:
497 ; CHECK:       // %bb.0:
498 ; CHECK-NEXT:    eor v0.8b, v0.8b, v1.8b
499 ; CHECK-NEXT:    ret
500         %tmp1 = xor <4 x i16> %a, %b;
501         ret <4 x i16> %tmp1
504 define <1 x i64> @eor1xi64(<1 x i64> %a, <1 x i64> %b) {
505 ; CHECK-LABEL: eor1xi64:
506 ; CHECK:       // %bb.0:
507 ; CHECK-NEXT:    eor v0.8b, v0.8b, v1.8b
508 ; CHECK-NEXT:    ret
509         %tmp1 = xor <1 x i64> %a, %b;
510         ret <1 x i64> %tmp1
513 define <4 x i32> @eor4xi32(<4 x i32> %a, <4 x i32> %b) {
514 ; CHECK-LABEL: eor4xi32:
515 ; CHECK:       // %bb.0:
516 ; CHECK-NEXT:    eor v0.16b, v0.16b, v1.16b
517 ; CHECK-NEXT:    ret
518         %tmp1 = xor <4 x i32> %a, %b;
519         ret <4 x i32> %tmp1
522 define <8 x i16> @eor8xi16(<8 x i16> %a, <8 x i16> %b) {
523 ; CHECK-LABEL: eor8xi16:
524 ; CHECK:       // %bb.0:
525 ; CHECK-NEXT:    eor v0.16b, v0.16b, v1.16b
526 ; CHECK-NEXT:    ret
527         %tmp1 = xor <8 x i16> %a, %b;
528         ret <8 x i16> %tmp1
531 define <2 x i64> @eor2xi64(<2 x i64> %a, <2 x i64> %b) {
532 ; CHECK-LABEL: eor2xi64:
533 ; CHECK:       // %bb.0:
534 ; CHECK-NEXT:    eor v0.16b, v0.16b, v1.16b
535 ; CHECK-NEXT:    ret
536         %tmp1 = xor <2 x i64> %a, %b;
537         ret <2 x i64> %tmp1
541 define <2 x i32> @bic2xi32(<2 x i32> %a, <2 x i32> %b)  {
542 ; CHECK-LABEL: bic2xi32:
543 ; CHECK:       // %bb.0:
544 ; CHECK-NEXT:    bic v0.8b, v0.8b, v1.8b
545 ; CHECK-NEXT:    ret
546   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
547   %tmp2 = and <2 x i32> %a, %tmp1
548   ret <2 x i32> %tmp2
551 define <4 x i16> @bic4xi16(<4 x i16> %a, <4 x i16> %b)  {
552 ; CHECK-LABEL: bic4xi16:
553 ; CHECK:       // %bb.0:
554 ; CHECK-NEXT:    bic v0.8b, v0.8b, v1.8b
555 ; CHECK-NEXT:    ret
556   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
557   %tmp2 = and <4 x i16> %a, %tmp1
558   ret <4 x i16> %tmp2
561 define <1 x i64> @bic1xi64(<1 x i64> %a, <1 x i64> %b)  {
562 ; CHECK-LABEL: bic1xi64:
563 ; CHECK:       // %bb.0:
564 ; CHECK-NEXT:    bic v0.8b, v0.8b, v1.8b
565 ; CHECK-NEXT:    ret
566   %tmp1 = xor <1 x i64> %b, < i64 -1>
567   %tmp2 = and <1 x i64> %a, %tmp1
568   ret <1 x i64> %tmp2
571 define <4 x i32> @bic4xi32(<4 x i32> %a, <4 x i32> %b)  {
572 ; CHECK-LABEL: bic4xi32:
573 ; CHECK:       // %bb.0:
574 ; CHECK-NEXT:    bic v0.16b, v0.16b, v1.16b
575 ; CHECK-NEXT:    ret
576   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
577   %tmp2 = and <4 x i32> %a, %tmp1
578   ret <4 x i32> %tmp2
581 define <8 x i16> @bic8xi16(<8 x i16> %a, <8 x i16> %b)  {
582 ; CHECK-LABEL: bic8xi16:
583 ; CHECK:       // %bb.0:
584 ; CHECK-NEXT:    bic v0.16b, v0.16b, v1.16b
585 ; CHECK-NEXT:    ret
586   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
587   %tmp2 = and <8 x i16> %a, %tmp1
588   ret <8 x i16> %tmp2
591 define <2 x i64> @bic2xi64(<2 x i64> %a, <2 x i64> %b)  {
592 ; CHECK-LABEL: bic2xi64:
593 ; CHECK:       // %bb.0:
594 ; CHECK-NEXT:    bic v0.16b, v0.16b, v1.16b
595 ; CHECK-NEXT:    ret
596   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
597   %tmp2 = and <2 x i64> %a, %tmp1
598   ret <2 x i64> %tmp2
601 define <2 x i32> @orn2xi32(<2 x i32> %a, <2 x i32> %b)  {
602 ; CHECK-LABEL: orn2xi32:
603 ; CHECK:       // %bb.0:
604 ; CHECK-NEXT:    orn v0.8b, v0.8b, v1.8b
605 ; CHECK-NEXT:    ret
606   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
607   %tmp2 = or <2 x i32> %a, %tmp1
608   ret <2 x i32> %tmp2
611 define <4 x i16> @orn4xi16(<4 x i16> %a, <4 x i16> %b)  {
612 ; CHECK-LABEL: orn4xi16:
613 ; CHECK:       // %bb.0:
614 ; CHECK-NEXT:    orn v0.8b, v0.8b, v1.8b
615 ; CHECK-NEXT:    ret
616   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
617   %tmp2 = or <4 x i16> %a, %tmp1
618   ret <4 x i16> %tmp2
621 define <1 x i64> @orn1xi64(<1 x i64> %a, <1 x i64> %b)  {
622 ; CHECK-LABEL: orn1xi64:
623 ; CHECK:       // %bb.0:
624 ; CHECK-NEXT:    orn v0.8b, v0.8b, v1.8b
625 ; CHECK-NEXT:    ret
626   %tmp1 = xor <1 x i64> %b, < i64 -1>
627   %tmp2 = or <1 x i64> %a, %tmp1
628   ret <1 x i64> %tmp2
631 define <4 x i32> @orn4xi32(<4 x i32> %a, <4 x i32> %b)  {
632 ; CHECK-LABEL: orn4xi32:
633 ; CHECK:       // %bb.0:
634 ; CHECK-NEXT:    orn v0.16b, v0.16b, v1.16b
635 ; CHECK-NEXT:    ret
636   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
637   %tmp2 = or <4 x i32> %a, %tmp1
638   ret <4 x i32> %tmp2
641 define <8 x i16> @orn8xi16(<8 x i16> %a, <8 x i16> %b)  {
642 ; CHECK-LABEL: orn8xi16:
643 ; CHECK:       // %bb.0:
644 ; CHECK-NEXT:    orn v0.16b, v0.16b, v1.16b
645 ; CHECK-NEXT:    ret
646   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
647   %tmp2 = or <8 x i16> %a, %tmp1
648   ret <8 x i16> %tmp2
651 define <2 x i64> @orn2xi64(<2 x i64> %a, <2 x i64> %b)  {
652 ; CHECK-LABEL: orn2xi64:
653 ; CHECK:       // %bb.0:
654 ; CHECK-NEXT:    orn v0.16b, v0.16b, v1.16b
655 ; CHECK-NEXT:    ret
656   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
657   %tmp2 = or <2 x i64> %a, %tmp1
658   ret <2 x i64> %tmp2
661 define <2 x i32> @bsl2xi32_const(<2 x i32> %a, <2 x i32> %b)  {
662 ; CHECK-LABEL: bsl2xi32_const:
663 ; CHECK:       // %bb.0:
664 ; CHECK-NEXT:    movi d2, #0x000000ffffffff
665 ; CHECK-NEXT:    bif v0.8b, v1.8b, v2.8b
666 ; CHECK-NEXT:    ret
667         %tmp1 = and <2 x i32> %a, < i32 -1, i32 0 >
668         %tmp2 = and <2 x i32> %b, < i32 0, i32 -1 >
669         %tmp3 = or <2 x i32> %tmp1, %tmp2
670         ret <2 x i32> %tmp3
674 define <4 x i16> @bsl4xi16_const(<4 x i16> %a, <4 x i16> %b)  {
675 ; CHECK-LABEL: bsl4xi16_const:
676 ; CHECK:       // %bb.0:
677 ; CHECK-NEXT:    movi d2, #0x00ffff0000ffff
678 ; CHECK-NEXT:    bif v0.8b, v1.8b, v2.8b
679 ; CHECK-NEXT:    ret
680         %tmp1 = and <4 x i16> %a, < i16 -1, i16 0, i16 -1,i16 0 >
681         %tmp2 = and <4 x i16> %b, < i16 0, i16 -1,i16 0, i16 -1 >
682         %tmp3 = or <4 x i16> %tmp1, %tmp2
683         ret <4 x i16> %tmp3
686 define <1 x i64> @bsl1xi64_const(<1 x i64> %a, <1 x i64> %b)  {
687 ; CHECK-LABEL: bsl1xi64_const:
688 ; CHECK:       // %bb.0:
689 ; CHECK-NEXT:    movi d2, #0xffffffffffffff00
690 ; CHECK-NEXT:    bif v0.8b, v1.8b, v2.8b
691 ; CHECK-NEXT:    ret
692         %tmp1 = and <1 x i64> %a, < i64 -256 >
693         %tmp2 = and <1 x i64> %b, < i64 255 >
694         %tmp3 = or <1 x i64> %tmp1, %tmp2
695         ret <1 x i64> %tmp3
698 define <4 x i32> @bsl4xi32_const(<4 x i32> %a, <4 x i32> %b)  {
699 ; CHECK-LABEL: bsl4xi32_const:
700 ; CHECK:       // %bb.0:
701 ; CHECK-NEXT:    movi v2.2d, #0x000000ffffffff
702 ; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b
703 ; CHECK-NEXT:    ret
704         %tmp1 = and <4 x i32> %a, < i32 -1, i32 0, i32 -1, i32 0 >
705         %tmp2 = and <4 x i32> %b, < i32 0, i32 -1, i32 0, i32 -1 >
706         %tmp3 = or <4 x i32> %tmp1, %tmp2
707         ret <4 x i32> %tmp3
710 define <8 x i16> @bsl8xi16_const(<8 x i16> %a, <8 x i16> %b)  {
711 ; CHECK-LABEL: bsl8xi16_const:
712 ; CHECK:       // %bb.0:
713 ; CHECK-NEXT:    movi v2.2d, #0x000000ffffffff
714 ; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b
715 ; CHECK-NEXT:    ret
716         %tmp1 = and <8 x i16> %a, < i16 -1, i16 -1, i16 0,i16 0, i16 -1, i16 -1, i16 0,i16 0 >
717         %tmp2 = and <8 x i16> %b, < i16 0, i16 0, i16 -1, i16 -1, i16 0, i16 0, i16 -1, i16 -1 >
718         %tmp3 = or <8 x i16> %tmp1, %tmp2
719         ret <8 x i16> %tmp3
722 define <2 x i64> @bsl2xi64_const(<2 x i64> %a, <2 x i64> %b)  {
723 ; CHECK-LABEL: bsl2xi64_const:
724 ; CHECK:       // %bb.0:
725 ; CHECK-NEXT:    adrp x8, .LCPI75_0
726 ; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI75_0]
727 ; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b
728 ; CHECK-NEXT:    ret
729         %tmp1 = and <2 x i64> %a, < i64 -1, i64 0 >
730         %tmp2 = and <2 x i64> %b, < i64 0, i64 -1 >
731         %tmp3 = or <2 x i64> %tmp1, %tmp2
732         ret <2 x i64> %tmp3
736 define <8 x i8> @bsl8xi8(<8 x i8> %v1, <8 x i8> %v2, <8 x i8> %v3) {
737 ; CHECK-LABEL: bsl8xi8:
738 ; CHECK:       // %bb.0:
739 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
740 ; CHECK-NEXT:    ret
741   %1 = and <8 x i8> %v1, %v2
742   %2 = xor <8 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
743   %3 = and <8 x i8> %2, %v3
744   %4 = or <8 x i8> %1, %3
745   ret <8 x i8> %4
748 define <4 x i16> @bsl4xi16(<4 x i16> %v1, <4 x i16> %v2, <4 x i16> %v3) {
749 ; CHECK-LABEL: bsl4xi16:
750 ; CHECK:       // %bb.0:
751 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
752 ; CHECK-NEXT:    ret
753   %1 = and <4 x i16> %v1, %v2
754   %2 = xor <4 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1>
755   %3 = and <4 x i16> %2, %v3
756   %4 = or <4 x i16> %1, %3
757   ret <4 x i16> %4
760 define <2 x i32> @bsl2xi32(<2 x i32> %v1, <2 x i32> %v2, <2 x i32> %v3) {
761 ; CHECK-LABEL: bsl2xi32:
762 ; CHECK:       // %bb.0:
763 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
764 ; CHECK-NEXT:    ret
765   %1 = and <2 x i32> %v1, %v2
766   %2 = xor <2 x i32> %v1, <i32 -1, i32 -1>
767   %3 = and <2 x i32> %2, %v3
768   %4 = or <2 x i32> %1, %3
769   ret <2 x i32> %4
772 define <1 x i64> @bsl1xi64(<1 x i64> %v1, <1 x i64> %v2, <1 x i64> %v3) {
773 ; CHECK-LABEL: bsl1xi64:
774 ; CHECK:       // %bb.0:
775 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
776 ; CHECK-NEXT:    ret
777   %1 = and <1 x i64> %v1, %v2
778   %2 = xor <1 x i64> %v1, <i64 -1>
779   %3 = and <1 x i64> %2, %v3
780   %4 = or <1 x i64> %1, %3
781   ret <1 x i64> %4
784 define <16 x i8> @bsl16xi8(<16 x i8> %v1, <16 x i8> %v2, <16 x i8> %v3) {
785 ; CHECK-LABEL: bsl16xi8:
786 ; CHECK:       // %bb.0:
787 ; CHECK-NEXT:    bsl v0.16b, v1.16b, v2.16b
788 ; CHECK-NEXT:    ret
789   %1 = and <16 x i8> %v1, %v2
790   %2 = xor <16 x i8> %v1, <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>
791   %3 = and <16 x i8> %2, %v3
792   %4 = or <16 x i8> %1, %3
793   ret <16 x i8> %4
796 define <8 x i16> @bsl8xi16(<8 x i16> %v1, <8 x i16> %v2, <8 x i16> %v3) {
797 ; CHECK-LABEL: bsl8xi16:
798 ; CHECK:       // %bb.0:
799 ; CHECK-NEXT:    bsl v0.16b, v1.16b, v2.16b
800 ; CHECK-NEXT:    ret
801   %1 = and <8 x i16> %v1, %v2
802   %2 = xor <8 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
803   %3 = and <8 x i16> %2, %v3
804   %4 = or <8 x i16> %1, %3
805   ret <8 x i16> %4
808 define <4 x i32> @bsl4xi32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
809 ; CHECK-LABEL: bsl4xi32:
810 ; CHECK:       // %bb.0:
811 ; CHECK-NEXT:    bsl v0.16b, v1.16b, v2.16b
812 ; CHECK-NEXT:    ret
813   %1 = and <4 x i32> %v1, %v2
814   %2 = xor <4 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1>
815   %3 = and <4 x i32> %2, %v3
816   %4 = or <4 x i32> %1, %3
817   ret <4 x i32> %4
820 define <8 x i8> @vselect_constant_cond_zero_v8i8(<8 x i8> %a) {
821 ; CHECK-LABEL: vselect_constant_cond_zero_v8i8:
822 ; CHECK:       // %bb.0:
823 ; CHECK-NEXT:    movi d1, #0x00000000ff00ff
824 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
825 ; CHECK-NEXT:    orr v0.2s, #0
826 ; CHECK-NEXT:    ret
827   %b = select <8 x i1> <i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> zeroinitializer
828   ret <8 x i8> %b
831 define <4 x i16> @vselect_constant_cond_zero_v4i16(<4 x i16> %a) {
832 ; CHECK-LABEL: vselect_constant_cond_zero_v4i16:
833 ; CHECK:       // %bb.0:
834 ; CHECK-NEXT:    movi d1, #0xffff00000000ffff
835 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
836 ; CHECK-NEXT:    orr v0.2s, #0
837 ; CHECK-NEXT:    ret
838   %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i16> %a, <4 x i16> zeroinitializer
839   ret <4 x i16> %b
842 define <4 x i32> @vselect_constant_cond_zero_v4i32(<4 x i32> %a) {
843 ; CHECK-LABEL: vselect_constant_cond_zero_v4i32:
844 ; CHECK:       // %bb.0:
845 ; CHECK-NEXT:    adrp x8, .LCPI85_0
846 ; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI85_0]
847 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
848 ; CHECK-NEXT:    orr v0.4s, #0
849 ; CHECK-NEXT:    ret
850   %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i32> %a, <4 x i32> zeroinitializer
851   ret <4 x i32> %b
854 define <8 x i8> @vselect_constant_cond_v8i8(<8 x i8> %a, <8 x i8> %b) {
855 ; CHECK-LABEL: vselect_constant_cond_v8i8:
856 ; CHECK:       // %bb.0:
857 ; CHECK-NEXT:    movi d2, #0xffffffffff00ff00
858 ; CHECK-NEXT:    movi d3, #0x00000000ff00ff
859 ; CHECK-NEXT:    and v1.8b, v1.8b, v2.8b
860 ; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b
861 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
862 ; CHECK-NEXT:    ret
863   %c = select <8 x i1> <i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> %b
864   ret <8 x i8> %c
867 define <4 x i16> @vselect_constant_cond_v4i16(<4 x i16> %a, <4 x i16> %b) {
868 ; CHECK-LABEL: vselect_constant_cond_v4i16:
869 ; CHECK:       // %bb.0:
870 ; CHECK-NEXT:    movi d2, #0x00ffffffff0000
871 ; CHECK-NEXT:    movi d3, #0xffff00000000ffff
872 ; CHECK-NEXT:    and v1.8b, v1.8b, v2.8b
873 ; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b
874 ; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b
875 ; CHECK-NEXT:    ret
876   %c = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i16> %a, <4 x i16> %b
877   ret <4 x i16> %c
880 define <4 x i32> @vselect_constant_cond_v4i32(<4 x i32> %a, <4 x i32> %b) {
881 ; CHECK-LABEL: vselect_constant_cond_v4i32:
882 ; CHECK:       // %bb.0:
883 ; CHECK-NEXT:    adrp x8, .LCPI88_0
884 ; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI88_0]
885 ; CHECK-NEXT:    bif v0.16b, v1.16b, v2.16b
886 ; CHECK-NEXT:    ret
887   %c = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i32> %a, <4 x i32> %b
888   ret <4 x i32> %c
891 define <8 x i8> @vselect_equivalent_shuffle_v8i8(<8 x i8> %a, <8 x i8> %b) {
892 ; CHECK-LABEL: vselect_equivalent_shuffle_v8i8:
893 ; CHECK:       // %bb.0:
894 ; CHECK-NEXT:    adrp x8, .LCPI89_0
895 ; CHECK-NEXT:    ldr d2, [x8, :lo12:.LCPI89_0]
896 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
897 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
898 ; CHECK-NEXT:    mov v0.d[1], v1.d[0]
899 ; CHECK-NEXT:    tbl v0.8b, { v0.16b }, v2.8b
900 ; CHECK-NEXT:    ret
901   %c = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 9, i32 4, i32 5, i32 6, i32 7>
902   ret <8 x i8> %c
905 define <8 x i16> @vselect_equivalent_shuffle_v8i16(<8 x i16> %a, <8 x i16> %b) {
906 ; CHECK-LABEL: vselect_equivalent_shuffle_v8i16:
907 ; CHECK:       // %bb.0:
908 ; CHECK-NEXT:    adrp x8, .LCPI90_0
909 ; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI90_0]
910 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
911 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
912 ; CHECK-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b
913 ; CHECK-NEXT:    ret
914   %c = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 9, i32 4, i32 5, i32 6, i32 7>
915   ret <8 x i16> %c
918 define <4 x i16> @vselect_equivalent_shuffle_v4i16(<4 x i16> %a, <4 x i16> %b) {
919 ; CHECK-LABEL: vselect_equivalent_shuffle_v4i16:
920 ; CHECK:       // %bb.0:
921 ; CHECK-NEXT:    ext v0.8b, v0.8b, v0.8b, #2
922 ; CHECK-NEXT:    ext v0.8b, v0.8b, v1.8b, #4
923 ; CHECK-NEXT:    ext v0.8b, v0.8b, v0.8b, #2
924 ; CHECK-NEXT:    ret
925   %c = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 3>
926   ret <4 x i16> %c
929 define <4 x i32> @vselect_equivalent_shuffle_v4i32(<4 x i32> %a, <4 x i32> %b) {
930 ; CHECK-LABEL: vselect_equivalent_shuffle_v4i32:
931 ; CHECK:       // %bb.0:
932 ; CHECK-NEXT:    ext v0.16b, v0.16b, v0.16b, #4
933 ; CHECK-NEXT:    ext v0.16b, v0.16b, v1.16b, #8
934 ; CHECK-NEXT:    ext v0.16b, v0.16b, v0.16b, #4
935 ; CHECK-NEXT:    ret
936   %c = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 3>
937   ret <4 x i32> %c
940 define <8 x i8> @vselect_cmp_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
941 ; CHECK-LABEL: vselect_cmp_ne:
942 ; CHECK:       // %bb.0:
943 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, v1.8b
944 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v1.8b
945 ; CHECK-NEXT:    ret
946   %cmp = icmp ne <8 x i8> %a, %b
947   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
948   ret <8 x i8> %d
951 define <8 x i8> @vselect_cmp_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
952 ; CHECK-LABEL: vselect_cmp_eq:
953 ; CHECK:       // %bb.0:
954 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, v1.8b
955 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
956 ; CHECK-NEXT:    ret
957   %cmp = icmp eq <8 x i8> %a, %b
958   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
959   ret <8 x i8> %d
962 define <8 x i8> @vselect_cmpz_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
963 ; CHECK-LABEL: vselect_cmpz_ne:
964 ; CHECK:       // %bb.0:
965 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, #0
966 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v1.8b
967 ; CHECK-NEXT:    ret
968   %cmp = icmp ne <8 x i8> %a, zeroinitializer
969   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
970   ret <8 x i8> %d
973 define <8 x i8> @vselect_cmpz_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
974 ; CHECK-LABEL: vselect_cmpz_eq:
975 ; CHECK:       // %bb.0:
976 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, #0
977 ; CHECK-NEXT:    bsl v0.8b, v1.8b, v2.8b
978 ; CHECK-NEXT:    ret
979   %cmp = icmp eq <8 x i8> %a, zeroinitializer
980   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
981   ret <8 x i8> %d
984 define <8 x i8> @vselect_tst(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
985 ; CHECK-LABEL: vselect_tst:
986 ; CHECK:       // %bb.0:
987 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
988 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, #0
989 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v1.8b
990 ; CHECK-NEXT:    ret
991   %tmp3 = and <8 x i8> %a, %b
992   %tmp4 = icmp eq <8 x i8> %tmp3, zeroinitializer
993   %d = select <8 x i1> %tmp4, <8 x i8> %c, <8 x i8> %b
994   ret <8 x i8> %d
997 define <8 x i8> @sext_tst(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
998 ; CHECK-LABEL: sext_tst:
999 ; CHECK:       // %bb.0:
1000 ; CHECK-NEXT:    cmtst v0.8b, v0.8b, v1.8b
1001 ; CHECK-NEXT:    ret
1002   %tmp3 = and <8 x i8> %a, %b
1003   %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
1004   %d = sext <8 x i1> %tmp4 to <8 x i8>
1005   ret <8 x i8> %d
1008 define <2 x i64> @bsl2xi64(<2 x i64> %v1, <2 x i64> %v2, <2 x i64> %v3) {
1009 ; CHECK-LABEL: bsl2xi64:
1010 ; CHECK:       // %bb.0:
1011 ; CHECK-NEXT:    bsl v0.16b, v1.16b, v2.16b
1012 ; CHECK-NEXT:    ret
1013   %1 = and <2 x i64> %v1, %v2
1014   %2 = xor <2 x i64> %v1, <i64 -1, i64 -1>
1015   %3 = and <2 x i64> %2, %v3
1016   %4 = or <2 x i64> %1, %3
1017   ret <2 x i64> %4
1020 define <8 x i8> @orrimm8b_as_orrimm4h_lsl0(<8 x i8> %a) {
1021 ; CHECK-LABEL: orrimm8b_as_orrimm4h_lsl0:
1022 ; CHECK:       // %bb.0:
1023 ; CHECK-NEXT:    orr v0.4h, #255
1024 ; CHECK-NEXT:    ret
1025   %val = or <8 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1026   ret <8 x i8> %val
1029 define <8 x i8> @orrimm8b_as_orimm4h_lsl8(<8 x i8> %a) {
1030 ; CHECK-LABEL: orrimm8b_as_orimm4h_lsl8:
1031 ; CHECK:       // %bb.0:
1032 ; CHECK-NEXT:    orr v0.4h, #255, lsl #8
1033 ; CHECK-NEXT:    ret
1034   %val = or <8 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1035   ret <8 x i8> %val
1038 define <16 x i8> @orimm16b_as_orrimm8h_lsl0(<16 x i8> %a) {
1039 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl0:
1040 ; CHECK:       // %bb.0:
1041 ; CHECK-NEXT:    orr v0.8h, #255
1042 ; CHECK-NEXT:    ret
1043   %val = or <16 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1044   ret <16 x i8> %val
1047 define <16 x i8> @orimm16b_as_orrimm8h_lsl8(<16 x i8> %a) {
1048 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl8:
1049 ; CHECK:       // %bb.0:
1050 ; CHECK-NEXT:    orr v0.8h, #255, lsl #8
1051 ; CHECK-NEXT:    ret
1052   %val = or <16 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1053   ret <16 x i8> %val
1056 define <8 x i8> @and8imm2s_lsl0(<8 x i8> %a) {
1057 ; CHECK-LABEL: and8imm2s_lsl0:
1058 ; CHECK:       // %bb.0:
1059 ; CHECK-NEXT:    bic v0.2s, #255
1060 ; CHECK-NEXT:    ret
1061         %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
1062         ret <8 x i8> %tmp1
1065 define <8 x i8> @and8imm2s_lsl8(<8 x i8> %a) {
1066 ; CHECK-LABEL: and8imm2s_lsl8:
1067 ; CHECK:       // %bb.0:
1068 ; CHECK-NEXT:    bic v0.2s, #255, lsl #8
1069 ; CHECK-NEXT:    ret
1070         %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
1071         ret <8 x i8> %tmp1
1074 define <8 x i8> @and8imm2s_lsl16(<8 x i8> %a) {
1075 ; CHECK-LABEL: and8imm2s_lsl16:
1076 ; CHECK:       // %bb.0:
1077 ; CHECK-NEXT:    bic v0.2s, #255, lsl #16
1078 ; CHECK-NEXT:    ret
1079         %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
1080         ret <8 x i8> %tmp1
1083 define <8 x i8> @and8imm2s_lsl24(<8 x i8> %a) {
1084 ; CHECK-LABEL: and8imm2s_lsl24:
1085 ; CHECK:       // %bb.0:
1086 ; CHECK-NEXT:    bic v0.2s, #254, lsl #24
1087 ; CHECK-NEXT:    ret
1088         %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
1089         ret <8 x i8> %tmp1
1092 define <4 x i16> @and16imm2s_lsl0(<4 x i16> %a) {
1093 ; CHECK-LABEL: and16imm2s_lsl0:
1094 ; CHECK:       // %bb.0:
1095 ; CHECK-NEXT:    bic v0.2s, #255
1096 ; CHECK-NEXT:    ret
1097         %tmp1 = and <4 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535>
1098         ret <4 x i16> %tmp1
1101 define <4 x i16> @and16imm2s_lsl8(<4 x i16> %a) {
1102 ; CHECK-LABEL: and16imm2s_lsl8:
1103 ; CHECK:       // %bb.0:
1104 ; CHECK-NEXT:    bic v0.2s, #255, lsl #8
1105 ; CHECK-NEXT:    ret
1106         %tmp1 = and <4 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535>
1107         ret <4 x i16> %tmp1
1110 define <4 x i16> @and16imm2s_lsl16(<4 x i16> %a) {
1111 ; CHECK-LABEL: and16imm2s_lsl16:
1112 ; CHECK:       // %bb.0:
1113 ; CHECK-NEXT:    bic v0.2s, #255, lsl #16
1114 ; CHECK-NEXT:    ret
1115         %tmp1 = and <4 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280>
1116         ret <4 x i16> %tmp1
1119 define <4 x i16> @and16imm2s_lsl24(<4 x i16> %a) {
1120 ; CHECK-LABEL: and16imm2s_lsl24:
1121 ; CHECK:       // %bb.0:
1122 ; CHECK-NEXT:    bic v0.2s, #254, lsl #24
1123 ; CHECK-NEXT:    ret
1124         %tmp1 = and <4 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511>
1125         ret <4 x i16> %tmp1
1129 define <1 x i64> @and64imm2s_lsl0(<1 x i64> %a) {
1130 ; CHECK-LABEL: and64imm2s_lsl0:
1131 ; CHECK:       // %bb.0:
1132 ; CHECK-NEXT:    bic v0.2s, #255
1133 ; CHECK-NEXT:    ret
1134         %tmp1 = and <1 x i64> %a, < i64 -1095216660736>
1135         ret <1 x i64> %tmp1
1138 define <1 x i64> @and64imm2s_lsl8(<1 x i64> %a) {
1139 ; CHECK-LABEL: and64imm2s_lsl8:
1140 ; CHECK:       // %bb.0:
1141 ; CHECK-NEXT:    bic v0.2s, #255, lsl #8
1142 ; CHECK-NEXT:    ret
1143         %tmp1 = and <1 x i64> %a, < i64 -280375465148161>
1144         ret <1 x i64> %tmp1
1147 define <1 x i64> @and64imm2s_lsl16(<1 x i64> %a) {
1148 ; CHECK-LABEL: and64imm2s_lsl16:
1149 ; CHECK:       // %bb.0:
1150 ; CHECK-NEXT:    bic v0.2s, #255, lsl #16
1151 ; CHECK-NEXT:    ret
1152         %tmp1 = and <1 x i64> %a, < i64 -71776119077928961>
1153         ret <1 x i64> %tmp1
1156 define <1 x i64> @and64imm2s_lsl24(<1 x i64> %a) {
1157 ; CHECK-LABEL: and64imm2s_lsl24:
1158 ; CHECK:       // %bb.0:
1159 ; CHECK-NEXT:    bic v0.2s, #254, lsl #24
1160 ; CHECK-NEXT:    ret
1161         %tmp1 = and <1 x i64> %a, < i64 144115183814443007>
1162         ret <1 x i64> %tmp1
1165 define <16 x i8> @and8imm4s_lsl0(<16 x i8> %a) {
1166 ; CHECK-LABEL: and8imm4s_lsl0:
1167 ; CHECK:       // %bb.0:
1168 ; CHECK-NEXT:    bic v0.4s, #255
1169 ; CHECK-NEXT:    ret
1170         %tmp1 = and <16 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
1171         ret <16 x i8> %tmp1
1174 define <16 x i8> @and8imm4s_lsl8(<16 x i8> %a) {
1175 ; CHECK-LABEL: and8imm4s_lsl8:
1176 ; CHECK:       // %bb.0:
1177 ; CHECK-NEXT:    bic v0.4s, #255, lsl #8
1178 ; CHECK-NEXT:    ret
1179         %tmp1 = and <16 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
1180         ret <16 x i8> %tmp1
1183 define <16 x i8> @and8imm4s_lsl16(<16 x i8> %a) {
1184 ; CHECK-LABEL: and8imm4s_lsl16:
1185 ; CHECK:       // %bb.0:
1186 ; CHECK-NEXT:    bic v0.4s, #255, lsl #16
1187 ; CHECK-NEXT:    ret
1188         %tmp1 = and <16 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
1189         ret <16 x i8> %tmp1
1192 define <16 x i8> @and8imm4s_lsl24(<16 x i8> %a) {
1193 ; CHECK-LABEL: and8imm4s_lsl24:
1194 ; CHECK:       // %bb.0:
1195 ; CHECK-NEXT:    bic v0.4s, #254, lsl #24
1196 ; CHECK-NEXT:    ret
1197         %tmp1 = and <16 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
1198         ret <16 x i8> %tmp1
1201 define <8 x i16> @and16imm4s_lsl0(<8 x i16> %a) {
1202 ; CHECK-LABEL: and16imm4s_lsl0:
1203 ; CHECK:       // %bb.0:
1204 ; CHECK-NEXT:    bic v0.4s, #255
1205 ; CHECK-NEXT:    ret
1206         %tmp1 = and <8 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535>
1207         ret <8 x i16> %tmp1
1210 define <8 x i16> @and16imm4s_lsl8(<8 x i16> %a) {
1211 ; CHECK-LABEL: and16imm4s_lsl8:
1212 ; CHECK:       // %bb.0:
1213 ; CHECK-NEXT:    bic v0.4s, #255, lsl #8
1214 ; CHECK-NEXT:    ret
1215         %tmp1 = and <8 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535>
1216         ret <8 x i16> %tmp1
1219 define <8 x i16> @and16imm4s_lsl16(<8 x i16> %a) {
1220 ; CHECK-LABEL: and16imm4s_lsl16:
1221 ; CHECK:       // %bb.0:
1222 ; CHECK-NEXT:    bic v0.4s, #255, lsl #16
1223 ; CHECK-NEXT:    ret
1224         %tmp1 = and <8 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280>
1225         ret <8 x i16> %tmp1
1228 define <8 x i16> @and16imm4s_lsl24(<8 x i16> %a) {
1229 ; CHECK-LABEL: and16imm4s_lsl24:
1230 ; CHECK:       // %bb.0:
1231 ; CHECK-NEXT:    bic v0.4s, #254, lsl #24
1232 ; CHECK-NEXT:    ret
1233         %tmp1 = and <8 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511>
1234         ret <8 x i16> %tmp1
1237 define <2 x i64> @and64imm4s_lsl0(<2 x i64> %a) {
1238 ; CHECK-LABEL: and64imm4s_lsl0:
1239 ; CHECK:       // %bb.0:
1240 ; CHECK-NEXT:    bic v0.4s, #255
1241 ; CHECK-NEXT:    ret
1242         %tmp1 = and <2 x i64> %a, < i64 -1095216660736, i64 -1095216660736>
1243         ret <2 x i64> %tmp1
1246 define <2 x i64> @and64imm4s_lsl8(<2 x i64> %a) {
1247 ; CHECK-LABEL: and64imm4s_lsl8:
1248 ; CHECK:       // %bb.0:
1249 ; CHECK-NEXT:    bic v0.4s, #255, lsl #8
1250 ; CHECK-NEXT:    ret
1251         %tmp1 = and <2 x i64> %a, < i64 -280375465148161, i64 -280375465148161>
1252         ret <2 x i64> %tmp1
1255 define <2 x i64> @and64imm4s_lsl16(<2 x i64> %a) {
1256 ; CHECK-LABEL: and64imm4s_lsl16:
1257 ; CHECK:       // %bb.0:
1258 ; CHECK-NEXT:    bic v0.4s, #255, lsl #16
1259 ; CHECK-NEXT:    ret
1260         %tmp1 = and <2 x i64> %a, < i64 -71776119077928961, i64 -71776119077928961>
1261         ret <2 x i64> %tmp1
1264 define <2 x i64> @and64imm4s_lsl24(<2 x i64> %a) {
1265 ; CHECK-LABEL: and64imm4s_lsl24:
1266 ; CHECK:       // %bb.0:
1267 ; CHECK-NEXT:    bic v0.4s, #254, lsl #24
1268 ; CHECK-NEXT:    ret
1269         %tmp1 = and <2 x i64> %a, < i64 144115183814443007, i64 144115183814443007>
1270         ret <2 x i64> %tmp1
1273 define <8 x i8> @and8imm4h_lsl0(<8 x i8> %a) {
1274 ; CHECK-LABEL: and8imm4h_lsl0:
1275 ; CHECK:       // %bb.0:
1276 ; CHECK-NEXT:    bic v0.4h, #255
1277 ; CHECK-NEXT:    ret
1278         %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1279         ret <8 x i8> %tmp1
1282 define <8 x i8> @and8imm4h_lsl8(<8 x i8> %a) {
1283 ; CHECK-LABEL: and8imm4h_lsl8:
1284 ; CHECK:       // %bb.0:
1285 ; CHECK-NEXT:    bic v0.4h, #255, lsl #8
1286 ; CHECK-NEXT:    ret
1287         %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1288         ret <8 x i8> %tmp1
1291 define <2 x i32> @and16imm4h_lsl0(<2 x i32> %a) {
1292 ; CHECK-LABEL: and16imm4h_lsl0:
1293 ; CHECK:       // %bb.0:
1294 ; CHECK-NEXT:    bic v0.4h, #255
1295 ; CHECK-NEXT:    ret
1296         %tmp1 = and <2 x i32> %a, < i32 4278255360, i32 4278255360>
1297         ret <2 x i32> %tmp1
1300 define <2 x i32> @and16imm4h_lsl8(<2 x i32> %a) {
1301 ; CHECK-LABEL: and16imm4h_lsl8:
1302 ; CHECK:       // %bb.0:
1303 ; CHECK-NEXT:    bic v0.4h, #255, lsl #8
1304 ; CHECK-NEXT:    ret
1305         %tmp1 = and <2 x i32> %a, < i32 16711935, i32 16711935>
1306         ret <2 x i32> %tmp1
1309 define <1 x i64> @and64imm4h_lsl0(<1 x i64> %a) {
1310 ; CHECK-LABEL: and64imm4h_lsl0:
1311 ; CHECK:       // %bb.0:
1312 ; CHECK-NEXT:    bic v0.4h, #255
1313 ; CHECK-NEXT:    ret
1314         %tmp1 = and <1 x i64> %a, < i64 -71777214294589696>
1315         ret <1 x i64> %tmp1
1318 define <1 x i64> @and64imm4h_lsl8(<1 x i64> %a) {
1319 ; CHECK-LABEL: and64imm4h_lsl8:
1320 ; CHECK:       // %bb.0:
1321 ; CHECK-NEXT:    bic v0.4h, #255, lsl #8
1322 ; CHECK-NEXT:    ret
1323         %tmp1 = and <1 x i64> %a, < i64 71777214294589695>
1324         ret <1 x i64> %tmp1
1327 define <16 x i8> @and8imm8h_lsl0(<16 x i8> %a) {
1328 ; CHECK-LABEL: and8imm8h_lsl0:
1329 ; CHECK:       // %bb.0:
1330 ; CHECK-NEXT:    bic v0.8h, #255
1331 ; CHECK-NEXT:    ret
1332         %tmp1 = and <16 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255 >
1333         ret <16 x i8> %tmp1
1336 define <16 x i8> @and8imm8h_lsl8(<16 x i8> %a) {
1337 ; CHECK-LABEL: and8imm8h_lsl8:
1338 ; CHECK:       // %bb.0:
1339 ; CHECK-NEXT:    bic v0.8h, #255, lsl #8
1340 ; CHECK-NEXT:    ret
1341         %tmp1 = and <16 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0 >
1342         ret <16 x i8> %tmp1
1345 define <4 x i32> @and16imm8h_lsl0(<4 x i32> %a) {
1346 ; CHECK-LABEL: and16imm8h_lsl0:
1347 ; CHECK:       // %bb.0:
1348 ; CHECK-NEXT:    bic v0.8h, #255
1349 ; CHECK-NEXT:    ret
1350         %tmp1 = and <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
1351         ret <4 x i32> %tmp1
1354 define <4 x i32> @and16imm8h_lsl8(<4 x i32> %a) {
1355 ; CHECK-LABEL: and16imm8h_lsl8:
1356 ; CHECK:       // %bb.0:
1357 ; CHECK-NEXT:    bic v0.8h, #255, lsl #8
1358 ; CHECK-NEXT:    ret
1359         %tmp1 = and <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
1360         ret <4 x i32> %tmp1
1363 define <2 x i64> @and64imm8h_lsl0(<2 x i64> %a) {
1364 ; CHECK-LABEL: and64imm8h_lsl0:
1365 ; CHECK:       // %bb.0:
1366 ; CHECK-NEXT:    bic v0.8h, #255
1367 ; CHECK-NEXT:    ret
1368         %tmp1 = and <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
1369         ret <2 x i64> %tmp1
1372 define <2 x i64> @and64imm8h_lsl8(<2 x i64> %a) {
1373 ; CHECK-LABEL: and64imm8h_lsl8:
1374 ; CHECK:       // %bb.0:
1375 ; CHECK-NEXT:    bic v0.8h, #255, lsl #8
1376 ; CHECK-NEXT:    ret
1377         %tmp1 = and <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
1378         ret <2 x i64> %tmp1
1381 define <8 x i8> @orr8imm2s_lsl0(<8 x i8> %a) {
1382 ; CHECK-LABEL: orr8imm2s_lsl0:
1383 ; CHECK:       // %bb.0:
1384 ; CHECK-NEXT:    orr v0.2s, #255
1385 ; CHECK-NEXT:    ret
1386         %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
1387         ret <8 x i8> %tmp1
1390 define <8 x i8> @orr8imm2s_lsl8(<8 x i8> %a) {
1391 ; CHECK-LABEL: orr8imm2s_lsl8:
1392 ; CHECK:       // %bb.0:
1393 ; CHECK-NEXT:    orr v0.2s, #255, lsl #8
1394 ; CHECK-NEXT:    ret
1395         %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
1396         ret <8 x i8> %tmp1
1399 define <8 x i8> @orr8imm2s_lsl16(<8 x i8> %a) {
1400 ; CHECK-LABEL: orr8imm2s_lsl16:
1401 ; CHECK:       // %bb.0:
1402 ; CHECK-NEXT:    orr v0.2s, #255, lsl #16
1403 ; CHECK-NEXT:    ret
1404         %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
1405         ret <8 x i8> %tmp1
1408 define <8 x i8> @orr8imm2s_lsl24(<8 x i8> %a) {
1409 ; CHECK-LABEL: orr8imm2s_lsl24:
1410 ; CHECK:       // %bb.0:
1411 ; CHECK-NEXT:    orr v0.2s, #255, lsl #24
1412 ; CHECK-NEXT:    ret
1413         %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
1414         ret <8 x i8> %tmp1
1417 define <4 x i16> @orr16imm2s_lsl0(<4 x i16> %a) {
1418 ; CHECK-LABEL: orr16imm2s_lsl0:
1419 ; CHECK:       // %bb.0:
1420 ; CHECK-NEXT:    orr v0.2s, #255
1421 ; CHECK-NEXT:    ret
1422         %tmp1 = or <4 x i16> %a, < i16 255, i16 0, i16 255, i16 0>
1423         ret <4 x i16> %tmp1
1426 define <4 x i16> @orr16imm2s_lsl8(<4 x i16> %a) {
1427 ; CHECK-LABEL: orr16imm2s_lsl8:
1428 ; CHECK:       // %bb.0:
1429 ; CHECK-NEXT:    orr v0.2s, #255, lsl #8
1430 ; CHECK-NEXT:    ret
1431         %tmp1 = or <4 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0>
1432         ret <4 x i16> %tmp1
1435 define <4 x i16> @orr16imm2s_lsl16(<4 x i16> %a) {
1436 ; CHECK-LABEL: orr16imm2s_lsl16:
1437 ; CHECK:       // %bb.0:
1438 ; CHECK-NEXT:    orr v0.2s, #255, lsl #16
1439 ; CHECK-NEXT:    ret
1440         %tmp1 = or <4 x i16> %a, < i16 0, i16 255, i16 0, i16 255>
1441         ret <4 x i16> %tmp1
1444 define <4 x i16> @orr16imm2s_lsl24(<4 x i16> %a) {
1445 ; CHECK-LABEL: orr16imm2s_lsl24:
1446 ; CHECK:       // %bb.0:
1447 ; CHECK-NEXT:    orr v0.2s, #255, lsl #24
1448 ; CHECK-NEXT:    ret
1449         %tmp1 = or <4 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280>
1450         ret <4 x i16> %tmp1
1453 define <1 x i64> @orr64imm2s_lsl0(<1 x i64> %a) {
1454 ; CHECK-LABEL: orr64imm2s_lsl0:
1455 ; CHECK:       // %bb.0:
1456 ; CHECK-NEXT:    orr v0.2s, #255
1457 ; CHECK-NEXT:    ret
1458         %tmp1 = or <1 x i64> %a, < i64 1095216660735>
1459         ret <1 x i64> %tmp1
1462 define <1 x i64> @orr64imm2s_lsl8(<1 x i64> %a) {
1463 ; CHECK-LABEL: orr64imm2s_lsl8:
1464 ; CHECK:       // %bb.0:
1465 ; CHECK-NEXT:    orr v0.2s, #255, lsl #8
1466 ; CHECK-NEXT:    ret
1467         %tmp1 = or <1 x i64> %a, < i64 280375465148160>
1468         ret <1 x i64> %tmp1
1471 define <1 x i64> @orr64imm2s_lsl16(<1 x i64> %a) {
1472 ; CHECK-LABEL: orr64imm2s_lsl16:
1473 ; CHECK:       // %bb.0:
1474 ; CHECK-NEXT:    orr v0.2s, #255, lsl #16
1475 ; CHECK-NEXT:    ret
1476         %tmp1 = or <1 x i64> %a, < i64 71776119077928960>
1477         ret <1 x i64> %tmp1
1480 define <1 x i64> @orr64imm2s_lsl24(<1 x i64> %a) {
1481 ; CHECK-LABEL: orr64imm2s_lsl24:
1482 ; CHECK:       // %bb.0:
1483 ; CHECK-NEXT:    orr v0.2s, #255, lsl #24
1484 ; CHECK-NEXT:    ret
1485         %tmp1 = or <1 x i64> %a, < i64 -72057589759737856>
1486         ret <1 x i64> %tmp1
1489 define <16 x i8> @orr8imm4s_lsl0(<16 x i8> %a) {
1490 ; CHECK-LABEL: orr8imm4s_lsl0:
1491 ; CHECK:       // %bb.0:
1492 ; CHECK-NEXT:    orr v0.4s, #255
1493 ; CHECK-NEXT:    ret
1494         %tmp1 = or <16 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
1495         ret <16 x i8> %tmp1
1498 define <16 x i8> @orr8imm4s_lsl8(<16 x i8> %a) {
1499 ; CHECK-LABEL: orr8imm4s_lsl8:
1500 ; CHECK:       // %bb.0:
1501 ; CHECK-NEXT:    orr v0.4s, #255, lsl #8
1502 ; CHECK-NEXT:    ret
1503         %tmp1 = or <16 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
1504         ret <16 x i8> %tmp1
1507 define <16 x i8> @orr8imm4s_lsl16(<16 x i8> %a) {
1508 ; CHECK-LABEL: orr8imm4s_lsl16:
1509 ; CHECK:       // %bb.0:
1510 ; CHECK-NEXT:    orr v0.4s, #255, lsl #16
1511 ; CHECK-NEXT:    ret
1512         %tmp1 = or <16 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
1513         ret <16 x i8> %tmp1
1516 define <16 x i8> @orr8imm4s_lsl24(<16 x i8> %a) {
1517 ; CHECK-LABEL: orr8imm4s_lsl24:
1518 ; CHECK:       // %bb.0:
1519 ; CHECK-NEXT:    orr v0.4s, #255, lsl #24
1520 ; CHECK-NEXT:    ret
1521         %tmp1 = or <16 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
1522         ret <16 x i8> %tmp1
1525 define <8 x i16> @orr16imm4s_lsl0(<8 x i16> %a) {
1526 ; CHECK-LABEL: orr16imm4s_lsl0:
1527 ; CHECK:       // %bb.0:
1528 ; CHECK-NEXT:    orr v0.4s, #255
1529 ; CHECK-NEXT:    ret
1530         %tmp1 = or <8 x i16> %a, < i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0>
1531         ret <8 x i16> %tmp1
1534 define <8 x i16> @orr16imm4s_lsl8(<8 x i16> %a) {
1535 ; CHECK-LABEL: orr16imm4s_lsl8:
1536 ; CHECK:       // %bb.0:
1537 ; CHECK-NEXT:    orr v0.4s, #255, lsl #8
1538 ; CHECK-NEXT:    ret
1539         %tmp1 = or <8 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0>
1540         ret <8 x i16> %tmp1
1543 define <8 x i16> @orr16imm4s_lsl16(<8 x i16> %a) {
1544 ; CHECK-LABEL: orr16imm4s_lsl16:
1545 ; CHECK:       // %bb.0:
1546 ; CHECK-NEXT:    orr v0.4s, #255, lsl #16
1547 ; CHECK-NEXT:    ret
1548         %tmp1 = or <8 x i16> %a, < i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255>
1549         ret <8 x i16> %tmp1
1552 define <8 x i16> @orr16imm4s_lsl24(<8 x i16> %a) {
1553 ; CHECK-LABEL: orr16imm4s_lsl24:
1554 ; CHECK:       // %bb.0:
1555 ; CHECK-NEXT:    orr v0.4s, #255, lsl #24
1556 ; CHECK-NEXT:    ret
1557         %tmp1 = or <8 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280>
1558         ret <8 x i16> %tmp1
1561 define <2 x i64> @orr64imm4s_lsl0(<2 x i64> %a) {
1562 ; CHECK-LABEL: orr64imm4s_lsl0:
1563 ; CHECK:       // %bb.0:
1564 ; CHECK-NEXT:    orr v0.4s, #255
1565 ; CHECK-NEXT:    ret
1566         %tmp1 = or <2 x i64> %a, < i64 1095216660735, i64 1095216660735>
1567         ret <2 x i64> %tmp1
1570 define <2 x i64> @orr64imm4s_lsl8(<2 x i64> %a) {
1571 ; CHECK-LABEL: orr64imm4s_lsl8:
1572 ; CHECK:       // %bb.0:
1573 ; CHECK-NEXT:    orr v0.4s, #255, lsl #8
1574 ; CHECK-NEXT:    ret
1575         %tmp1 = or <2 x i64> %a, < i64 280375465148160, i64 280375465148160>
1576         ret <2 x i64> %tmp1
1579 define <2 x i64> @orr64imm4s_lsl16(<2 x i64> %a) {
1580 ; CHECK-LABEL: orr64imm4s_lsl16:
1581 ; CHECK:       // %bb.0:
1582 ; CHECK-NEXT:    orr v0.4s, #255, lsl #16
1583 ; CHECK-NEXT:    ret
1584         %tmp1 = or <2 x i64> %a, < i64 71776119077928960, i64 71776119077928960>
1585         ret <2 x i64> %tmp1
1588 define <2 x i64> @orr64imm4s_lsl24(<2 x i64> %a) {
1589 ; CHECK-LABEL: orr64imm4s_lsl24:
1590 ; CHECK:       // %bb.0:
1591 ; CHECK-NEXT:    orr v0.4s, #255, lsl #24
1592 ; CHECK-NEXT:    ret
1593         %tmp1 = or <2 x i64> %a, < i64 -72057589759737856, i64 -72057589759737856>
1594         ret <2 x i64> %tmp1
1597 define <8 x i8> @orr8imm4h_lsl0(<8 x i8> %a) {
1598 ; CHECK-LABEL: orr8imm4h_lsl0:
1599 ; CHECK:       // %bb.0:
1600 ; CHECK-NEXT:    orr v0.4h, #255
1601 ; CHECK-NEXT:    ret
1602         %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1603         ret <8 x i8> %tmp1
1606 define <8 x i8> @orr8imm4h_lsl8(<8 x i8> %a) {
1607 ; CHECK-LABEL: orr8imm4h_lsl8:
1608 ; CHECK:       // %bb.0:
1609 ; CHECK-NEXT:    orr v0.4h, #255, lsl #8
1610 ; CHECK-NEXT:    ret
1611         %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1612         ret <8 x i8> %tmp1
1615 define <2 x i32> @orr16imm4h_lsl0(<2 x i32> %a) {
1616 ; CHECK-LABEL: orr16imm4h_lsl0:
1617 ; CHECK:       // %bb.0:
1618 ; CHECK-NEXT:    orr v0.4h, #255
1619 ; CHECK-NEXT:    ret
1620         %tmp1 = or <2 x i32> %a, < i32 16711935, i32 16711935>
1621         ret <2 x i32> %tmp1
1624 define <2 x i32> @orr16imm4h_lsl8(<2 x i32> %a) {
1625 ; CHECK-LABEL: orr16imm4h_lsl8:
1626 ; CHECK:       // %bb.0:
1627 ; CHECK-NEXT:    orr v0.4h, #255, lsl #8
1628 ; CHECK-NEXT:    ret
1629         %tmp1 = or <2 x i32> %a, < i32 4278255360, i32 4278255360>
1630         ret <2 x i32> %tmp1
1633 define <1 x i64> @orr64imm4h_lsl0(<1 x i64> %a) {
1634 ; CHECK-LABEL: orr64imm4h_lsl0:
1635 ; CHECK:       // %bb.0:
1636 ; CHECK-NEXT:    orr v0.4h, #255
1637 ; CHECK-NEXT:    ret
1638         %tmp1 = or <1 x i64> %a, < i64 71777214294589695>
1639         ret <1 x i64> %tmp1
1642 define <1 x i64> @orr64imm4h_lsl8(<1 x i64> %a) {
1643 ; CHECK-LABEL: orr64imm4h_lsl8:
1644 ; CHECK:       // %bb.0:
1645 ; CHECK-NEXT:    orr v0.4h, #255, lsl #8
1646 ; CHECK-NEXT:    ret
1647         %tmp1 = or <1 x i64> %a, < i64 -71777214294589696>
1648         ret <1 x i64> %tmp1
1651 define <16 x i8> @orr8imm8h_lsl0(<16 x i8> %a) {
1652 ; CHECK-LABEL: orr8imm8h_lsl0:
1653 ; CHECK:       // %bb.0:
1654 ; CHECK-NEXT:    orr v0.8h, #255
1655 ; CHECK-NEXT:    ret
1656         %tmp1 = or <16 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1657         ret <16 x i8> %tmp1
1660 define <16 x i8> @orr8imm8h_lsl8(<16 x i8> %a) {
1661 ; CHECK-LABEL: orr8imm8h_lsl8:
1662 ; CHECK:       // %bb.0:
1663 ; CHECK-NEXT:    orr v0.8h, #255, lsl #8
1664 ; CHECK-NEXT:    ret
1665         %tmp1 = or <16 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1666         ret <16 x i8> %tmp1
1669 define <4 x i32> @orr16imm8h_lsl0(<4 x i32> %a) {
1670 ; CHECK-LABEL: orr16imm8h_lsl0:
1671 ; CHECK:       // %bb.0:
1672 ; CHECK-NEXT:    orr v0.8h, #255
1673 ; CHECK-NEXT:    ret
1674         %tmp1 = or <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
1675         ret <4 x i32> %tmp1
1678 define <4 x i32> @orr16imm8h_lsl8(<4 x i32> %a) {
1679 ; CHECK-LABEL: orr16imm8h_lsl8:
1680 ; CHECK:       // %bb.0:
1681 ; CHECK-NEXT:    orr v0.8h, #255, lsl #8
1682 ; CHECK-NEXT:    ret
1683         %tmp1 = or <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
1684         ret <4 x i32> %tmp1
1687 define <2 x i64> @orr64imm8h_lsl0(<2 x i64> %a) {
1688 ; CHECK-LABEL: orr64imm8h_lsl0:
1689 ; CHECK:       // %bb.0:
1690 ; CHECK-NEXT:    orr v0.8h, #255
1691 ; CHECK-NEXT:    ret
1692         %tmp1 = or <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
1693         ret <2 x i64> %tmp1
1696 define <2 x i64> @orr64imm8h_lsl8(<2 x i64> %a) {
1697 ; CHECK-LABEL: orr64imm8h_lsl8:
1698 ; CHECK:       // %bb.0:
1699 ; CHECK-NEXT:    orr v0.8h, #255, lsl #8
1700 ; CHECK-NEXT:    ret
1701         %tmp1 = or <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
1702         ret <2 x i64> %tmp1