1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
3 define <8 x i8> @and8xi8(<8 x i8> %a, <8 x i8> %b) {
4 ; CHECK-LABEL: and8xi8:
5 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
6 %tmp1 = and <8 x i8> %a, %b;
10 define <16 x i8> @and16xi8(<16 x i8> %a, <16 x i8> %b) {
11 ; CHECK-LABEL: and16xi8:
12 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
13 %tmp1 = and <16 x i8> %a, %b;
18 define <8 x i8> @orr8xi8(<8 x i8> %a, <8 x i8> %b) {
19 ; CHECK-LABEL: orr8xi8:
20 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
21 %tmp1 = or <8 x i8> %a, %b;
25 define <16 x i8> @orr16xi8(<16 x i8> %a, <16 x i8> %b) {
26 ; CHECK-LABEL: orr16xi8:
27 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
28 %tmp1 = or <16 x i8> %a, %b;
33 define <8 x i8> @xor8xi8(<8 x i8> %a, <8 x i8> %b) {
34 ; CHECK-LABEL: xor8xi8:
35 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
36 %tmp1 = xor <8 x i8> %a, %b;
40 define <16 x i8> @xor16xi8(<16 x i8> %a, <16 x i8> %b) {
41 ; CHECK-LABEL: xor16xi8:
42 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
43 %tmp1 = xor <16 x i8> %a, %b;
47 define <8 x i8> @bsl8xi8_const(<8 x i8> %a, <8 x i8> %b) {
48 ; CHECK-LABEL: bsl8xi8_const:
49 ; CHECK: movi {{d[0-9]+}}, #0x{{0*}}ffff0000ffff
50 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
51 %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
52 %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1 >
53 %tmp3 = or <8 x i8> %tmp1, %tmp2
57 define <16 x i8> @bsl16xi8_const(<16 x i8> %a, <16 x i8> %b) {
58 ; CHECK-LABEL: bsl16xi8_const:
59 ; CHECK: movi {{v[0-9]+}}.2d, #0x{{0*}}ffffffff
60 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
61 %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 >
62 %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 >
63 %tmp3 = or <16 x i8> %tmp1, %tmp2
67 define <8 x i8> @orn8xi8(<8 x i8> %a, <8 x i8> %b) {
68 ; CHECK-LABEL: orn8xi8:
69 ; CHECK: orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
70 %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
71 %tmp2 = or <8 x i8> %a, %tmp1
75 define <16 x i8> @orn16xi8(<16 x i8> %a, <16 x i8> %b) {
76 ; CHECK-LABEL: orn16xi8:
77 ; CHECK: orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
78 %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 >
79 %tmp2 = or <16 x i8> %a, %tmp1
83 define <8 x i8> @bic8xi8(<8 x i8> %a, <8 x i8> %b) {
84 ; CHECK-LABEL: bic8xi8:
85 ; CHECK: bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
86 %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
87 %tmp2 = and <8 x i8> %a, %tmp1
91 define <16 x i8> @bic16xi8(<16 x i8> %a, <16 x i8> %b) {
92 ; CHECK-LABEL: bic16xi8:
93 ; CHECK: bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
94 %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 >
95 %tmp2 = and <16 x i8> %a, %tmp1
99 define <2 x i32> @orrimm2s_lsl0(<2 x i32> %a) {
100 ; CHECK-LABEL: orrimm2s_lsl0:
101 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}
102 %tmp1 = or <2 x i32> %a, < i32 255, i32 255>
106 define <2 x i32> @orrimm2s_lsl8(<2 x i32> %a) {
107 ; CHECK-LABEL: orrimm2s_lsl8:
108 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
109 %tmp1 = or <2 x i32> %a, < i32 65280, i32 65280>
113 define <2 x i32> @orrimm2s_lsl16(<2 x i32> %a) {
114 ; CHECK-LABEL: orrimm2s_lsl16:
115 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
116 %tmp1 = or <2 x i32> %a, < i32 16711680, i32 16711680>
120 define <2 x i32> @orrimm2s_lsl24(<2 x i32> %a) {
121 ; CHECK-LABEL: orrimm2s_lsl24:
122 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
123 %tmp1 = or <2 x i32> %a, < i32 4278190080, i32 4278190080>
127 define <4 x i32> @orrimm4s_lsl0(<4 x i32> %a) {
128 ; CHECK-LABEL: orrimm4s_lsl0:
129 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}
130 %tmp1 = or <4 x i32> %a, < i32 255, i32 255, i32 255, i32 255>
134 define <4 x i32> @orrimm4s_lsl8(<4 x i32> %a) {
135 ; CHECK-LABEL: orrimm4s_lsl8:
136 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
137 %tmp1 = or <4 x i32> %a, < i32 65280, i32 65280, i32 65280, i32 65280>
141 define <4 x i32> @orrimm4s_lsl16(<4 x i32> %a) {
142 ; CHECK-LABEL: orrimm4s_lsl16:
143 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
144 %tmp1 = or <4 x i32> %a, < i32 16711680, i32 16711680, i32 16711680, i32 16711680>
148 define <4 x i32> @orrimm4s_lsl24(<4 x i32> %a) {
149 ; CHECK-LABEL: orrimm4s_lsl24:
150 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
151 %tmp1 = or <4 x i32> %a, < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080>
155 define <4 x i16> @orrimm4h_lsl0(<4 x i16> %a) {
156 ; CHECK-LABEL: orrimm4h_lsl0:
157 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}
158 %tmp1 = or <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255 >
162 define <4 x i16> @orrimm4h_lsl8(<4 x i16> %a) {
163 ; CHECK-LABEL: orrimm4h_lsl8:
164 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
165 %tmp1 = or <4 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280 >
169 define <8 x i16> @orrimm8h_lsl0(<8 x i16> %a) {
170 ; CHECK-LABEL: orrimm8h_lsl0:
171 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}
172 %tmp1 = or <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
176 define <8 x i16> @orrimm8h_lsl8(<8 x i16> %a) {
177 ; CHECK-LABEL: orrimm8h_lsl8:
178 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
179 %tmp1 = or <8 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
183 define <2 x i32> @bicimm2s_lsl0(<2 x i32> %a) {
184 ; CHECK-LABEL: bicimm2s_lsl0:
185 ; CHECK: bic {{v[0-9]+}}.2s, #{{0x10|16}}
186 %tmp1 = and <2 x i32> %a, < i32 4294967279, i32 4294967279 >
190 define <2 x i32> @bicimm2s_lsl8(<2 x i32> %a) {
191 ; CHECK-LABEL: bicimm2s_lsl8:
192 ; CHECK: bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
193 %tmp1 = and <2 x i32> %a, < i32 4294963199, i32 4294963199 >
197 define <2 x i32> @bicimm2s_lsl16(<2 x i32> %a) {
198 ; CHECK-LABEL: bicimm2s_lsl16:
199 ; CHECK: bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
200 %tmp1 = and <2 x i32> %a, < i32 4293918719, i32 4293918719 >
204 define <2 x i32> @bicimm2s_lsl124(<2 x i32> %a) {
205 ; CHECK-LABEL: bicimm2s_lsl124:
206 ; CHECK: bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
207 %tmp1 = and <2 x i32> %a, < i32 4026531839, i32 4026531839>
211 define <4 x i32> @bicimm4s_lsl0(<4 x i32> %a) {
212 ; CHECK-LABEL: bicimm4s_lsl0:
213 ; CHECK: bic {{v[0-9]+}}.4s, #{{0x10|16}}
214 %tmp1 = and <4 x i32> %a, < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
218 define <4 x i32> @bicimm4s_lsl8(<4 x i32> %a) {
219 ; CHECK-LABEL: bicimm4s_lsl8:
220 ; CHECK: bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
221 %tmp1 = and <4 x i32> %a, < i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199 >
225 define <4 x i32> @bicimm4s_lsl16(<4 x i32> %a) {
226 ; CHECK-LABEL: bicimm4s_lsl16:
227 ; CHECK: bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
228 %tmp1 = and <4 x i32> %a, < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
232 define <4 x i32> @bicimm4s_lsl124(<4 x i32> %a) {
233 ; CHECK-LABEL: bicimm4s_lsl124:
234 ; CHECK: bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
235 %tmp1 = and <4 x i32> %a, < i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839>
239 define <4 x i16> @bicimm4h_lsl0_a(<4 x i16> %a) {
240 ; CHECK-LABEL: bicimm4h_lsl0_a:
241 ; CHECK: bic {{v[0-9]+}}.4h, #{{0x10|16}}
242 %tmp1 = and <4 x i16> %a, < i16 4294967279, i16 4294967279, i16 4294967279, i16 4294967279 >
246 define <4 x i16> @bicimm4h_lsl0_b(<4 x i16> %a) {
247 ; CHECK-LABEL: bicimm4h_lsl0_b:
248 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}
249 %tmp1 = and <4 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280 >
253 define <4 x i16> @bicimm4h_lsl8_a(<4 x i16> %a) {
254 ; CHECK-LABEL: bicimm4h_lsl8_a:
255 ; CHECK: bic {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
256 %tmp1 = and <4 x i16> %a, < i16 4294963199, i16 4294963199, i16 4294963199, i16 4294963199>
260 define <4 x i16> @bicimm4h_lsl8_b(<4 x i16> %a) {
261 ; CHECK-LABEL: bicimm4h_lsl8_b:
262 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
263 %tmp1 = and <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255>
267 define <8 x i16> @bicimm8h_lsl0_a(<8 x i16> %a) {
268 ; CHECK-LABEL: bicimm8h_lsl0_a:
269 ; CHECK: bic {{v[0-9]+}}.8h, #{{0x10|16}}
270 %tmp1 = and <8 x i16> %a, < i16 4294967279, i16 4294967279, i16 4294967279, i16 4294967279,
271 i16 4294967279, i16 4294967279, i16 4294967279, i16 4294967279 >
275 define <8 x i16> @bicimm8h_lsl0_b(<8 x i16> %a) {
276 ; CHECK-LABEL: bicimm8h_lsl0_b:
277 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}
278 %tmp1 = and <8 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
282 define <8 x i16> @bicimm8h_lsl8_a(<8 x i16> %a) {
283 ; CHECK-LABEL: bicimm8h_lsl8_a:
284 ; CHECK: bic {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
285 %tmp1 = and <8 x i16> %a, < i16 4294963199, i16 4294963199, i16 4294963199, i16 4294963199,
286 i16 4294963199, i16 4294963199, i16 4294963199, i16 4294963199>
290 define <8 x i16> @bicimm8h_lsl8_b(<8 x i16> %a) {
291 ; CHECK-LABEL: bicimm8h_lsl8_b:
292 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
293 %tmp1 = and <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
297 define <2 x i32> @and2xi32(<2 x i32> %a, <2 x i32> %b) {
298 ; CHECK-LABEL: and2xi32:
299 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
300 %tmp1 = and <2 x i32> %a, %b;
304 define <4 x i16> @and4xi16(<4 x i16> %a, <4 x i16> %b) {
305 ; CHECK-LABEL: and4xi16:
306 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
307 %tmp1 = and <4 x i16> %a, %b;
311 define <1 x i64> @and1xi64(<1 x i64> %a, <1 x i64> %b) {
312 ; CHECK-LABEL: and1xi64:
313 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
314 %tmp1 = and <1 x i64> %a, %b;
318 define <4 x i32> @and4xi32(<4 x i32> %a, <4 x i32> %b) {
319 ; CHECK-LABEL: and4xi32:
320 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
321 %tmp1 = and <4 x i32> %a, %b;
325 define <8 x i16> @and8xi16(<8 x i16> %a, <8 x i16> %b) {
326 ; CHECK-LABEL: and8xi16:
327 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
328 %tmp1 = and <8 x i16> %a, %b;
332 define <2 x i64> @and2xi64(<2 x i64> %a, <2 x i64> %b) {
333 ; CHECK-LABEL: and2xi64:
334 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
335 %tmp1 = and <2 x i64> %a, %b;
339 define <2 x i32> @orr2xi32(<2 x i32> %a, <2 x i32> %b) {
340 ; CHECK-LABEL: orr2xi32:
341 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
342 %tmp1 = or <2 x i32> %a, %b;
346 define <4 x i16> @orr4xi16(<4 x i16> %a, <4 x i16> %b) {
347 ; CHECK-LABEL: orr4xi16:
348 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
349 %tmp1 = or <4 x i16> %a, %b;
353 define <1 x i64> @orr1xi64(<1 x i64> %a, <1 x i64> %b) {
354 ; CHECK-LABEL: orr1xi64:
355 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
356 %tmp1 = or <1 x i64> %a, %b;
360 define <4 x i32> @orr4xi32(<4 x i32> %a, <4 x i32> %b) {
361 ; CHECK-LABEL: orr4xi32:
362 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
363 %tmp1 = or <4 x i32> %a, %b;
367 define <8 x i16> @orr8xi16(<8 x i16> %a, <8 x i16> %b) {
368 ; CHECK-LABEL: orr8xi16:
369 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
370 %tmp1 = or <8 x i16> %a, %b;
374 define <2 x i64> @orr2xi64(<2 x i64> %a, <2 x i64> %b) {
375 ; CHECK-LABEL: orr2xi64:
376 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
377 %tmp1 = or <2 x i64> %a, %b;
381 define <2 x i32> @eor2xi32(<2 x i32> %a, <2 x i32> %b) {
382 ; CHECK-LABEL: eor2xi32:
383 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
384 %tmp1 = xor <2 x i32> %a, %b;
388 define <4 x i16> @eor4xi16(<4 x i16> %a, <4 x i16> %b) {
389 ; CHECK-LABEL: eor4xi16:
390 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
391 %tmp1 = xor <4 x i16> %a, %b;
395 define <1 x i64> @eor1xi64(<1 x i64> %a, <1 x i64> %b) {
396 ; CHECK-LABEL: eor1xi64:
397 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
398 %tmp1 = xor <1 x i64> %a, %b;
402 define <4 x i32> @eor4xi32(<4 x i32> %a, <4 x i32> %b) {
403 ; CHECK-LABEL: eor4xi32:
404 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
405 %tmp1 = xor <4 x i32> %a, %b;
409 define <8 x i16> @eor8xi16(<8 x i16> %a, <8 x i16> %b) {
410 ; CHECK-LABEL: eor8xi16:
411 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
412 %tmp1 = xor <8 x i16> %a, %b;
416 define <2 x i64> @eor2xi64(<2 x i64> %a, <2 x i64> %b) {
417 ; CHECK-LABEL: eor2xi64:
418 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
419 %tmp1 = xor <2 x i64> %a, %b;
424 define <2 x i32> @bic2xi32(<2 x i32> %a, <2 x i32> %b) {
425 ; CHECK-LABEL: bic2xi32:
426 ; CHECK: bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
427 %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
428 %tmp2 = and <2 x i32> %a, %tmp1
432 define <4 x i16> @bic4xi16(<4 x i16> %a, <4 x i16> %b) {
433 ; CHECK-LABEL: bic4xi16:
434 ; CHECK: bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
435 %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
436 %tmp2 = and <4 x i16> %a, %tmp1
440 define <1 x i64> @bic1xi64(<1 x i64> %a, <1 x i64> %b) {
441 ; CHECK-LABEL: bic1xi64:
442 ; CHECK: bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
443 %tmp1 = xor <1 x i64> %b, < i64 -1>
444 %tmp2 = and <1 x i64> %a, %tmp1
448 define <4 x i32> @bic4xi32(<4 x i32> %a, <4 x i32> %b) {
449 ; CHECK-LABEL: bic4xi32:
450 ; CHECK: bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
451 %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
452 %tmp2 = and <4 x i32> %a, %tmp1
456 define <8 x i16> @bic8xi16(<8 x i16> %a, <8 x i16> %b) {
457 ; CHECK-LABEL: bic8xi16:
458 ; CHECK: bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
459 %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
460 %tmp2 = and <8 x i16> %a, %tmp1
464 define <2 x i64> @bic2xi64(<2 x i64> %a, <2 x i64> %b) {
465 ; CHECK-LABEL: bic2xi64:
466 ; CHECK: bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
467 %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
468 %tmp2 = and <2 x i64> %a, %tmp1
472 define <2 x i32> @orn2xi32(<2 x i32> %a, <2 x i32> %b) {
473 ; CHECK-LABEL: orn2xi32:
474 ; CHECK: orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
475 %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
476 %tmp2 = or <2 x i32> %a, %tmp1
480 define <4 x i16> @orn4xi16(<4 x i16> %a, <4 x i16> %b) {
481 ; CHECK-LABEL: orn4xi16:
482 ; CHECK: orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
483 %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
484 %tmp2 = or <4 x i16> %a, %tmp1
488 define <1 x i64> @orn1xi64(<1 x i64> %a, <1 x i64> %b) {
489 ; CHECK-LABEL: orn1xi64:
490 ; CHECK: orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
491 %tmp1 = xor <1 x i64> %b, < i64 -1>
492 %tmp2 = or <1 x i64> %a, %tmp1
496 define <4 x i32> @orn4xi32(<4 x i32> %a, <4 x i32> %b) {
497 ; CHECK-LABEL: orn4xi32:
498 ; CHECK: orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
499 %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
500 %tmp2 = or <4 x i32> %a, %tmp1
504 define <8 x i16> @orn8xi16(<8 x i16> %a, <8 x i16> %b) {
505 ; CHECK-LABEL: orn8xi16:
506 ; CHECK: orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
507 %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
508 %tmp2 = or <8 x i16> %a, %tmp1
512 define <2 x i64> @orn2xi64(<2 x i64> %a, <2 x i64> %b) {
513 ; CHECK-LABEL: orn2xi64:
514 ; CHECK: orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
515 %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
516 %tmp2 = or <2 x i64> %a, %tmp1
520 define <2 x i32> @bsl2xi32_const(<2 x i32> %a, <2 x i32> %b) {
521 ; CHECK-LABEL: bsl2xi32_const:
522 ; CHECK: movi {{d[0-9]+}}, #0x{{0*}}ffffffff
523 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
524 %tmp1 = and <2 x i32> %a, < i32 -1, i32 0 >
525 %tmp2 = and <2 x i32> %b, < i32 0, i32 -1 >
526 %tmp3 = or <2 x i32> %tmp1, %tmp2
531 define <4 x i16> @bsl4xi16_const(<4 x i16> %a, <4 x i16> %b) {
532 ; CHECK-LABEL: bsl4xi16_const:
533 ; CHECK: movi {{d[0-9]+}}, #0x{{0*}}ffff0000ffff
534 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
535 %tmp1 = and <4 x i16> %a, < i16 -1, i16 0, i16 -1,i16 0 >
536 %tmp2 = and <4 x i16> %b, < i16 0, i16 -1,i16 0, i16 -1 >
537 %tmp3 = or <4 x i16> %tmp1, %tmp2
541 define <1 x i64> @bsl1xi64_const(<1 x i64> %a, <1 x i64> %b) {
542 ; CHECK-LABEL: bsl1xi64_const:
543 ; CHECK: movi {{d[0-9]+}}, #0xffffffffffffff00
544 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
545 %tmp1 = and <1 x i64> %a, < i64 -256 >
546 %tmp2 = and <1 x i64> %b, < i64 255 >
547 %tmp3 = or <1 x i64> %tmp1, %tmp2
551 define <4 x i32> @bsl4xi32_const(<4 x i32> %a, <4 x i32> %b) {
552 ; CHECK-LABEL: bsl4xi32_const:
553 ; CHECK: movi {{v[0-9]+}}.2d, #0x{{0*}}ffffffff
554 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
555 %tmp1 = and <4 x i32> %a, < i32 -1, i32 0, i32 -1, i32 0 >
556 %tmp2 = and <4 x i32> %b, < i32 0, i32 -1, i32 0, i32 -1 >
557 %tmp3 = or <4 x i32> %tmp1, %tmp2
561 define <8 x i16> @bsl8xi16_const(<8 x i16> %a, <8 x i16> %b) {
562 ; CHECK-LABEL: bsl8xi16_const:
563 ; CHECK: movi {{v[0-9]+}}.2d, #0x{{0*}}ffffffff
564 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
565 %tmp1 = and <8 x i16> %a, < i16 -1, i16 -1, i16 0,i16 0, i16 -1, i16 -1, i16 0,i16 0 >
566 %tmp2 = and <8 x i16> %b, < i16 0, i16 0, i16 -1, i16 -1, i16 0, i16 0, i16 -1, i16 -1 >
567 %tmp3 = or <8 x i16> %tmp1, %tmp2
571 define <2 x i64> @bsl2xi64_const(<2 x i64> %a, <2 x i64> %b) {
572 ; CHECK-LABEL: bsl2xi64_const:
573 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
574 %tmp1 = and <2 x i64> %a, < i64 -1, i64 0 >
575 %tmp2 = and <2 x i64> %b, < i64 0, i64 -1 >
576 %tmp3 = or <2 x i64> %tmp1, %tmp2
581 define <8 x i8> @bsl8xi8(<8 x i8> %v1, <8 x i8> %v2, <8 x i8> %v3) {
582 ; CHECK-LABEL: bsl8xi8:
583 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
584 %1 = and <8 x i8> %v1, %v2
585 %2 = xor <8 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
586 %3 = and <8 x i8> %2, %v3
587 %4 = or <8 x i8> %1, %3
591 define <4 x i16> @bsl4xi16(<4 x i16> %v1, <4 x i16> %v2, <4 x i16> %v3) {
592 ; CHECK-LABEL: bsl4xi16:
593 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
594 %1 = and <4 x i16> %v1, %v2
595 %2 = xor <4 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1>
596 %3 = and <4 x i16> %2, %v3
597 %4 = or <4 x i16> %1, %3
601 define <2 x i32> @bsl2xi32(<2 x i32> %v1, <2 x i32> %v2, <2 x i32> %v3) {
602 ; CHECK-LABEL: bsl2xi32:
603 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
604 %1 = and <2 x i32> %v1, %v2
605 %2 = xor <2 x i32> %v1, <i32 -1, i32 -1>
606 %3 = and <2 x i32> %2, %v3
607 %4 = or <2 x i32> %1, %3
611 define <1 x i64> @bsl1xi64(<1 x i64> %v1, <1 x i64> %v2, <1 x i64> %v3) {
612 ; CHECK-LABEL: bsl1xi64:
613 ; CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
614 %1 = and <1 x i64> %v1, %v2
615 %2 = xor <1 x i64> %v1, <i64 -1>
616 %3 = and <1 x i64> %2, %v3
617 %4 = or <1 x i64> %1, %3
621 define <16 x i8> @bsl16xi8(<16 x i8> %v1, <16 x i8> %v2, <16 x i8> %v3) {
622 ; CHECK-LABEL: bsl16xi8:
623 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
624 %1 = and <16 x i8> %v1, %v2
625 %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>
626 %3 = and <16 x i8> %2, %v3
627 %4 = or <16 x i8> %1, %3
631 define <8 x i16> @bsl8xi16(<8 x i16> %v1, <8 x i16> %v2, <8 x i16> %v3) {
632 ; CHECK-LABEL: bsl8xi16:
633 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
634 %1 = and <8 x i16> %v1, %v2
635 %2 = xor <8 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
636 %3 = and <8 x i16> %2, %v3
637 %4 = or <8 x i16> %1, %3
641 define <4 x i32> @bsl4xi32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
642 ; CHECK-LABEL: bsl4xi32:
643 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
644 %1 = and <4 x i32> %v1, %v2
645 %2 = xor <4 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1>
646 %3 = and <4 x i32> %2, %v3
647 %4 = or <4 x i32> %1, %3
651 define <8 x i8> @vselect_v8i8(<8 x i8> %a) {
652 ; CHECK-LABEL: vselect_v8i8:
653 ; CHECK: movi {{d[0-9]+}}, #0x{{0*}}ffff
654 ; CHECK-NEXT: {{bsl v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b|and v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b}}
655 %b = select <8 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> <i8 undef, i8 undef, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
659 define <4 x i16> @vselect_v4i16(<4 x i16> %a) {
660 ; CHECK-LABEL: vselect_v4i16:
661 ; CHECK: movi {{d[0-9]+}}, #0x{{0*}}ffff
662 ; CHECK-NEXT: {{bsl v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b|and v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b}}
663 %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i16> %a, <4 x i16> <i16 undef, i16 0, i16 0, i16 0>
667 define <8 x i8> @vselect_cmp_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
668 ; CHECK-LABEL: vselect_cmp_ne:
669 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
670 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
671 ; CHECK-NEXT: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
672 %cmp = icmp ne <8 x i8> %a, %b
673 %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
677 define <8 x i8> @vselect_cmp_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
678 ; CHECK-LABEL: vselect_cmp_eq:
679 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
680 ; CHECK-NEXT: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
681 %cmp = icmp eq <8 x i8> %a, %b
682 %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
686 define <8 x i8> @vselect_cmpz_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
687 ; CHECK-LABEL: vselect_cmpz_ne:
688 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
689 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
690 ; CHECK-NEXT: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
691 %cmp = icmp ne <8 x i8> %a, zeroinitializer
692 %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
696 define <8 x i8> @vselect_cmpz_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
697 ; CHECK-LABEL: vselect_cmpz_eq:
698 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
699 ; CHECK-NEXT: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
700 %cmp = icmp eq <8 x i8> %a, zeroinitializer
701 %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
705 define <8 x i8> @vselect_tst(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
706 ; CHECK-LABEL: vselect_tst:
707 ; CHECK: cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
708 ; CHECK-NEXT: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
709 %tmp3 = and <8 x i8> %a, %b
710 %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
711 %d = select <8 x i1> %tmp4, <8 x i8> %b, <8 x i8> %c
715 define <2 x i64> @bsl2xi64(<2 x i64> %v1, <2 x i64> %v2, <2 x i64> %v3) {
716 ; CHECK-LABEL: bsl2xi64:
717 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
718 %1 = and <2 x i64> %v1, %v2
719 %2 = xor <2 x i64> %v1, <i64 -1, i64 -1>
720 %3 = and <2 x i64> %2, %v3
721 %4 = or <2 x i64> %1, %3
725 define <8 x i8> @orrimm8b_as_orrimm4h_lsl0(<8 x i8> %a) {
726 ; CHECK-LABEL: orrimm8b_as_orrimm4h_lsl0:
727 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}
728 %val = or <8 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
732 define <8 x i8> @orrimm8b_as_orimm4h_lsl8(<8 x i8> %a) {
733 ; CHECK-LABEL: orrimm8b_as_orimm4h_lsl8:
734 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
735 %val = or <8 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
739 define <16 x i8> @orimm16b_as_orrimm8h_lsl0(<16 x i8> %a) {
740 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl0:
741 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}
742 %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>
746 define <16 x i8> @orimm16b_as_orrimm8h_lsl8(<16 x i8> %a) {
747 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl8:
748 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
749 %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>
753 define <8 x i8> @and8imm2s_lsl0(<8 x i8> %a) {
754 ; CHECK-LABEL: and8imm2s_lsl0:
755 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}
756 %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
760 define <8 x i8> @and8imm2s_lsl8(<8 x i8> %a) {
761 ; CHECK-LABEL: and8imm2s_lsl8:
762 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
763 %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
767 define <8 x i8> @and8imm2s_lsl16(<8 x i8> %a) {
768 ; CHECK-LABEL: and8imm2s_lsl16:
769 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
770 %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
774 define <8 x i8> @and8imm2s_lsl24(<8 x i8> %a) {
775 ; CHECK-LABEL: and8imm2s_lsl24:
776 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
777 %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
781 define <4 x i16> @and16imm2s_lsl0(<4 x i16> %a) {
782 ; CHECK-LABEL: and16imm2s_lsl0:
783 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}
784 %tmp1 = and <4 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535>
788 define <4 x i16> @and16imm2s_lsl8(<4 x i16> %a) {
789 ; CHECK-LABEL: and16imm2s_lsl8:
790 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
791 %tmp1 = and <4 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535>
795 define <4 x i16> @and16imm2s_lsl16(<4 x i16> %a) {
796 ; CHECK-LABEL: and16imm2s_lsl16:
797 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
798 %tmp1 = and <4 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280>
802 define <4 x i16> @and16imm2s_lsl24(<4 x i16> %a) {
803 ; CHECK-LABEL: and16imm2s_lsl24:
804 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
805 %tmp1 = and <4 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511>
810 define <1 x i64> @and64imm2s_lsl0(<1 x i64> %a) {
811 ; CHECK-LABEL: and64imm2s_lsl0:
812 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}
813 %tmp1 = and <1 x i64> %a, < i64 -1095216660736>
817 define <1 x i64> @and64imm2s_lsl8(<1 x i64> %a) {
818 ; CHECK-LABEL: and64imm2s_lsl8:
819 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
820 %tmp1 = and <1 x i64> %a, < i64 -280375465148161>
824 define <1 x i64> @and64imm2s_lsl16(<1 x i64> %a) {
825 ; CHECK-LABEL: and64imm2s_lsl16:
826 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
827 %tmp1 = and <1 x i64> %a, < i64 -71776119077928961>
831 define <1 x i64> @and64imm2s_lsl24(<1 x i64> %a) {
832 ; CHECK-LABEL: and64imm2s_lsl24:
833 ; CHECK: bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
834 %tmp1 = and <1 x i64> %a, < i64 144115183814443007>
838 define <16 x i8> @and8imm4s_lsl0(<16 x i8> %a) {
839 ; CHECK-LABEL: and8imm4s_lsl0:
840 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}
841 %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>
845 define <16 x i8> @and8imm4s_lsl8(<16 x i8> %a) {
846 ; CHECK-LABEL: and8imm4s_lsl8:
847 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
848 %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>
852 define <16 x i8> @and8imm4s_lsl16(<16 x i8> %a) {
853 ; CHECK-LABEL: and8imm4s_lsl16:
854 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
855 %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>
859 define <16 x i8> @and8imm4s_lsl24(<16 x i8> %a) {
860 ; CHECK-LABEL: and8imm4s_lsl24:
861 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
862 %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>
866 define <8 x i16> @and16imm4s_lsl0(<8 x i16> %a) {
867 ; CHECK-LABEL: and16imm4s_lsl0:
868 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}
869 %tmp1 = and <8 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535>
873 define <8 x i16> @and16imm4s_lsl8(<8 x i16> %a) {
874 ; CHECK-LABEL: and16imm4s_lsl8:
875 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
876 %tmp1 = and <8 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535>
880 define <8 x i16> @and16imm4s_lsl16(<8 x i16> %a) {
881 ; CHECK-LABEL: and16imm4s_lsl16:
882 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
883 %tmp1 = and <8 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280>
887 define <8 x i16> @and16imm4s_lsl24(<8 x i16> %a) {
888 ; CHECK-LABEL: and16imm4s_lsl24:
889 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
890 %tmp1 = and <8 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511>
894 define <2 x i64> @and64imm4s_lsl0(<2 x i64> %a) {
895 ; CHECK-LABEL: and64imm4s_lsl0:
896 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}
897 %tmp1 = and <2 x i64> %a, < i64 -1095216660736, i64 -1095216660736>
901 define <2 x i64> @and64imm4s_lsl8(<2 x i64> %a) {
902 ; CHECK-LABEL: and64imm4s_lsl8:
903 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
904 %tmp1 = and <2 x i64> %a, < i64 -280375465148161, i64 -280375465148161>
908 define <2 x i64> @and64imm4s_lsl16(<2 x i64> %a) {
909 ; CHECK-LABEL: and64imm4s_lsl16:
910 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
911 %tmp1 = and <2 x i64> %a, < i64 -71776119077928961, i64 -71776119077928961>
915 define <2 x i64> @and64imm4s_lsl24(<2 x i64> %a) {
916 ; CHECK-LABEL: and64imm4s_lsl24:
917 ; CHECK: bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
918 %tmp1 = and <2 x i64> %a, < i64 144115183814443007, i64 144115183814443007>
922 define <8 x i8> @and8imm4h_lsl0(<8 x i8> %a) {
923 ; CHECK-LABEL: and8imm4h_lsl0:
924 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}
925 %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
929 define <8 x i8> @and8imm4h_lsl8(<8 x i8> %a) {
930 ; CHECK-LABEL: and8imm4h_lsl8:
931 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
932 %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
936 define <2 x i32> @and16imm4h_lsl0(<2 x i32> %a) {
937 ; CHECK-LABEL: and16imm4h_lsl0:
938 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}
939 %tmp1 = and <2 x i32> %a, < i32 4278255360, i32 4278255360>
943 define <2 x i32> @and16imm4h_lsl8(<2 x i32> %a) {
944 ; CHECK-LABEL: and16imm4h_lsl8:
945 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
946 %tmp1 = and <2 x i32> %a, < i32 16711935, i32 16711935>
950 define <1 x i64> @and64imm4h_lsl0(<1 x i64> %a) {
951 ; CHECK-LABEL: and64imm4h_lsl0:
952 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}
953 %tmp1 = and <1 x i64> %a, < i64 -71777214294589696>
957 define <1 x i64> @and64imm4h_lsl8(<1 x i64> %a) {
958 ; CHECK-LABEL: and64imm4h_lsl8:
959 ; CHECK: bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
960 %tmp1 = and <1 x i64> %a, < i64 71777214294589695>
964 define <16 x i8> @and8imm8h_lsl0(<16 x i8> %a) {
965 ; CHECK-LABEL: and8imm8h_lsl0:
966 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}
967 %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 >
971 define <16 x i8> @and8imm8h_lsl8(<16 x i8> %a) {
972 ; CHECK-LABEL: and8imm8h_lsl8:
973 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
974 %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 >
978 define <4 x i32> @and16imm8h_lsl0(<4 x i32> %a) {
979 ; CHECK-LABEL: and16imm8h_lsl0:
980 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}
981 %tmp1 = and <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
985 define <4 x i32> @and16imm8h_lsl8(<4 x i32> %a) {
986 ; CHECK-LABEL: and16imm8h_lsl8:
987 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
988 %tmp1 = and <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
992 define <2 x i64> @and64imm8h_lsl0(<2 x i64> %a) {
993 ; CHECK-LABEL: and64imm8h_lsl0:
994 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}
995 %tmp1 = and <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
999 define <2 x i64> @and64imm8h_lsl8(<2 x i64> %a) {
1000 ; CHECK-LABEL: and64imm8h_lsl8:
1001 ; CHECK: bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1002 %tmp1 = and <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
1006 define <8 x i8> @orr8imm2s_lsl0(<8 x i8> %a) {
1007 ; CHECK-LABEL: orr8imm2s_lsl0:
1008 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}
1009 %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
1013 define <8 x i8> @orr8imm2s_lsl8(<8 x i8> %a) {
1014 ; CHECK-LABEL: orr8imm2s_lsl8:
1015 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1016 %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
1020 define <8 x i8> @orr8imm2s_lsl16(<8 x i8> %a) {
1021 ; CHECK-LABEL: orr8imm2s_lsl16:
1022 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1023 %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
1027 define <8 x i8> @orr8imm2s_lsl24(<8 x i8> %a) {
1028 ; CHECK-LABEL: orr8imm2s_lsl24:
1029 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1030 %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
1034 define <4 x i16> @orr16imm2s_lsl0(<4 x i16> %a) {
1035 ; CHECK-LABEL: orr16imm2s_lsl0:
1036 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}
1037 %tmp1 = or <4 x i16> %a, < i16 255, i16 0, i16 255, i16 0>
1041 define <4 x i16> @orr16imm2s_lsl8(<4 x i16> %a) {
1042 ; CHECK-LABEL: orr16imm2s_lsl8:
1043 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1044 %tmp1 = or <4 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0>
1048 define <4 x i16> @orr16imm2s_lsl16(<4 x i16> %a) {
1049 ; CHECK-LABEL: orr16imm2s_lsl16:
1050 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1051 %tmp1 = or <4 x i16> %a, < i16 0, i16 255, i16 0, i16 255>
1055 define <4 x i16> @orr16imm2s_lsl24(<4 x i16> %a) {
1056 ; CHECK-LABEL: orr16imm2s_lsl24:
1057 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1058 %tmp1 = or <4 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280>
1062 define <1 x i64> @orr64imm2s_lsl0(<1 x i64> %a) {
1063 ; CHECK-LABEL: orr64imm2s_lsl0:
1064 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}
1065 %tmp1 = or <1 x i64> %a, < i64 1095216660735>
1069 define <1 x i64> @orr64imm2s_lsl8(<1 x i64> %a) {
1070 ; CHECK-LABEL: orr64imm2s_lsl8:
1071 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1072 %tmp1 = or <1 x i64> %a, < i64 280375465148160>
1076 define <1 x i64> @orr64imm2s_lsl16(<1 x i64> %a) {
1077 ; CHECK-LABEL: orr64imm2s_lsl16:
1078 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1079 %tmp1 = or <1 x i64> %a, < i64 71776119077928960>
1083 define <1 x i64> @orr64imm2s_lsl24(<1 x i64> %a) {
1084 ; CHECK-LABEL: orr64imm2s_lsl24:
1085 ; CHECK: orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1086 %tmp1 = or <1 x i64> %a, < i64 -72057589759737856>
1090 define <16 x i8> @orr8imm4s_lsl0(<16 x i8> %a) {
1091 ; CHECK-LABEL: orr8imm4s_lsl0:
1092 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}
1093 %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>
1097 define <16 x i8> @orr8imm4s_lsl8(<16 x i8> %a) {
1098 ; CHECK-LABEL: orr8imm4s_lsl8:
1099 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1100 %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>
1104 define <16 x i8> @orr8imm4s_lsl16(<16 x i8> %a) {
1105 ; CHECK-LABEL: orr8imm4s_lsl16:
1106 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1107 %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>
1111 define <16 x i8> @orr8imm4s_lsl24(<16 x i8> %a) {
1112 ; CHECK-LABEL: orr8imm4s_lsl24:
1113 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1114 %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>
1118 define <8 x i16> @orr16imm4s_lsl0(<8 x i16> %a) {
1119 ; CHECK-LABEL: orr16imm4s_lsl0:
1120 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}
1121 %tmp1 = or <8 x i16> %a, < i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0>
1125 define <8 x i16> @orr16imm4s_lsl8(<8 x i16> %a) {
1126 ; CHECK-LABEL: orr16imm4s_lsl8:
1127 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1128 %tmp1 = or <8 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0>
1132 define <8 x i16> @orr16imm4s_lsl16(<8 x i16> %a) {
1133 ; CHECK-LABEL: orr16imm4s_lsl16:
1134 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1135 %tmp1 = or <8 x i16> %a, < i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255>
1139 define <8 x i16> @orr16imm4s_lsl24(<8 x i16> %a) {
1140 ; CHECK-LABEL: orr16imm4s_lsl24:
1141 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1142 %tmp1 = or <8 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280>
1146 define <2 x i64> @orr64imm4s_lsl0(<2 x i64> %a) {
1147 ; CHECK-LABEL: orr64imm4s_lsl0:
1148 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}
1149 %tmp1 = or <2 x i64> %a, < i64 1095216660735, i64 1095216660735>
1153 define <2 x i64> @orr64imm4s_lsl8(<2 x i64> %a) {
1154 ; CHECK-LABEL: orr64imm4s_lsl8:
1155 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1156 %tmp1 = or <2 x i64> %a, < i64 280375465148160, i64 280375465148160>
1160 define <2 x i64> @orr64imm4s_lsl16(<2 x i64> %a) {
1161 ; CHECK-LABEL: orr64imm4s_lsl16:
1162 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1163 %tmp1 = or <2 x i64> %a, < i64 71776119077928960, i64 71776119077928960>
1167 define <2 x i64> @orr64imm4s_lsl24(<2 x i64> %a) {
1168 ; CHECK-LABEL: orr64imm4s_lsl24:
1169 ; CHECK: orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1170 %tmp1 = or <2 x i64> %a, < i64 -72057589759737856, i64 -72057589759737856>
1174 define <8 x i8> @orr8imm4h_lsl0(<8 x i8> %a) {
1175 ; CHECK-LABEL: orr8imm4h_lsl0:
1176 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}
1177 %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1181 define <8 x i8> @orr8imm4h_lsl8(<8 x i8> %a) {
1182 ; CHECK-LABEL: orr8imm4h_lsl8:
1183 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1184 %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1188 define <2 x i32> @orr16imm4h_lsl0(<2 x i32> %a) {
1189 ; CHECK-LABEL: orr16imm4h_lsl0:
1190 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}
1191 %tmp1 = or <2 x i32> %a, < i32 16711935, i32 16711935>
1195 define <2 x i32> @orr16imm4h_lsl8(<2 x i32> %a) {
1196 ; CHECK-LABEL: orr16imm4h_lsl8:
1197 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1198 %tmp1 = or <2 x i32> %a, < i32 4278255360, i32 4278255360>
1202 define <1 x i64> @orr64imm4h_lsl0(<1 x i64> %a) {
1203 ; CHECK-LABEL: orr64imm4h_lsl0:
1204 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}
1205 %tmp1 = or <1 x i64> %a, < i64 71777214294589695>
1209 define <1 x i64> @orr64imm4h_lsl8(<1 x i64> %a) {
1210 ; CHECK-LABEL: orr64imm4h_lsl8:
1211 ; CHECK: orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1212 %tmp1 = or <1 x i64> %a, < i64 -71777214294589696>
1216 define <16 x i8> @orr8imm8h_lsl0(<16 x i8> %a) {
1217 ; CHECK-LABEL: orr8imm8h_lsl0:
1218 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}
1219 %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>
1223 define <16 x i8> @orr8imm8h_lsl8(<16 x i8> %a) {
1224 ; CHECK-LABEL: orr8imm8h_lsl8:
1225 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1226 %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>
1230 define <4 x i32> @orr16imm8h_lsl0(<4 x i32> %a) {
1231 ; CHECK-LABEL: orr16imm8h_lsl0:
1232 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}
1233 %tmp1 = or <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
1237 define <4 x i32> @orr16imm8h_lsl8(<4 x i32> %a) {
1238 ; CHECK-LABEL: orr16imm8h_lsl8:
1239 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1240 %tmp1 = or <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
1244 define <2 x i64> @orr64imm8h_lsl0(<2 x i64> %a) {
1245 ; CHECK-LABEL: orr64imm8h_lsl0:
1246 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}
1247 %tmp1 = or <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
1251 define <2 x i64> @orr64imm8h_lsl8(<2 x i64> %a) {
1252 ; CHECK-LABEL: orr64imm8h_lsl8:
1253 ; CHECK: orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1254 %tmp1 = or <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>