AArch64/ARM64: move ARM64 into AArch64's place
[oota-llvm.git] / test / CodeGen / AArch64 / neon-bitwise-instructions.ll
1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2
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;
7         ret <8 x i8> %tmp1
8 }
9
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;
14         ret <16 x i8> %tmp1
15 }
16
17
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;
22         ret <8 x i8> %tmp1
23 }
24
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;
29         ret <16 x i8> %tmp1
30 }
31
32
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;
37         ret <8 x i8> %tmp1
38 }
39
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;
44         ret <16 x i8> %tmp1
45 }
46
47 define <8 x i8> @bsl8xi8_const(<8 x i8> %a, <8 x i8> %b)  {
48 ; CHECK-LABEL: bsl8xi8_const:
49 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
50         %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
51         %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1 >
52         %tmp3 = or <8 x i8> %tmp1, %tmp2
53         ret <8 x i8> %tmp3
54 }
55
56 define <16 x i8> @bsl16xi8_const(<16 x i8> %a, <16 x i8> %b) {
57 ; CHECK-LABEL: bsl16xi8_const:
58 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
59         %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 >
60         %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 >
61         %tmp3 = or <16 x i8> %tmp1, %tmp2
62         ret <16 x i8> %tmp3
63 }
64
65 define <8 x i8> @orn8xi8(<8 x i8> %a, <8 x i8> %b)  {
66 ; CHECK-LABEL: orn8xi8:
67 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
68   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
69   %tmp2 = or <8 x i8> %a, %tmp1
70   ret <8 x i8> %tmp2
71 }
72
73 define <16 x i8> @orn16xi8(<16 x i8> %a, <16 x i8> %b) {
74 ; CHECK-LABEL: orn16xi8:
75 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
76   %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 >
77   %tmp2 = or <16 x i8> %a, %tmp1
78   ret <16 x i8> %tmp2
79 }
80
81 define <8 x i8> @bic8xi8(<8 x i8> %a, <8 x i8> %b)  {
82 ; CHECK-LABEL: bic8xi8:
83 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
84   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
85   %tmp2 = and <8 x i8> %a, %tmp1
86   ret <8 x i8> %tmp2
87 }
88
89 define <16 x i8> @bic16xi8(<16 x i8> %a, <16 x i8> %b) {
90 ; CHECK-LABEL: bic16xi8:
91 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
92   %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 >
93   %tmp2 = and <16 x i8> %a, %tmp1
94   ret <16 x i8> %tmp2
95 }
96
97 define <2 x i32> @orrimm2s_lsl0(<2 x i32> %a) {
98 ; CHECK-LABEL: orrimm2s_lsl0:
99 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
100         %tmp1 = or <2 x i32> %a, < i32 255, i32 255>
101         ret <2 x i32> %tmp1
102 }
103
104 define <2 x i32> @orrimm2s_lsl8(<2 x i32> %a) {
105 ; CHECK-LABEL: orrimm2s_lsl8:
106 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
107         %tmp1 = or <2 x i32> %a, < i32 65280, i32 65280>
108         ret <2 x i32> %tmp1
109 }
110
111 define <2 x i32> @orrimm2s_lsl16(<2 x i32> %a) {
112 ; CHECK-LABEL: orrimm2s_lsl16:
113 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
114         %tmp1 = or <2 x i32> %a, < i32 16711680, i32 16711680>
115         ret <2 x i32> %tmp1
116 }
117
118 define <2 x i32> @orrimm2s_lsl24(<2 x i32> %a) {
119 ; CHECK-LABEL: orrimm2s_lsl24:
120 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
121         %tmp1 = or <2 x i32> %a, < i32 4278190080, i32 4278190080>
122         ret <2 x i32> %tmp1
123 }
124
125 define <4 x i32> @orrimm4s_lsl0(<4 x i32> %a) {
126 ; CHECK-LABEL: orrimm4s_lsl0:
127 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
128         %tmp1 = or <4 x i32> %a, < i32 255, i32 255, i32 255, i32 255>
129         ret <4 x i32> %tmp1
130 }
131
132 define <4 x i32> @orrimm4s_lsl8(<4 x i32> %a) {
133 ; CHECK-LABEL: orrimm4s_lsl8:
134 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
135         %tmp1 = or <4 x i32> %a, < i32 65280, i32 65280, i32 65280, i32 65280>
136         ret <4 x i32> %tmp1
137 }
138
139 define <4 x i32> @orrimm4s_lsl16(<4 x i32> %a) {
140 ; CHECK-LABEL: orrimm4s_lsl16:
141 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
142         %tmp1 = or <4 x i32> %a, < i32 16711680, i32 16711680, i32 16711680, i32 16711680>
143         ret <4 x i32> %tmp1
144 }
145
146 define <4 x i32> @orrimm4s_lsl24(<4 x i32> %a) {
147 ; CHECK-LABEL: orrimm4s_lsl24:
148 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
149         %tmp1 = or <4 x i32> %a, < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080>
150         ret <4 x i32> %tmp1
151 }
152
153 define <4 x i16> @orrimm4h_lsl0(<4 x i16> %a) {
154 ; CHECK-LABEL: orrimm4h_lsl0:
155 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
156         %tmp1 = or <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255 >
157         ret <4 x i16> %tmp1
158 }
159
160 define <4 x i16> @orrimm4h_lsl8(<4 x i16> %a) {
161 ; CHECK-LABEL: orrimm4h_lsl8:
162 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
163         %tmp1 = or <4 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280 >
164         ret <4 x i16> %tmp1
165 }
166
167 define <8 x i16> @orrimm8h_lsl0(<8 x i16> %a) {
168 ; CHECK-LABEL: orrimm8h_lsl0:
169 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
170         %tmp1 = or <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
171         ret <8 x i16> %tmp1
172 }
173
174 define <8 x i16> @orrimm8h_lsl8(<8 x i16> %a) {
175 ; CHECK-LABEL: orrimm8h_lsl8:
176 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
177         %tmp1 = or <8 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
178         ret <8 x i16> %tmp1
179 }
180
181 define <2 x i32> @bicimm2s_lsl0(<2 x i32> %a) {
182 ; CHECK-LABEL: bicimm2s_lsl0:
183 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}
184         %tmp1 = and <2 x i32> %a, < i32 4294967279, i32 4294967279 >
185         ret <2 x i32> %tmp1
186 }
187
188 define <2 x i32> @bicimm2s_lsl8(<2 x i32> %a) {
189 ; CHECK-LABEL: bicimm2s_lsl8:
190 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
191         %tmp1 = and <2 x i32> %a, < i32 4294963199, i32  4294963199 >
192         ret <2 x i32> %tmp1
193 }
194
195 define <2 x i32> @bicimm2s_lsl16(<2 x i32> %a) {
196 ; CHECK-LABEL: bicimm2s_lsl16:
197 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
198         %tmp1 = and <2 x i32> %a, < i32 4293918719, i32 4293918719 >
199         ret <2 x i32> %tmp1
200 }
201
202 define <2 x i32> @bicimm2s_lsl124(<2 x i32> %a) {
203 ; CHECK-LABEL: bicimm2s_lsl124:
204 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
205         %tmp1 = and <2 x i32> %a, < i32 4026531839, i32  4026531839>
206         ret <2 x i32> %tmp1
207 }
208
209 define <4 x i32> @bicimm4s_lsl0(<4 x i32> %a) {
210 ; CHECK-LABEL: bicimm4s_lsl0:
211 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}
212         %tmp1 = and <4 x i32> %a, < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
213         ret <4 x i32> %tmp1
214 }
215
216 define <4 x i32> @bicimm4s_lsl8(<4 x i32> %a) {
217 ; CHECK-LABEL: bicimm4s_lsl8:
218 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
219         %tmp1 = and <4 x i32> %a, < i32 4294963199, i32  4294963199, i32  4294963199, i32  4294963199 >
220         ret <4 x i32> %tmp1
221 }
222
223 define <4 x i32> @bicimm4s_lsl16(<4 x i32> %a) {
224 ; CHECK-LABEL: bicimm4s_lsl16:
225 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
226         %tmp1 = and <4 x i32> %a, < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
227         ret <4 x i32> %tmp1
228 }
229
230 define <4 x i32> @bicimm4s_lsl124(<4 x i32> %a) {
231 ; CHECK-LABEL: bicimm4s_lsl124:
232 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
233         %tmp1 = and <4 x i32> %a, < i32 4026531839, i32  4026531839, i32  4026531839, i32  4026531839>
234         ret <4 x i32> %tmp1
235 }
236
237 define <4 x i16> @bicimm4h_lsl0_a(<4 x i16> %a) {
238 ; CHECK-LABEL: bicimm4h_lsl0_a:
239 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0x10|16}}
240         %tmp1 = and <4 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
241         ret <4 x i16> %tmp1
242 }
243
244 define <4 x i16> @bicimm4h_lsl0_b(<4 x i16> %a) {
245 ; CHECK-LABEL: bicimm4h_lsl0_b:
246 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
247         %tmp1 = and <4 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280 >
248         ret <4 x i16> %tmp1
249 }
250
251 define <4 x i16> @bicimm4h_lsl8_a(<4 x i16> %a) {
252 ; CHECK-LABEL: bicimm4h_lsl8_a:
253 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
254         %tmp1 = and <4 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
255         ret <4 x i16> %tmp1
256 }
257
258 define <4 x i16> @bicimm4h_lsl8_b(<4 x i16> %a) {
259 ; CHECK-LABEL: bicimm4h_lsl8_b:
260 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
261         %tmp1 = and <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255>
262         ret <4 x i16> %tmp1
263 }
264
265 define <8 x i16> @bicimm8h_lsl0_a(<8 x i16> %a) {
266 ; CHECK-LABEL: bicimm8h_lsl0_a:
267 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0x10|16}}
268         %tmp1 = and <8 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279,
269    i16  4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
270         ret <8 x i16> %tmp1
271 }
272
273 define <8 x i16> @bicimm8h_lsl0_b(<8 x i16> %a) {
274 ; CHECK-LABEL: bicimm8h_lsl0_b:
275 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
276         %tmp1 = and <8 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280, i16 65280, i16  65280, i16  65280, i16 65280 >
277         ret <8 x i16> %tmp1
278 }
279
280 define <8 x i16> @bicimm8h_lsl8_a(<8 x i16> %a) {
281 ; CHECK-LABEL: bicimm8h_lsl8_a:
282 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
283         %tmp1 = and <8 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199,
284    i16  4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
285         ret <8 x i16> %tmp1
286 }
287
288 define <8 x i16> @bicimm8h_lsl8_b(<8 x i16> %a) {
289 ; CHECK-LABEL: bicimm8h_lsl8_b:
290 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
291         %tmp1 = and <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
292         ret <8 x i16> %tmp1
293 }
294
295 define <2 x i32> @and2xi32(<2 x i32> %a, <2 x i32> %b) {
296 ; CHECK-LABEL: and2xi32:
297 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
298         %tmp1 = and <2 x i32> %a, %b;
299         ret <2 x i32> %tmp1
300 }
301
302 define <4 x i16> @and4xi16(<4 x i16> %a, <4 x i16> %b) {
303 ; CHECK-LABEL: and4xi16:
304 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
305         %tmp1 = and <4 x i16> %a, %b;
306         ret <4 x i16> %tmp1
307 }
308
309 define <1 x i64> @and1xi64(<1 x i64> %a, <1 x i64> %b) {
310 ; CHECK-LABEL: and1xi64:
311 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
312         %tmp1 = and <1 x i64> %a, %b;
313         ret <1 x i64> %tmp1
314 }
315
316 define <4 x i32> @and4xi32(<4 x i32> %a, <4 x i32> %b) {
317 ; CHECK-LABEL: and4xi32:
318 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
319         %tmp1 = and <4 x i32> %a, %b;
320         ret <4 x i32> %tmp1
321 }
322
323 define <8 x i16> @and8xi16(<8 x i16> %a, <8 x i16> %b) {
324 ; CHECK-LABEL: and8xi16:
325 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
326         %tmp1 = and <8 x i16> %a, %b;
327         ret <8 x i16> %tmp1
328 }
329
330 define <2 x i64> @and2xi64(<2 x i64> %a, <2 x i64> %b) {
331 ; CHECK-LABEL: and2xi64:
332 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
333         %tmp1 = and <2 x i64> %a, %b;
334         ret <2 x i64> %tmp1
335 }
336
337 define <2 x i32> @orr2xi32(<2 x i32> %a, <2 x i32> %b) {
338 ; CHECK-LABEL: orr2xi32:
339 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
340         %tmp1 = or <2 x i32> %a, %b;
341         ret <2 x i32> %tmp1
342 }
343
344 define <4 x i16> @orr4xi16(<4 x i16> %a, <4 x i16> %b) {
345 ; CHECK-LABEL: orr4xi16:
346 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
347         %tmp1 = or <4 x i16> %a, %b;
348         ret <4 x i16> %tmp1
349 }
350
351 define <1 x i64> @orr1xi64(<1 x i64> %a, <1 x i64> %b) {
352 ; CHECK-LABEL: orr1xi64:
353 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
354         %tmp1 = or <1 x i64> %a, %b;
355         ret <1 x i64> %tmp1
356 }
357
358 define <4 x i32> @orr4xi32(<4 x i32> %a, <4 x i32> %b) {
359 ; CHECK-LABEL: orr4xi32:
360 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
361         %tmp1 = or <4 x i32> %a, %b;
362         ret <4 x i32> %tmp1
363 }
364
365 define <8 x i16> @orr8xi16(<8 x i16> %a, <8 x i16> %b) {
366 ; CHECK-LABEL: orr8xi16:
367 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
368         %tmp1 = or <8 x i16> %a, %b;
369         ret <8 x i16> %tmp1
370 }
371
372 define <2 x i64> @orr2xi64(<2 x i64> %a, <2 x i64> %b) {
373 ; CHECK-LABEL: orr2xi64:
374 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
375         %tmp1 = or <2 x i64> %a, %b;
376         ret <2 x i64> %tmp1
377 }
378
379 define <2 x i32> @eor2xi32(<2 x i32> %a, <2 x i32> %b) {
380 ; CHECK-LABEL: eor2xi32:
381 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
382         %tmp1 = xor <2 x i32> %a, %b;
383         ret <2 x i32> %tmp1
384 }
385
386 define <4 x i16> @eor4xi16(<4 x i16> %a, <4 x i16> %b) {
387 ; CHECK-LABEL: eor4xi16:
388 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
389         %tmp1 = xor <4 x i16> %a, %b;
390         ret <4 x i16> %tmp1
391 }
392
393 define <1 x i64> @eor1xi64(<1 x i64> %a, <1 x i64> %b) {
394 ; CHECK-LABEL: eor1xi64:
395 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
396         %tmp1 = xor <1 x i64> %a, %b;
397         ret <1 x i64> %tmp1
398 }
399
400 define <4 x i32> @eor4xi32(<4 x i32> %a, <4 x i32> %b) {
401 ; CHECK-LABEL: eor4xi32:
402 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
403         %tmp1 = xor <4 x i32> %a, %b;
404         ret <4 x i32> %tmp1
405 }
406
407 define <8 x i16> @eor8xi16(<8 x i16> %a, <8 x i16> %b) {
408 ; CHECK-LABEL: eor8xi16:
409 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
410         %tmp1 = xor <8 x i16> %a, %b;
411         ret <8 x i16> %tmp1
412 }
413
414 define <2 x i64> @eor2xi64(<2 x i64> %a, <2 x i64> %b) {
415 ; CHECK-LABEL: eor2xi64:
416 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
417         %tmp1 = xor <2 x i64> %a, %b;
418         ret <2 x i64> %tmp1
419 }
420
421
422 define <2 x i32> @bic2xi32(<2 x i32> %a, <2 x i32> %b)  {
423 ; CHECK-LABEL: bic2xi32:
424 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
425   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
426   %tmp2 = and <2 x i32> %a, %tmp1
427   ret <2 x i32> %tmp2
428 }
429
430 define <4 x i16> @bic4xi16(<4 x i16> %a, <4 x i16> %b)  {
431 ; CHECK-LABEL: bic4xi16:
432 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
433   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
434   %tmp2 = and <4 x i16> %a, %tmp1
435   ret <4 x i16> %tmp2
436 }
437
438 define <1 x i64> @bic1xi64(<1 x i64> %a, <1 x i64> %b)  {
439 ; CHECK-LABEL: bic1xi64:
440 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
441   %tmp1 = xor <1 x i64> %b, < i64 -1>
442   %tmp2 = and <1 x i64> %a, %tmp1
443   ret <1 x i64> %tmp2
444 }
445
446 define <4 x i32> @bic4xi32(<4 x i32> %a, <4 x i32> %b)  {
447 ; CHECK-LABEL: bic4xi32:
448 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
449   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
450   %tmp2 = and <4 x i32> %a, %tmp1
451   ret <4 x i32> %tmp2
452 }
453
454 define <8 x i16> @bic8xi16(<8 x i16> %a, <8 x i16> %b)  {
455 ; CHECK-LABEL: bic8xi16:
456 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
457   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
458   %tmp2 = and <8 x i16> %a, %tmp1
459   ret <8 x i16> %tmp2
460 }
461
462 define <2 x i64> @bic2xi64(<2 x i64> %a, <2 x i64> %b)  {
463 ; CHECK-LABEL: bic2xi64:
464 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
465   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
466   %tmp2 = and <2 x i64> %a, %tmp1
467   ret <2 x i64> %tmp2
468 }
469
470 define <2 x i32> @orn2xi32(<2 x i32> %a, <2 x i32> %b)  {
471 ; CHECK-LABEL: orn2xi32:
472 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
473   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
474   %tmp2 = or <2 x i32> %a, %tmp1
475   ret <2 x i32> %tmp2
476 }
477
478 define <4 x i16> @orn4xi16(<4 x i16> %a, <4 x i16> %b)  {
479 ; CHECK-LABEL: orn4xi16:
480 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
481   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
482   %tmp2 = or <4 x i16> %a, %tmp1
483   ret <4 x i16> %tmp2
484 }
485
486 define <1 x i64> @orn1xi64(<1 x i64> %a, <1 x i64> %b)  {
487 ; CHECK-LABEL: orn1xi64:
488 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
489   %tmp1 = xor <1 x i64> %b, < i64 -1>
490   %tmp2 = or <1 x i64> %a, %tmp1
491   ret <1 x i64> %tmp2
492 }
493
494 define <4 x i32> @orn4xi32(<4 x i32> %a, <4 x i32> %b)  {
495 ; CHECK-LABEL: orn4xi32:
496 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
497   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
498   %tmp2 = or <4 x i32> %a, %tmp1
499   ret <4 x i32> %tmp2
500 }
501
502 define <8 x i16> @orn8xi16(<8 x i16> %a, <8 x i16> %b)  {
503 ; CHECK-LABEL: orn8xi16:
504 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
505   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
506   %tmp2 = or <8 x i16> %a, %tmp1
507   ret <8 x i16> %tmp2
508 }
509
510 define <2 x i64> @orn2xi64(<2 x i64> %a, <2 x i64> %b)  {
511 ; CHECK-LABEL: orn2xi64:
512 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
513   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
514   %tmp2 = or <2 x i64> %a, %tmp1
515   ret <2 x i64> %tmp2
516 }
517
518 define <2 x i32> @bsl2xi32_const(<2 x i32> %a, <2 x i32> %b)  {
519 ; CHECK-LABEL: bsl2xi32_const:
520 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
521         %tmp1 = and <2 x i32> %a, < i32 -1, i32 0 >
522         %tmp2 = and <2 x i32> %b, < i32 0, i32 -1 >
523         %tmp3 = or <2 x i32> %tmp1, %tmp2
524         ret <2 x i32> %tmp3
525 }
526
527
528 define <4 x i16> @bsl4xi16_const(<4 x i16> %a, <4 x i16> %b)  {
529 ; CHECK-LABEL: bsl4xi16_const:
530 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
531         %tmp1 = and <4 x i16> %a, < i16 -1, i16 0, i16 -1,i16 0 >
532         %tmp2 = and <4 x i16> %b, < i16 0, i16 -1,i16 0, i16 -1 >
533         %tmp3 = or <4 x i16> %tmp1, %tmp2
534         ret <4 x i16> %tmp3
535 }
536
537 define <1 x i64> @bsl1xi64_const(<1 x i64> %a, <1 x i64> %b)  {
538 ; CHECK-LABEL: bsl1xi64_const:
539 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
540         %tmp1 = and <1 x i64> %a, < i64 -16 >
541         %tmp2 = and <1 x i64> %b, < i64 15 >
542         %tmp3 = or <1 x i64> %tmp1, %tmp2
543         ret <1 x i64> %tmp3
544 }
545
546 define <4 x i32> @bsl4xi32_const(<4 x i32> %a, <4 x i32> %b)  {
547 ; CHECK-LABEL: bsl4xi32_const:
548 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
549         %tmp1 = and <4 x i32> %a, < i32 -1, i32 0, i32 -1, i32 0 >
550         %tmp2 = and <4 x i32> %b, < i32 0, i32 -1, i32 0, i32 -1 >
551         %tmp3 = or <4 x i32> %tmp1, %tmp2
552         ret <4 x i32> %tmp3
553 }
554
555 define <8 x i16> @bsl8xi16_const(<8 x i16> %a, <8 x i16> %b)  {
556 ; CHECK-LABEL: bsl8xi16_const:
557 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
558         %tmp1 = and <8 x i16> %a, < i16 -1, i16 -1, i16 0,i16 0, i16 -1, i16 -1, i16 0,i16 0 >
559         %tmp2 = and <8 x i16> %b, < i16 0, i16 0, i16 -1, i16 -1, i16 0, i16 0, i16 -1, i16 -1 >
560         %tmp3 = or <8 x i16> %tmp1, %tmp2
561         ret <8 x i16> %tmp3
562 }
563
564 define <2 x i64> @bsl2xi64_const(<2 x i64> %a, <2 x i64> %b)  {
565 ; CHECK-LABEL: bsl2xi64_const:
566 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
567         %tmp1 = and <2 x i64> %a, < i64 -1, i64 0 >
568         %tmp2 = and <2 x i64> %b, < i64 0, i64 -1 >
569         %tmp3 = or <2 x i64> %tmp1, %tmp2
570         ret <2 x i64> %tmp3
571 }
572
573
574 define <8 x i8> @bsl8xi8(<8 x i8> %v1, <8 x i8> %v2, <8 x i8> %v3) {
575 ; CHECK-LABEL: bsl8xi8:
576 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
577   %1 = and <8 x i8> %v1, %v2
578   %2 = xor <8 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
579   %3 = and <8 x i8> %2, %v3
580   %4 = or <8 x i8> %1, %3
581   ret <8 x i8> %4
582 }
583
584 define <4 x i16> @bsl4xi16(<4 x i16> %v1, <4 x i16> %v2, <4 x i16> %v3) {
585 ; CHECK-LABEL: bsl4xi16:
586 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
587   %1 = and <4 x i16> %v1, %v2
588   %2 = xor <4 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1>
589   %3 = and <4 x i16> %2, %v3
590   %4 = or <4 x i16> %1, %3
591   ret <4 x i16> %4
592 }
593
594 define <2 x i32> @bsl2xi32(<2 x i32> %v1, <2 x i32> %v2, <2 x i32> %v3) {
595 ; CHECK-LABEL: bsl2xi32:
596 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
597   %1 = and <2 x i32> %v1, %v2
598   %2 = xor <2 x i32> %v1, <i32 -1, i32 -1>
599   %3 = and <2 x i32> %2, %v3
600   %4 = or <2 x i32> %1, %3
601   ret <2 x i32> %4
602 }
603
604 define <1 x i64> @bsl1xi64(<1 x i64> %v1, <1 x i64> %v2, <1 x i64> %v3) {
605 ; CHECK-LABEL: bsl1xi64:
606 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
607   %1 = and <1 x i64> %v1, %v2
608   %2 = xor <1 x i64> %v1, <i64 -1>
609   %3 = and <1 x i64> %2, %v3
610   %4 = or <1 x i64> %1, %3
611   ret <1 x i64> %4
612 }
613
614 define <16 x i8> @bsl16xi8(<16 x i8> %v1, <16 x i8> %v2, <16 x i8> %v3) {
615 ; CHECK-LABEL: bsl16xi8:
616 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
617   %1 = and <16 x i8> %v1, %v2
618   %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>
619   %3 = and <16 x i8> %2, %v3
620   %4 = or <16 x i8> %1, %3
621   ret <16 x i8> %4
622 }
623
624 define <8 x i16> @bsl8xi16(<8 x i16> %v1, <8 x i16> %v2, <8 x i16> %v3) {
625 ; CHECK-LABEL: bsl8xi16:
626 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
627   %1 = and <8 x i16> %v1, %v2
628   %2 = xor <8 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
629   %3 = and <8 x i16> %2, %v3
630   %4 = or <8 x i16> %1, %3
631   ret <8 x i16> %4
632 }
633
634 define <4 x i32> @bsl4xi32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
635 ; CHECK-LABEL: bsl4xi32:
636 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
637   %1 = and <4 x i32> %v1, %v2
638   %2 = xor <4 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1>
639   %3 = and <4 x i32> %2, %v3
640   %4 = or <4 x i32> %1, %3
641   ret <4 x i32> %4
642 }
643
644 define <8 x i8> @vselect_v8i8(<8 x i8> %a) {
645 ; CHECK-LABEL: vselect_v8i8:
646 ; CHECK:  movi {{d[0-9]+}}, #0x{{0*}}ffff
647 ; 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}}
648   %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>
649   ret <8 x i8> %b
650 }
651
652 define <4 x i16> @vselect_v4i16(<4 x i16> %a) {
653 ; CHECK-LABEL: vselect_v4i16:
654 ; CHECK:  movi {{d[0-9]+}}, #0x{{0*}}ffff
655 ; 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}}
656   %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>
657   ret <4 x i16> %b
658 }
659
660 define <8 x i8> @vselect_cmp_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
661 ; CHECK-LABEL: vselect_cmp_ne:
662 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
663 ; CHECK-NEXT:  {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
664 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
665   %cmp = icmp ne <8 x i8> %a, %b
666   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
667   ret <8 x i8> %d
668 }
669
670 define <8 x i8> @vselect_cmp_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
671 ; CHECK-LABEL: vselect_cmp_eq:
672 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
673 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
674   %cmp = icmp eq <8 x i8> %a, %b
675   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
676   ret <8 x i8> %d
677 }
678
679 define <8 x i8> @vselect_cmpz_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
680 ; CHECK-LABEL: vselect_cmpz_ne:
681 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
682 ; CHECK-NEXT:  {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
683 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
684   %cmp = icmp ne <8 x i8> %a, zeroinitializer
685   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
686   ret <8 x i8> %d
687 }
688
689 define <8 x i8> @vselect_cmpz_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
690 ; CHECK-LABEL: vselect_cmpz_eq:
691 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
692 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
693   %cmp = icmp eq <8 x i8> %a, zeroinitializer
694   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
695   ret <8 x i8> %d
696 }
697
698 define <8 x i8> @vselect_tst(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
699 ; CHECK-LABEL: vselect_tst:
700 ; CHECK:  cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
701 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
702         %tmp3 = and <8 x i8> %a, %b
703         %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
704   %d = select <8 x i1> %tmp4, <8 x i8> %b, <8 x i8> %c
705   ret <8 x i8> %d
706 }
707
708 define <2 x i64> @bsl2xi64(<2 x i64> %v1, <2 x i64> %v2, <2 x i64> %v3) {
709 ; CHECK-LABEL: bsl2xi64:
710 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
711   %1 = and <2 x i64> %v1, %v2
712   %2 = xor <2 x i64> %v1, <i64 -1, i64 -1>
713   %3 = and <2 x i64> %2, %v3
714   %4 = or <2 x i64> %1, %3
715   ret <2 x i64> %4
716 }
717
718 define <8 x i8> @orrimm8b_as_orrimm4h_lsl0(<8 x i8> %a) {
719 ; CHECK-LABEL: orrimm8b_as_orrimm4h_lsl0:
720 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
721   %val = or <8 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
722   ret <8 x i8> %val
723 }
724
725 define <8 x i8> @orrimm8b_as_orimm4h_lsl8(<8 x i8> %a) {
726 ; CHECK-LABEL: orrimm8b_as_orimm4h_lsl8:
727 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
728   %val = or <8 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
729   ret <8 x i8> %val
730 }
731
732 define <16 x i8> @orimm16b_as_orrimm8h_lsl0(<16 x i8> %a) {
733 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl0:
734 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
735   %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>
736   ret <16 x i8> %val
737 }
738
739 define <16 x i8> @orimm16b_as_orrimm8h_lsl8(<16 x i8> %a) {
740 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl8:
741 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
742   %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>
743   ret <16 x i8> %val
744 }
745
746 define <8 x i8> @and8imm2s_lsl0(<8 x i8> %a) {
747 ; CHECK-LABEL: and8imm2s_lsl0:
748 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
749         %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
750         ret <8 x i8> %tmp1
751 }
752
753 define <8 x i8> @and8imm2s_lsl8(<8 x i8> %a) {
754 ; CHECK-LABEL: and8imm2s_lsl8:
755 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
756         %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
757         ret <8 x i8> %tmp1
758 }
759
760 define <8 x i8> @and8imm2s_lsl16(<8 x i8> %a) {
761 ; CHECK-LABEL: and8imm2s_lsl16:
762 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
763         %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
764         ret <8 x i8> %tmp1
765 }
766
767 define <8 x i8> @and8imm2s_lsl24(<8 x i8> %a) {
768 ; CHECK-LABEL: and8imm2s_lsl24:
769 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
770         %tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
771         ret <8 x i8> %tmp1
772 }
773
774 define <4 x i16> @and16imm2s_lsl0(<4 x i16> %a) {
775 ; CHECK-LABEL: and16imm2s_lsl0:
776 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
777         %tmp1 = and <4 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535>
778         ret <4 x i16> %tmp1
779 }
780
781 define <4 x i16> @and16imm2s_lsl8(<4 x i16> %a) {
782 ; CHECK-LABEL: and16imm2s_lsl8:
783 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
784         %tmp1 = and <4 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535>
785         ret <4 x i16> %tmp1
786 }
787
788 define <4 x i16> @and16imm2s_lsl16(<4 x i16> %a) {
789 ; CHECK-LABEL: and16imm2s_lsl16:
790 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
791         %tmp1 = and <4 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280>
792         ret <4 x i16> %tmp1
793 }
794
795 define <4 x i16> @and16imm2s_lsl24(<4 x i16> %a) {
796 ; CHECK-LABEL: and16imm2s_lsl24:
797 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
798         %tmp1 = and <4 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511>
799         ret <4 x i16> %tmp1
800 }
801
802
803 define <1 x i64> @and64imm2s_lsl0(<1 x i64> %a) {
804 ; CHECK-LABEL: and64imm2s_lsl0:
805 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
806         %tmp1 = and <1 x i64> %a, < i64 -1095216660736>
807         ret <1 x i64> %tmp1
808 }
809
810 define <1 x i64> @and64imm2s_lsl8(<1 x i64> %a) {
811 ; CHECK-LABEL: and64imm2s_lsl8:
812 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
813         %tmp1 = and <1 x i64> %a, < i64 -280375465148161>
814         ret <1 x i64> %tmp1
815 }
816
817 define <1 x i64> @and64imm2s_lsl16(<1 x i64> %a) {
818 ; CHECK-LABEL: and64imm2s_lsl16:
819 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
820         %tmp1 = and <1 x i64> %a, < i64 -71776119077928961>
821         ret <1 x i64> %tmp1
822 }
823
824 define <1 x i64> @and64imm2s_lsl24(<1 x i64> %a) {
825 ; CHECK-LABEL: and64imm2s_lsl24:
826 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
827         %tmp1 = and <1 x i64> %a, < i64 144115183814443007>
828         ret <1 x i64> %tmp1
829 }
830
831 define <16 x i8> @and8imm4s_lsl0(<16 x i8> %a) {
832 ; CHECK-LABEL: and8imm4s_lsl0:
833 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
834         %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>
835         ret <16 x i8> %tmp1
836 }
837
838 define <16 x i8> @and8imm4s_lsl8(<16 x i8> %a) {
839 ; CHECK-LABEL: and8imm4s_lsl8:
840 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
841         %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>
842         ret <16 x i8> %tmp1
843 }
844
845 define <16 x i8> @and8imm4s_lsl16(<16 x i8> %a) {
846 ; CHECK-LABEL: and8imm4s_lsl16:
847 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
848         %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>
849         ret <16 x i8> %tmp1
850 }
851
852 define <16 x i8> @and8imm4s_lsl24(<16 x i8> %a) {
853 ; CHECK-LABEL: and8imm4s_lsl24:
854 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
855         %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>
856         ret <16 x i8> %tmp1
857 }
858
859 define <8 x i16> @and16imm4s_lsl0(<8 x i16> %a) {
860 ; CHECK-LABEL: and16imm4s_lsl0:
861 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
862         %tmp1 = and <8 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535>
863         ret <8 x i16> %tmp1
864 }
865
866 define <8 x i16> @and16imm4s_lsl8(<8 x i16> %a) {
867 ; CHECK-LABEL: and16imm4s_lsl8:
868 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
869         %tmp1 = and <8 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535>
870         ret <8 x i16> %tmp1
871 }
872
873 define <8 x i16> @and16imm4s_lsl16(<8 x i16> %a) {
874 ; CHECK-LABEL: and16imm4s_lsl16:
875 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
876         %tmp1 = and <8 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280>
877         ret <8 x i16> %tmp1
878 }
879
880 define <8 x i16> @and16imm4s_lsl24(<8 x i16> %a) {
881 ; CHECK-LABEL: and16imm4s_lsl24:
882 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
883         %tmp1 = and <8 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511>
884         ret <8 x i16> %tmp1
885 }
886
887 define <2 x i64> @and64imm4s_lsl0(<2 x i64> %a) {
888 ; CHECK-LABEL: and64imm4s_lsl0:
889 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
890         %tmp1 = and <2 x i64> %a, < i64 -1095216660736, i64 -1095216660736>
891         ret <2 x i64> %tmp1
892 }
893
894 define <2 x i64> @and64imm4s_lsl8(<2 x i64> %a) {
895 ; CHECK-LABEL: and64imm4s_lsl8:
896 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
897         %tmp1 = and <2 x i64> %a, < i64 -280375465148161, i64 -280375465148161>
898         ret <2 x i64> %tmp1
899 }
900
901 define <2 x i64> @and64imm4s_lsl16(<2 x i64> %a) {
902 ; CHECK-LABEL: and64imm4s_lsl16:
903 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
904         %tmp1 = and <2 x i64> %a, < i64 -71776119077928961, i64 -71776119077928961>
905         ret <2 x i64> %tmp1
906 }
907
908 define <2 x i64> @and64imm4s_lsl24(<2 x i64> %a) {
909 ; CHECK-LABEL: and64imm4s_lsl24:
910 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
911         %tmp1 = and <2 x i64> %a, < i64 144115183814443007, i64 144115183814443007>
912         ret <2 x i64> %tmp1
913 }
914
915 define <8 x i8> @and8imm4h_lsl0(<8 x i8> %a) {
916 ; CHECK-LABEL: and8imm4h_lsl0:
917 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
918         %tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
919         ret <8 x i8> %tmp1
920 }
921
922 define <8 x i8> @and8imm4h_lsl8(<8 x i8> %a) {
923 ; CHECK-LABEL: and8imm4h_lsl8:
924 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
925         %tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
926         ret <8 x i8> %tmp1
927 }
928
929 define <2 x i32> @and16imm4h_lsl0(<2 x i32> %a) {
930 ; CHECK-LABEL: and16imm4h_lsl0:
931 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
932         %tmp1 = and <2 x i32> %a, < i32 4278255360, i32 4278255360>
933         ret <2 x i32> %tmp1
934 }
935
936 define <2 x i32> @and16imm4h_lsl8(<2 x i32> %a) {
937 ; CHECK-LABEL: and16imm4h_lsl8:
938 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
939         %tmp1 = and <2 x i32> %a, < i32 16711935, i32 16711935>
940         ret <2 x i32> %tmp1
941 }
942
943 define <1 x i64> @and64imm4h_lsl0(<1 x i64> %a) {
944 ; CHECK-LABEL: and64imm4h_lsl0:
945 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
946         %tmp1 = and <1 x i64> %a, < i64 -71777214294589696>
947         ret <1 x i64> %tmp1
948 }
949
950 define <1 x i64> @and64imm4h_lsl8(<1 x i64> %a) {
951 ; CHECK-LABEL: and64imm4h_lsl8:
952 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
953         %tmp1 = and <1 x i64> %a, < i64 71777214294589695>
954         ret <1 x i64> %tmp1
955 }
956
957 define <16 x i8> @and8imm8h_lsl0(<16 x i8> %a) {
958 ; CHECK-LABEL: and8imm8h_lsl0:
959 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
960         %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 >
961         ret <16 x i8> %tmp1
962 }
963
964 define <16 x i8> @and8imm8h_lsl8(<16 x i8> %a) {
965 ; CHECK-LABEL: and8imm8h_lsl8:
966 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
967         %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 >
968         ret <16 x i8> %tmp1
969 }
970
971 define <4 x i32> @and16imm8h_lsl0(<4 x i32> %a) {
972 ; CHECK-LABEL: and16imm8h_lsl0:
973 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
974         %tmp1 = and <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
975         ret <4 x i32> %tmp1
976 }
977
978 define <4 x i32> @and16imm8h_lsl8(<4 x i32> %a) {
979 ; CHECK-LABEL: and16imm8h_lsl8:
980 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
981         %tmp1 = and <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
982         ret <4 x i32> %tmp1
983 }
984
985 define <2 x i64> @and64imm8h_lsl0(<2 x i64> %a) {
986 ; CHECK-LABEL: and64imm8h_lsl0:
987 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
988         %tmp1 = and <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
989         ret <2 x i64> %tmp1
990 }
991
992 define <2 x i64> @and64imm8h_lsl8(<2 x i64> %a) {
993 ; CHECK-LABEL: and64imm8h_lsl8:
994 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
995         %tmp1 = and <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
996         ret <2 x i64> %tmp1
997 }
998
999 define <8 x i8> @orr8imm2s_lsl0(<8 x i8> %a) {
1000 ; CHECK-LABEL: orr8imm2s_lsl0:
1001 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
1002         %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
1003         ret <8 x i8> %tmp1
1004 }
1005
1006 define <8 x i8> @orr8imm2s_lsl8(<8 x i8> %a) {
1007 ; CHECK-LABEL: orr8imm2s_lsl8:
1008 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1009         %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
1010         ret <8 x i8> %tmp1
1011 }
1012
1013 define <8 x i8> @orr8imm2s_lsl16(<8 x i8> %a) {
1014 ; CHECK-LABEL: orr8imm2s_lsl16:
1015 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1016         %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
1017         ret <8 x i8> %tmp1
1018 }
1019
1020 define <8 x i8> @orr8imm2s_lsl24(<8 x i8> %a) {
1021 ; CHECK-LABEL: orr8imm2s_lsl24:
1022 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1023         %tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
1024         ret <8 x i8> %tmp1
1025 }
1026
1027 define <4 x i16> @orr16imm2s_lsl0(<4 x i16> %a) {
1028 ; CHECK-LABEL: orr16imm2s_lsl0:
1029 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
1030         %tmp1 = or <4 x i16> %a, < i16 255, i16 0, i16 255, i16 0>
1031         ret <4 x i16> %tmp1
1032 }
1033
1034 define <4 x i16> @orr16imm2s_lsl8(<4 x i16> %a) {
1035 ; CHECK-LABEL: orr16imm2s_lsl8:
1036 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1037         %tmp1 = or <4 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0>
1038         ret <4 x i16> %tmp1
1039 }
1040
1041 define <4 x i16> @orr16imm2s_lsl16(<4 x i16> %a) {
1042 ; CHECK-LABEL: orr16imm2s_lsl16:
1043 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1044         %tmp1 = or <4 x i16> %a, < i16 0, i16 255, i16 0, i16 255>
1045         ret <4 x i16> %tmp1
1046 }
1047
1048 define <4 x i16> @orr16imm2s_lsl24(<4 x i16> %a) {
1049 ; CHECK-LABEL: orr16imm2s_lsl24:
1050 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1051         %tmp1 = or <4 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280>
1052         ret <4 x i16> %tmp1
1053 }
1054
1055 define <1 x i64> @orr64imm2s_lsl0(<1 x i64> %a) {
1056 ; CHECK-LABEL: orr64imm2s_lsl0:
1057 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
1058         %tmp1 = or <1 x i64> %a, < i64 1095216660735>
1059         ret <1 x i64> %tmp1
1060 }
1061
1062 define <1 x i64> @orr64imm2s_lsl8(<1 x i64> %a) {
1063 ; CHECK-LABEL: orr64imm2s_lsl8:
1064 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
1065         %tmp1 = or <1 x i64> %a, < i64 280375465148160>
1066         ret <1 x i64> %tmp1
1067 }
1068
1069 define <1 x i64> @orr64imm2s_lsl16(<1 x i64> %a) {
1070 ; CHECK-LABEL: orr64imm2s_lsl16:
1071 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
1072         %tmp1 = or <1 x i64> %a, < i64 71776119077928960>
1073         ret <1 x i64> %tmp1
1074 }
1075
1076 define <1 x i64> @orr64imm2s_lsl24(<1 x i64> %a) {
1077 ; CHECK-LABEL: orr64imm2s_lsl24:
1078 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
1079         %tmp1 = or <1 x i64> %a, < i64 -72057589759737856>
1080         ret <1 x i64> %tmp1
1081 }
1082
1083 define <16 x i8> @orr8imm4s_lsl0(<16 x i8> %a) {
1084 ; CHECK-LABEL: orr8imm4s_lsl0:
1085 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
1086         %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>
1087         ret <16 x i8> %tmp1
1088 }
1089
1090 define <16 x i8> @orr8imm4s_lsl8(<16 x i8> %a) {
1091 ; CHECK-LABEL: orr8imm4s_lsl8:
1092 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1093         %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>
1094         ret <16 x i8> %tmp1
1095 }
1096
1097 define <16 x i8> @orr8imm4s_lsl16(<16 x i8> %a) {
1098 ; CHECK-LABEL: orr8imm4s_lsl16:
1099 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1100         %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>
1101         ret <16 x i8> %tmp1
1102 }
1103
1104 define <16 x i8> @orr8imm4s_lsl24(<16 x i8> %a) {
1105 ; CHECK-LABEL: orr8imm4s_lsl24:
1106 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1107         %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>
1108         ret <16 x i8> %tmp1
1109 }
1110
1111 define <8 x i16> @orr16imm4s_lsl0(<8 x i16> %a) {
1112 ; CHECK-LABEL: orr16imm4s_lsl0:
1113 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
1114         %tmp1 = or <8 x i16> %a, < i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0>
1115         ret <8 x i16> %tmp1
1116 }
1117
1118 define <8 x i16> @orr16imm4s_lsl8(<8 x i16> %a) {
1119 ; CHECK-LABEL: orr16imm4s_lsl8:
1120 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1121         %tmp1 = or <8 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0>
1122         ret <8 x i16> %tmp1
1123 }
1124
1125 define <8 x i16> @orr16imm4s_lsl16(<8 x i16> %a) {
1126 ; CHECK-LABEL: orr16imm4s_lsl16:
1127 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1128         %tmp1 = or <8 x i16> %a, < i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255>
1129         ret <8 x i16> %tmp1
1130 }
1131
1132 define <8 x i16> @orr16imm4s_lsl24(<8 x i16> %a) {
1133 ; CHECK-LABEL: orr16imm4s_lsl24:
1134 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1135         %tmp1 = or <8 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280>
1136         ret <8 x i16> %tmp1
1137 }
1138
1139 define <2 x i64> @orr64imm4s_lsl0(<2 x i64> %a) {
1140 ; CHECK-LABEL: orr64imm4s_lsl0:
1141 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
1142         %tmp1 = or <2 x i64> %a, < i64 1095216660735, i64 1095216660735>
1143         ret <2 x i64> %tmp1
1144 }
1145
1146 define <2 x i64> @orr64imm4s_lsl8(<2 x i64> %a) {
1147 ; CHECK-LABEL: orr64imm4s_lsl8:
1148 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
1149         %tmp1 = or <2 x i64> %a, < i64 280375465148160, i64 280375465148160>
1150         ret <2 x i64> %tmp1
1151 }
1152
1153 define <2 x i64> @orr64imm4s_lsl16(<2 x i64> %a) {
1154 ; CHECK-LABEL: orr64imm4s_lsl16:
1155 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
1156         %tmp1 = or <2 x i64> %a, < i64 71776119077928960, i64 71776119077928960>
1157         ret <2 x i64> %tmp1
1158 }
1159
1160 define <2 x i64> @orr64imm4s_lsl24(<2 x i64> %a) {
1161 ; CHECK-LABEL: orr64imm4s_lsl24:
1162 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
1163         %tmp1 = or <2 x i64> %a, < i64 -72057589759737856, i64 -72057589759737856>
1164         ret <2 x i64> %tmp1
1165 }
1166
1167 define <8 x i8> @orr8imm4h_lsl0(<8 x i8> %a) {
1168 ; CHECK-LABEL: orr8imm4h_lsl0:
1169 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
1170         %tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
1171         ret <8 x i8> %tmp1
1172 }
1173
1174 define <8 x i8> @orr8imm4h_lsl8(<8 x i8> %a) {
1175 ; CHECK-LABEL: orr8imm4h_lsl8:
1176 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1177         %tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
1178         ret <8 x i8> %tmp1
1179 }
1180
1181 define <2 x i32> @orr16imm4h_lsl0(<2 x i32> %a) {
1182 ; CHECK-LABEL: orr16imm4h_lsl0:
1183 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
1184         %tmp1 = or <2 x i32> %a, < i32 16711935, i32 16711935>
1185         ret <2 x i32> %tmp1
1186 }
1187
1188 define <2 x i32> @orr16imm4h_lsl8(<2 x i32> %a) {
1189 ; CHECK-LABEL: orr16imm4h_lsl8:
1190 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1191         %tmp1 = or <2 x i32> %a, < i32 4278255360, i32 4278255360>
1192         ret <2 x i32> %tmp1
1193 }
1194
1195 define <1 x i64> @orr64imm4h_lsl0(<1 x i64> %a) {
1196 ; CHECK-LABEL: orr64imm4h_lsl0:
1197 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
1198         %tmp1 = or <1 x i64> %a, < i64 71777214294589695>
1199         ret <1 x i64> %tmp1
1200 }
1201
1202 define <1 x i64> @orr64imm4h_lsl8(<1 x i64> %a) {
1203 ; CHECK-LABEL: orr64imm4h_lsl8:
1204 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
1205         %tmp1 = or <1 x i64> %a, < i64 -71777214294589696>
1206         ret <1 x i64> %tmp1
1207 }
1208
1209 define <16 x i8> @orr8imm8h_lsl0(<16 x i8> %a) {
1210 ; CHECK-LABEL: orr8imm8h_lsl0:
1211 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
1212         %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>
1213         ret <16 x i8> %tmp1
1214 }
1215
1216 define <16 x i8> @orr8imm8h_lsl8(<16 x i8> %a) {
1217 ; CHECK-LABEL: orr8imm8h_lsl8:
1218 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1219         %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>
1220         ret <16 x i8> %tmp1
1221 }
1222
1223 define <4 x i32> @orr16imm8h_lsl0(<4 x i32> %a) {
1224 ; CHECK-LABEL: orr16imm8h_lsl0:
1225 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
1226         %tmp1 = or <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
1227         ret <4 x i32> %tmp1
1228 }
1229
1230 define <4 x i32> @orr16imm8h_lsl8(<4 x i32> %a) {
1231 ; CHECK-LABEL: orr16imm8h_lsl8:
1232 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1233         %tmp1 = or <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
1234         ret <4 x i32> %tmp1
1235 }
1236
1237 define <2 x i64> @orr64imm8h_lsl0(<2 x i64> %a) {
1238 ; CHECK-LABEL: orr64imm8h_lsl0:
1239 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
1240         %tmp1 = or <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
1241         ret <2 x i64> %tmp1
1242 }
1243
1244 define <2 x i64> @orr64imm8h_lsl8(<2 x i64> %a) {
1245 ; CHECK-LABEL: orr64imm8h_lsl8:
1246 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
1247         %tmp1 = or <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
1248         ret <2 x i64> %tmp1
1249 }
1250