[flang] [unittests] Link to libMLIR in optimizer tests (#123476)
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-vmovimm.ll
blob1970ff35f183fa0e8cfc51d1b90901e95b98448d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKLE
3 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKLE
4 ; RUN: llc -mtriple=thumbebv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKBE
6 define arm_aapcs_vfpcc <16 x i8> @mov_int8_1() {
7 ; CHECK-LABEL: mov_int8_1:
8 ; CHECK:       @ %bb.0: @ %entry
9 ; CHECK-NEXT:    vmov.i8 q0, #0x1
10 ; CHECK-NEXT:    bx lr
11 entry:
12   ret <16 x i8> <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>
15 define arm_aapcs_vfpcc <16 x i8> @xor_int8_1(<16 x i8> %a) {
16 ; CHECKLE-LABEL: xor_int8_1:
17 ; CHECKLE:       @ %bb.0: @ %entry
18 ; CHECKLE-NEXT:    vmov.i8 q1, #0x1
19 ; CHECKLE-NEXT:    veor q0, q0, q1
20 ; CHECKLE-NEXT:    bx lr
22 ; CHECKBE-LABEL: xor_int8_1:
23 ; CHECKBE:       @ %bb.0: @ %entry
24 ; CHECKBE-NEXT:    vmov.i8 q1, #0x1
25 ; CHECKBE-NEXT:    vrev64.8 q2, q0
26 ; CHECKBE-NEXT:    veor q1, q2, q1
27 ; CHECKBE-NEXT:    vrev64.8 q0, q1
28 ; CHECKBE-NEXT:    bx lr
29 entry:
30   %b = xor <16 x i8> %a, <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>
31   ret <16 x i8> %b
34 define arm_aapcs_vfpcc <16 x i8> @mov_int8_m1() {
35 ; CHECK-LABEL: mov_int8_m1:
36 ; CHECK:       @ %bb.0: @ %entry
37 ; CHECK-NEXT:    vmov.i8 q0, #0xff
38 ; CHECK-NEXT:    bx lr
39 entry:
40   ret <16 x i8> <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>
43 define arm_aapcs_vfpcc <16 x i8> @xor_int8_m1(<16 x i8> %a) {
44 ; CHECKLE-LABEL: xor_int8_m1:
45 ; CHECKLE:       @ %bb.0: @ %entry
46 ; CHECKLE-NEXT:    vmvn q0, q0
47 ; CHECKLE-NEXT:    bx lr
49 ; CHECKBE-LABEL: xor_int8_m1:
50 ; CHECKBE:       @ %bb.0: @ %entry
51 ; CHECKBE-NEXT:    vrev64.8 q1, q0
52 ; CHECKBE-NEXT:    vmvn q1, q1
53 ; CHECKBE-NEXT:    vrev64.8 q0, q1
54 ; CHECKBE-NEXT:    bx lr
55 entry:
56   %b = xor <16 x i8> %a, <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>
57   ret <16 x i8> %b
60 ; This has 0x01020304 or 0x04030201 vdup.32'd to q reg depending on endianness.
61 ; The big endian is different as there is an implicit vrev64.8 out of the
62 ; function, which gets constant folded away.
63 define arm_aapcs_vfpcc <16 x i8> @mov_int8_1234() {
64 ; CHECKLE-LABEL: mov_int8_1234:
65 ; CHECKLE:       @ %bb.0: @ %entry
66 ; CHECKLE-NEXT:    movw r0, #513
67 ; CHECKLE-NEXT:    movt r0, #1027
68 ; CHECKLE-NEXT:    vdup.32 q0, r0
69 ; CHECKLE-NEXT:    bx lr
71 ; CHECKBE-LABEL: mov_int8_1234:
72 ; CHECKBE:       @ %bb.0: @ %entry
73 ; CHECKBE-NEXT:    movw r0, #772
74 ; CHECKBE-NEXT:    movt r0, #258
75 ; CHECKBE-NEXT:    vdup.32 q0, r0
76 ; CHECKBE-NEXT:    bx lr
77 entry:
78   ret <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4>
81 define arm_aapcs_vfpcc <16 x i8> @xor_int8_1234(<16 x i8> %a) {
82 ; CHECKLE-LABEL: xor_int8_1234:
83 ; CHECKLE:       @ %bb.0: @ %entry
84 ; CHECKLE-NEXT:    movw r0, #513
85 ; CHECKLE-NEXT:    movt r0, #1027
86 ; CHECKLE-NEXT:    vdup.32 q1, r0
87 ; CHECKLE-NEXT:    veor q0, q0, q1
88 ; CHECKLE-NEXT:    bx lr
90 ; CHECKBE-LABEL: xor_int8_1234:
91 ; CHECKBE:       @ %bb.0: @ %entry
92 ; CHECKBE-NEXT:    movw r0, #513
93 ; CHECKBE-NEXT:    vrev64.8 q1, q0
94 ; CHECKBE-NEXT:    movt r0, #1027
95 ; CHECKBE-NEXT:    vdup.32 q0, r0
96 ; CHECKBE-NEXT:    veor q1, q1, q0
97 ; CHECKBE-NEXT:    vrev64.8 q0, q1
98 ; CHECKBE-NEXT:    bx lr
99 entry:
100   %b = xor <16 x i8> %a, <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4>
101   ret <16 x i8> %b
104 define arm_aapcs_vfpcc <16 x i8> @mov_int8_32() {
105 ; CHECKLE-LABEL: mov_int8_32:
106 ; CHECKLE:       @ %bb.0: @ %entry
107 ; CHECKLE-NEXT:    vmov.i32 q0, #0x1
108 ; CHECKLE-NEXT:    bx lr
110 ; CHECKBE-LABEL: mov_int8_32:
111 ; CHECKBE:       @ %bb.0: @ %entry
112 ; CHECKBE-NEXT:    vmov.i32 q0, #0x1000000
113 ; CHECKBE-NEXT:    bx lr
114 entry:
115   ret <16 x i8> <i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0>
118 define arm_aapcs_vfpcc <16 x i8> @xor_int8_32(<16 x i8> %a) {
119 ; CHECKLE-LABEL: xor_int8_32:
120 ; CHECKLE:       @ %bb.0: @ %entry
121 ; CHECKLE-NEXT:    vmov.i32 q1, #0x1
122 ; CHECKLE-NEXT:    veor q0, q0, q1
123 ; CHECKLE-NEXT:    bx lr
125 ; CHECKBE-LABEL: xor_int8_32:
126 ; CHECKBE:       @ %bb.0: @ %entry
127 ; CHECKBE-NEXT:    vmov.i32 q1, #0x1
128 ; CHECKBE-NEXT:    vrev64.8 q2, q0
129 ; CHECKBE-NEXT:    veor q1, q2, q1
130 ; CHECKBE-NEXT:    vrev64.8 q0, q1
131 ; CHECKBE-NEXT:    bx lr
132 entry:
133   %b = xor <16 x i8> %a, <i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0>
134   ret <16 x i8> %b
137 define arm_aapcs_vfpcc <16 x i8> @mov_int8_64() {
138 ; CHECKLE-LABEL: mov_int8_64:
139 ; CHECKLE:       @ %bb.0: @ %entry
140 ; CHECKLE-NEXT:    vmov.i64 q0, #0xffff00ffff0000ff
141 ; CHECKLE-NEXT:    bx lr
143 ; CHECKBE-LABEL: mov_int8_64:
144 ; CHECKBE:       @ %bb.0: @ %entry
145 ; CHECKBE-NEXT:    vmov.i64 q0, #0xff0000ffff00ffff
146 ; CHECKBE-NEXT:    bx lr
147 entry:
148   ret <16 x i8> <i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255>
151 define arm_aapcs_vfpcc <16 x i8> @xor_int8_64(<16 x i8> %a) {
152 ; CHECKLE-LABEL: xor_int8_64:
153 ; CHECKLE:       @ %bb.0: @ %entry
154 ; CHECKLE-NEXT:    vmov.i64 q1, #0xffff00ffff0000ff
155 ; CHECKLE-NEXT:    veor q0, q0, q1
156 ; CHECKLE-NEXT:    bx lr
158 ; CHECKBE-LABEL: xor_int8_64:
159 ; CHECKBE:       @ %bb.0: @ %entry
160 ; CHECKBE-NEXT:    vmov.i64 q1, #0xffff00ffff0000ff
161 ; CHECKBE-NEXT:    vrev64.8 q2, q0
162 ; CHECKBE-NEXT:    veor q1, q2, q1
163 ; CHECKBE-NEXT:    vrev64.8 q0, q1
164 ; CHECKBE-NEXT:    bx lr
165 entry:
166   %b = xor <16 x i8> %a, <i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255>
167   ret <16 x i8> %b
170 define arm_aapcs_vfpcc <8 x i16> @mov_int16_1() {
171 ; CHECK-LABEL: mov_int16_1:
172 ; CHECK:       @ %bb.0: @ %entry
173 ; CHECK-NEXT:    vmov.i16 q0, #0x1
174 ; CHECK-NEXT:    bx lr
175 entry:
176   ret <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
179 define arm_aapcs_vfpcc <8 x i16> @xor_int16_1(<8 x i16> %a) {
180 ; CHECKLE-LABEL: xor_int16_1:
181 ; CHECKLE:       @ %bb.0: @ %entry
182 ; CHECKLE-NEXT:    vmov.i16 q1, #0x1
183 ; CHECKLE-NEXT:    veor q0, q0, q1
184 ; CHECKLE-NEXT:    bx lr
186 ; CHECKBE-LABEL: xor_int16_1:
187 ; CHECKBE:       @ %bb.0: @ %entry
188 ; CHECKBE-NEXT:    vmov.i16 q1, #0x1
189 ; CHECKBE-NEXT:    vrev64.16 q2, q0
190 ; CHECKBE-NEXT:    veor q1, q2, q1
191 ; CHECKBE-NEXT:    vrev64.16 q0, q1
192 ; CHECKBE-NEXT:    bx lr
193 entry:
194   %b = xor <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
195   ret <8 x i16> %b
198 define arm_aapcs_vfpcc <8 x i16> @mov_int16_m1() {
199 ; CHECK-LABEL: mov_int16_m1:
200 ; CHECK:       @ %bb.0: @ %entry
201 ; CHECK-NEXT:    vmov.i8 q0, #0xff
202 ; CHECK-NEXT:    bx lr
203 entry:
204   ret <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
207 define arm_aapcs_vfpcc <8 x i16> @xor_int16_m1(<8 x i16> %a) {
208 ; CHECKLE-LABEL: xor_int16_m1:
209 ; CHECKLE:       @ %bb.0: @ %entry
210 ; CHECKLE-NEXT:    vmvn q0, q0
211 ; CHECKLE-NEXT:    bx lr
213 ; CHECKBE-LABEL: xor_int16_m1:
214 ; CHECKBE:       @ %bb.0: @ %entry
215 ; CHECKBE-NEXT:    vmov.i8 q1, #0xff
216 ; CHECKBE-NEXT:    vrev64.16 q2, q0
217 ; CHECKBE-NEXT:    veor q1, q2, q1
218 ; CHECKBE-NEXT:    vrev64.16 q0, q1
219 ; CHECKBE-NEXT:    bx lr
220 entry:
221   %b = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
222   ret <8 x i16> %b
225 define arm_aapcs_vfpcc <8 x i16> @mov_int16_256() {
226 ; CHECK-LABEL: mov_int16_256:
227 ; CHECK:       @ %bb.0: @ %entry
228 ; CHECK-NEXT:    vmov.i16 q0, #0x100
229 ; CHECK-NEXT:    bx lr
230 entry:
231   ret <8 x i16> <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
234 define arm_aapcs_vfpcc <8 x i16> @xor_int16_256(<8 x i16> %a) {
235 ; CHECKLE-LABEL: xor_int16_256:
236 ; CHECKLE:       @ %bb.0: @ %entry
237 ; CHECKLE-NEXT:    vmov.i16 q1, #0x100
238 ; CHECKLE-NEXT:    veor q0, q0, q1
239 ; CHECKLE-NEXT:    bx lr
241 ; CHECKBE-LABEL: xor_int16_256:
242 ; CHECKBE:       @ %bb.0: @ %entry
243 ; CHECKBE-NEXT:    vmov.i16 q1, #0x100
244 ; CHECKBE-NEXT:    vrev64.16 q2, q0
245 ; CHECKBE-NEXT:    veor q1, q2, q1
246 ; CHECKBE-NEXT:    vrev64.16 q0, q1
247 ; CHECKBE-NEXT:    bx lr
248 entry:
249   %b = xor <8 x i16> %a, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
250   ret <8 x i16> %b
253 define arm_aapcs_vfpcc <8 x i16> @mov_int16_257() {
254 ; CHECK-LABEL: mov_int16_257:
255 ; CHECK:       @ %bb.0: @ %entry
256 ; CHECK-NEXT:    vmov.i8 q0, #0x1
257 ; CHECK-NEXT:    bx lr
258 entry:
259   ret <8 x i16> <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257>
262 define arm_aapcs_vfpcc <8 x i16> @xor_int16_257(<8 x i16> %a) {
263 ; CHECKLE-LABEL: xor_int16_257:
264 ; CHECKLE:       @ %bb.0: @ %entry
265 ; CHECKLE-NEXT:    vmov.i8 q1, #0x1
266 ; CHECKLE-NEXT:    veor q0, q0, q1
267 ; CHECKLE-NEXT:    bx lr
269 ; CHECKBE-LABEL: xor_int16_257:
270 ; CHECKBE:       @ %bb.0: @ %entry
271 ; CHECKBE-NEXT:    vmov.i8 q1, #0x1
272 ; CHECKBE-NEXT:    vrev64.16 q2, q0
273 ; CHECKBE-NEXT:    veor q1, q2, q1
274 ; CHECKBE-NEXT:    vrev64.16 q0, q1
275 ; CHECKBE-NEXT:    bx lr
276 entry:
277   %b = xor <8 x i16> %a, <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257>
278   ret <8 x i16> %b
281 define arm_aapcs_vfpcc <8 x i16> @mov_int16_258() {
282 ; CHECK-LABEL: mov_int16_258:
283 ; CHECK:       @ %bb.0: @ %entry
284 ; CHECK-NEXT:    mov.w r0, #258
285 ; CHECK-NEXT:    vdup.16 q0, r0
286 ; CHECK-NEXT:    bx lr
287 entry:
288   ret <8 x i16> <i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258>
291 define arm_aapcs_vfpcc <8 x i16> @xor_int16_258(<8 x i16> %a) {
292 ; CHECKLE-LABEL: xor_int16_258:
293 ; CHECKLE:       @ %bb.0: @ %entry
294 ; CHECKLE-NEXT:    mov.w r0, #258
295 ; CHECKLE-NEXT:    vdup.16 q1, r0
296 ; CHECKLE-NEXT:    veor q0, q0, q1
297 ; CHECKLE-NEXT:    bx lr
299 ; CHECKBE-LABEL: xor_int16_258:
300 ; CHECKBE:       @ %bb.0: @ %entry
301 ; CHECKBE-NEXT:    mov.w r0, #258
302 ; CHECKBE-NEXT:    vrev64.16 q2, q0
303 ; CHECKBE-NEXT:    vdup.16 q1, r0
304 ; CHECKBE-NEXT:    veor q1, q2, q1
305 ; CHECKBE-NEXT:    vrev64.16 q0, q1
306 ; CHECKBE-NEXT:    bx lr
307 entry:
308   %b = xor <8 x i16> %a, <i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258>
309   ret <8 x i16> %b
312 define arm_aapcs_vfpcc <8 x i16> @mov_int16_32() {
313 ; CHECKLE-LABEL: mov_int16_32:
314 ; CHECKLE:       @ %bb.0: @ %entry
315 ; CHECKLE-NEXT:    movw r0, #257
316 ; CHECKLE-NEXT:    movt r0, #256
317 ; CHECKLE-NEXT:    vdup.32 q0, r0
318 ; CHECKLE-NEXT:    bx lr
320 ; CHECKBE-LABEL: mov_int16_32:
321 ; CHECKBE:       @ %bb.0: @ %entry
322 ; CHECKBE-NEXT:    movw r0, #256
323 ; CHECKBE-NEXT:    movt r0, #257
324 ; CHECKBE-NEXT:    vdup.32 q0, r0
325 ; CHECKBE-NEXT:    bx lr
326 entry:
327   ret <8 x i16> <i16 257, i16 256, i16 257, i16 256, i16 257, i16 256, i16 257, i16 256>
330 define arm_aapcs_vfpcc <8 x i16> @xor_int16_32(<8 x i16> %a) {
331 ; CHECKLE-LABEL: xor_int16_32:
332 ; CHECKLE:       @ %bb.0: @ %entry
333 ; CHECKLE-NEXT:    movw r0, #257
334 ; CHECKLE-NEXT:    movt r0, #256
335 ; CHECKLE-NEXT:    vdup.32 q1, r0
336 ; CHECKLE-NEXT:    veor q0, q0, q1
337 ; CHECKLE-NEXT:    bx lr
339 ; CHECKBE-LABEL: xor_int16_32:
340 ; CHECKBE:       @ %bb.0: @ %entry
341 ; CHECKBE-NEXT:    movw r0, #257
342 ; CHECKBE-NEXT:    vrev64.16 q1, q0
343 ; CHECKBE-NEXT:    movt r0, #256
344 ; CHECKBE-NEXT:    vdup.32 q0, r0
345 ; CHECKBE-NEXT:    veor q1, q1, q0
346 ; CHECKBE-NEXT:    vrev64.16 q0, q1
347 ; CHECKBE-NEXT:    bx lr
348 entry:
349   %b = xor <8 x i16> %a, <i16 257, i16 256, i16 257, i16 256, i16 257, i16 256, i16 257, i16 256>
350   ret <8 x i16> %b
353 define arm_aapcs_vfpcc <8 x i16> @mov_int16_64() {
354 ; CHECK-LABEL: mov_int16_64:
355 ; CHECK:       @ %bb.0: @ %entry
356 ; CHECK-NEXT:    vmov.i64 q0, #0xff0000000000ff
357 ; CHECK-NEXT:    bx lr
358 entry:
359   ret <8 x i16> <i16 255, i16 0, i16 0, i16 255, i16 255, i16 0, i16 0, i16 255>
362 define arm_aapcs_vfpcc <8 x i16> @xor_int16_64(<8 x i16> %a) {
363 ; CHECKLE-LABEL: xor_int16_64:
364 ; CHECKLE:       @ %bb.0: @ %entry
365 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff0000000000ff
366 ; CHECKLE-NEXT:    veor q0, q0, q1
367 ; CHECKLE-NEXT:    bx lr
369 ; CHECKBE-LABEL: xor_int16_64:
370 ; CHECKBE:       @ %bb.0: @ %entry
371 ; CHECKBE-NEXT:    vmov.i64 q1, #0xff0000000000ff
372 ; CHECKBE-NEXT:    vrev64.16 q2, q0
373 ; CHECKBE-NEXT:    veor q1, q2, q1
374 ; CHECKBE-NEXT:    vrev64.16 q0, q1
375 ; CHECKBE-NEXT:    bx lr
376 entry:
377   %b = xor <8 x i16> %a, <i16 255, i16 0, i16 0, i16 255, i16 255, i16 0, i16 0, i16 255>
378   ret <8 x i16> %b
381 define arm_aapcs_vfpcc <4 x i32> @mov_int32_1() {
382 ; CHECK-LABEL: mov_int32_1:
383 ; CHECK:       @ %bb.0: @ %entry
384 ; CHECK-NEXT:    vmov.i32 q0, #0x1
385 ; CHECK-NEXT:    bx lr
386 entry:
387   ret <4 x i32> <i32 1, i32 1, i32 1, i32 1>
390 define arm_aapcs_vfpcc <4 x i32> @xor_int32_1(<4 x i32> %a) {
391 ; CHECKLE-LABEL: xor_int32_1:
392 ; CHECKLE:       @ %bb.0: @ %entry
393 ; CHECKLE-NEXT:    vmov.i32 q1, #0x1
394 ; CHECKLE-NEXT:    veor q0, q0, q1
395 ; CHECKLE-NEXT:    bx lr
397 ; CHECKBE-LABEL: xor_int32_1:
398 ; CHECKBE:       @ %bb.0: @ %entry
399 ; CHECKBE-NEXT:    vmov.i32 q1, #0x1
400 ; CHECKBE-NEXT:    vrev64.32 q2, q0
401 ; CHECKBE-NEXT:    veor q1, q2, q1
402 ; CHECKBE-NEXT:    vrev64.32 q0, q1
403 ; CHECKBE-NEXT:    bx lr
404 entry:
405   %b = xor <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1>
406   ret <4 x i32> %b
409 define arm_aapcs_vfpcc <4 x i32> @mov_int32_256() {
410 ; CHECK-LABEL: mov_int32_256:
411 ; CHECK:       @ %bb.0: @ %entry
412 ; CHECK-NEXT:    vmov.i32 q0, #0x100
413 ; CHECK-NEXT:    bx lr
414 entry:
415   ret <4 x i32> <i32 256, i32 256, i32 256, i32 256>
418 define arm_aapcs_vfpcc <4 x i32> @xor_int32_256(<4 x i32> %a) {
419 ; CHECKLE-LABEL: xor_int32_256:
420 ; CHECKLE:       @ %bb.0: @ %entry
421 ; CHECKLE-NEXT:    vmov.i32 q1, #0x100
422 ; CHECKLE-NEXT:    veor q0, q0, q1
423 ; CHECKLE-NEXT:    bx lr
425 ; CHECKBE-LABEL: xor_int32_256:
426 ; CHECKBE:       @ %bb.0: @ %entry
427 ; CHECKBE-NEXT:    vmov.i32 q1, #0x100
428 ; CHECKBE-NEXT:    vrev64.32 q2, q0
429 ; CHECKBE-NEXT:    veor q1, q2, q1
430 ; CHECKBE-NEXT:    vrev64.32 q0, q1
431 ; CHECKBE-NEXT:    bx lr
432 entry:
433   %b = xor <4 x i32> %a, <i32 256, i32 256, i32 256, i32 256>
434   ret <4 x i32> %b
437 define arm_aapcs_vfpcc <4 x i32> @mov_int32_65536() {
438 ; CHECK-LABEL: mov_int32_65536:
439 ; CHECK:       @ %bb.0: @ %entry
440 ; CHECK-NEXT:    vmov.i32 q0, #0x10000
441 ; CHECK-NEXT:    bx lr
442 entry:
443   ret <4 x i32> <i32 65536, i32 65536, i32 65536, i32 65536>
446 define arm_aapcs_vfpcc <4 x i32> @xor_int32_65536(<4 x i32> %a) {
447 ; CHECKLE-LABEL: xor_int32_65536:
448 ; CHECKLE:       @ %bb.0: @ %entry
449 ; CHECKLE-NEXT:    vmov.i32 q1, #0x10000
450 ; CHECKLE-NEXT:    veor q0, q0, q1
451 ; CHECKLE-NEXT:    bx lr
453 ; CHECKBE-LABEL: xor_int32_65536:
454 ; CHECKBE:       @ %bb.0: @ %entry
455 ; CHECKBE-NEXT:    vmov.i32 q1, #0x10000
456 ; CHECKBE-NEXT:    vrev64.32 q2, q0
457 ; CHECKBE-NEXT:    veor q1, q2, q1
458 ; CHECKBE-NEXT:    vrev64.32 q0, q1
459 ; CHECKBE-NEXT:    bx lr
460 entry:
461   %b = xor <4 x i32> %a, <i32 65536, i32 65536, i32 65536, i32 65536>
462   ret <4 x i32> %b
465 define arm_aapcs_vfpcc <4 x i32> @mov_int32_16777216() {
466 ; CHECK-LABEL: mov_int32_16777216:
467 ; CHECK:       @ %bb.0: @ %entry
468 ; CHECK-NEXT:    vmov.i32 q0, #0x1000000
469 ; CHECK-NEXT:    bx lr
470 entry:
471   ret <4 x i32> <i32 16777216, i32 16777216, i32 16777216, i32 16777216>
474 define arm_aapcs_vfpcc <4 x i32> @xor_int32_16777216(<4 x i32> %a) {
475 ; CHECKLE-LABEL: xor_int32_16777216:
476 ; CHECKLE:       @ %bb.0: @ %entry
477 ; CHECKLE-NEXT:    vmov.i32 q1, #0x1000000
478 ; CHECKLE-NEXT:    veor q0, q0, q1
479 ; CHECKLE-NEXT:    bx lr
481 ; CHECKBE-LABEL: xor_int32_16777216:
482 ; CHECKBE:       @ %bb.0: @ %entry
483 ; CHECKBE-NEXT:    vmov.i32 q1, #0x1000000
484 ; CHECKBE-NEXT:    vrev64.32 q2, q0
485 ; CHECKBE-NEXT:    veor q1, q2, q1
486 ; CHECKBE-NEXT:    vrev64.32 q0, q1
487 ; CHECKBE-NEXT:    bx lr
488 entry:
489   %b = xor <4 x i32> %a, <i32 16777216, i32 16777216, i32 16777216, i32 16777216>
490   ret <4 x i32> %b
493 define arm_aapcs_vfpcc <4 x i32> @mov_int32_16777217() {
494 ; CHECK-LABEL: mov_int32_16777217:
495 ; CHECK:       @ %bb.0: @ %entry
496 ; CHECK-NEXT:    movs r0, #1
497 ; CHECK-NEXT:    movt r0, #256
498 ; CHECK-NEXT:    vdup.32 q0, r0
499 ; CHECK-NEXT:    bx lr
500 entry:
501   ret <4 x i32> <i32 16777217, i32 16777217, i32 16777217, i32 16777217>
504 define arm_aapcs_vfpcc <4 x i32> @xor_int32_16777217(<4 x i32> %a) {
505 ; CHECKLE-LABEL: xor_int32_16777217:
506 ; CHECKLE:       @ %bb.0: @ %entry
507 ; CHECKLE-NEXT:    movs r0, #1
508 ; CHECKLE-NEXT:    movt r0, #256
509 ; CHECKLE-NEXT:    vdup.32 q1, r0
510 ; CHECKLE-NEXT:    veor q0, q0, q1
511 ; CHECKLE-NEXT:    bx lr
513 ; CHECKBE-LABEL: xor_int32_16777217:
514 ; CHECKBE:       @ %bb.0: @ %entry
515 ; CHECKBE-NEXT:    movs r0, #1
516 ; CHECKBE-NEXT:    vrev64.32 q1, q0
517 ; CHECKBE-NEXT:    movt r0, #256
518 ; CHECKBE-NEXT:    vdup.32 q0, r0
519 ; CHECKBE-NEXT:    veor q1, q1, q0
520 ; CHECKBE-NEXT:    vrev64.32 q0, q1
521 ; CHECKBE-NEXT:    bx lr
522 entry:
523   %b = xor <4 x i32> %a, <i32 16777217, i32 16777217, i32 16777217, i32 16777217>
524   ret <4 x i32> %b
527 define arm_aapcs_vfpcc <4 x i32> @mov_int32_17919() {
528 ; CHECK-LABEL: mov_int32_17919:
529 ; CHECK:       @ %bb.0: @ %entry
530 ; CHECK-NEXT:    vmov.i32 q0, #0x45ff
531 ; CHECK-NEXT:    bx lr
532 entry:
533   ret <4 x i32> <i32 17919, i32 17919, i32 17919, i32 17919>
536 define arm_aapcs_vfpcc <4 x i32> @xor_int32_17919(<4 x i32> %a) {
537 ; CHECKLE-LABEL: xor_int32_17919:
538 ; CHECKLE:       @ %bb.0: @ %entry
539 ; CHECKLE-NEXT:    vmov.i32 q1, #0x45ff
540 ; CHECKLE-NEXT:    veor q0, q0, q1
541 ; CHECKLE-NEXT:    bx lr
543 ; CHECKBE-LABEL: xor_int32_17919:
544 ; CHECKBE:       @ %bb.0: @ %entry
545 ; CHECKBE-NEXT:    vmov.i32 q1, #0x45ff
546 ; CHECKBE-NEXT:    vrev64.32 q2, q0
547 ; CHECKBE-NEXT:    veor q1, q2, q1
548 ; CHECKBE-NEXT:    vrev64.32 q0, q1
549 ; CHECKBE-NEXT:    bx lr
550 entry:
551   %b = xor <4 x i32> %a, <i32 17919, i32 17919, i32 17919, i32 17919>
552   ret <4 x i32> %b
555 define arm_aapcs_vfpcc <4 x i32> @mov_int32_4587519() {
556 ; CHECK-LABEL: mov_int32_4587519:
557 ; CHECK:       @ %bb.0: @ %entry
558 ; CHECK-NEXT:    vmov.i32 q0, #0x45ffff
559 ; CHECK-NEXT:    bx lr
560 entry:
561   ret <4 x i32> <i32 4587519, i32 4587519, i32 4587519, i32 4587519>
564 define arm_aapcs_vfpcc <4 x i32> @xor_int32_4587519(<4 x i32> %a) {
565 ; CHECKLE-LABEL: xor_int32_4587519:
566 ; CHECKLE:       @ %bb.0: @ %entry
567 ; CHECKLE-NEXT:    vmov.i32 q1, #0x45ffff
568 ; CHECKLE-NEXT:    veor q0, q0, q1
569 ; CHECKLE-NEXT:    bx lr
571 ; CHECKBE-LABEL: xor_int32_4587519:
572 ; CHECKBE:       @ %bb.0: @ %entry
573 ; CHECKBE-NEXT:    vmov.i32 q1, #0x45ffff
574 ; CHECKBE-NEXT:    vrev64.32 q2, q0
575 ; CHECKBE-NEXT:    veor q1, q2, q1
576 ; CHECKBE-NEXT:    vrev64.32 q0, q1
577 ; CHECKBE-NEXT:    bx lr
578 entry:
579   %b = xor <4 x i32> %a, <i32 4587519, i32 4587519, i32 4587519, i32 4587519>
580   ret <4 x i32> %b
583 define arm_aapcs_vfpcc <4 x i32> @mov_int32_m1() {
584 ; CHECK-LABEL: mov_int32_m1:
585 ; CHECK:       @ %bb.0: @ %entry
586 ; CHECK-NEXT:    vmov.i8 q0, #0xff
587 ; CHECK-NEXT:    bx lr
588 entry:
589   ret <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
592 define arm_aapcs_vfpcc <4 x i32> @xor_int32_m1(<4 x i32> %a) {
593 ; CHECKLE-LABEL: xor_int32_m1:
594 ; CHECKLE:       @ %bb.0: @ %entry
595 ; CHECKLE-NEXT:    vmvn q0, q0
596 ; CHECKLE-NEXT:    bx lr
598 ; CHECKBE-LABEL: xor_int32_m1:
599 ; CHECKBE:       @ %bb.0: @ %entry
600 ; CHECKBE-NEXT:    vmov.i8 q1, #0xff
601 ; CHECKBE-NEXT:    vrev64.32 q2, q0
602 ; CHECKBE-NEXT:    veor q1, q2, q1
603 ; CHECKBE-NEXT:    vrev64.32 q0, q1
604 ; CHECKBE-NEXT:    bx lr
605 entry:
606   %b = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
607   ret <4 x i32> %b
610 define arm_aapcs_vfpcc <4 x i32> @mov_int32_4294901760() {
611 ; CHECK-LABEL: mov_int32_4294901760:
612 ; CHECK:       @ %bb.0: @ %entry
613 ; CHECK-NEXT:    vmvn.i32 q0, #0xffff
614 ; CHECK-NEXT:    bx lr
615 entry:
616   ret <4 x i32> <i32 4294901760, i32 4294901760, i32 4294901760, i32 4294901760>
619 define arm_aapcs_vfpcc <4 x i32> @xor_int32_4294901760(<4 x i32> %a) {
620 ; CHECKLE-LABEL: xor_int32_4294901760:
621 ; CHECKLE:       @ %bb.0: @ %entry
622 ; CHECKLE-NEXT:    vmvn.i32 q1, #0xffff
623 ; CHECKLE-NEXT:    veor q0, q0, q1
624 ; CHECKLE-NEXT:    bx lr
626 ; CHECKBE-LABEL: xor_int32_4294901760:
627 ; CHECKBE:       @ %bb.0: @ %entry
628 ; CHECKBE-NEXT:    vmvn.i32 q1, #0xffff
629 ; CHECKBE-NEXT:    vrev64.32 q2, q0
630 ; CHECKBE-NEXT:    veor q1, q2, q1
631 ; CHECKBE-NEXT:    vrev64.32 q0, q1
632 ; CHECKBE-NEXT:    bx lr
633 entry:
634   %b = xor <4 x i32> %a, <i32 4294901760, i32 4294901760, i32 4294901760, i32 4294901760>
635   ret <4 x i32> %b
638 define arm_aapcs_vfpcc <4 x i32> @mov_int32_4278190335() {
639 ; CHECK-LABEL: mov_int32_4278190335:
640 ; CHECK:       @ %bb.0: @ %entry
641 ; CHECK-NEXT:    movs r0, #255
642 ; CHECK-NEXT:    movt r0, #65280
643 ; CHECK-NEXT:    vdup.32 q0, r0
644 ; CHECK-NEXT:    bx lr
645 entry:
646   ret <4 x i32> <i32 4278190335, i32 4278190335, i32 4278190335, i32 4278190335>
649 define arm_aapcs_vfpcc <4 x i32> @xor_int32_4278190335(<4 x i32> %a) {
650 ; CHECKLE-LABEL: xor_int32_4278190335:
651 ; CHECKLE:       @ %bb.0: @ %entry
652 ; CHECKLE-NEXT:    movs r0, #255
653 ; CHECKLE-NEXT:    movt r0, #65280
654 ; CHECKLE-NEXT:    vdup.32 q1, r0
655 ; CHECKLE-NEXT:    veor q0, q0, q1
656 ; CHECKLE-NEXT:    bx lr
658 ; CHECKBE-LABEL: xor_int32_4278190335:
659 ; CHECKBE:       @ %bb.0: @ %entry
660 ; CHECKBE-NEXT:    movs r0, #255
661 ; CHECKBE-NEXT:    vrev64.32 q1, q0
662 ; CHECKBE-NEXT:    movt r0, #65280
663 ; CHECKBE-NEXT:    vdup.32 q0, r0
664 ; CHECKBE-NEXT:    veor q1, q1, q0
665 ; CHECKBE-NEXT:    vrev64.32 q0, q1
666 ; CHECKBE-NEXT:    bx lr
667 entry:
668   %b = xor <4 x i32> %a, <i32 4278190335, i32 4278190335, i32 4278190335, i32 4278190335>
669   ret <4 x i32> %b
672 define arm_aapcs_vfpcc <4 x i32> @mov_int32_4278255615() {
673 ; CHECK-LABEL: mov_int32_4278255615:
674 ; CHECK:       @ %bb.0: @ %entry
675 ; CHECK-NEXT:    vmvn.i32 q0, #0xff0000
676 ; CHECK-NEXT:    bx lr
677 entry:
678   ret <4 x i32> <i32 4278255615, i32 4278255615, i32 4278255615, i32 4278255615>
681 define arm_aapcs_vfpcc <4 x i32> @xor_int32_4278255615(<4 x i32> %a) {
682 ; CHECKLE-LABEL: xor_int32_4278255615:
683 ; CHECKLE:       @ %bb.0: @ %entry
684 ; CHECKLE-NEXT:    vmvn.i32 q1, #0xff0000
685 ; CHECKLE-NEXT:    veor q0, q0, q1
686 ; CHECKLE-NEXT:    bx lr
688 ; CHECKBE-LABEL: xor_int32_4278255615:
689 ; CHECKBE:       @ %bb.0: @ %entry
690 ; CHECKBE-NEXT:    vmvn.i32 q1, #0xff0000
691 ; CHECKBE-NEXT:    vrev64.32 q2, q0
692 ; CHECKBE-NEXT:    veor q1, q2, q1
693 ; CHECKBE-NEXT:    vrev64.32 q0, q1
694 ; CHECKBE-NEXT:    bx lr
695 entry:
696   %b = xor <4 x i32> %a, <i32 4278255615, i32 4278255615, i32 4278255615, i32 4278255615>
697   ret <4 x i32> %b
700 define arm_aapcs_vfpcc <4 x i32> @mov_int32_16908546() {
701 ; CHECK-LABEL: mov_int32_16908546:
702 ; CHECK:       @ %bb.0: @ %entry
703 ; CHECK-NEXT:    mov.w r0, #258
704 ; CHECK-NEXT:    vdup.16 q0, r0
705 ; CHECK-NEXT:    bx lr
706 entry:
707   ret <4 x i32> <i32 16908546, i32 16908546, i32 16908546, i32 16908546>
710 define arm_aapcs_vfpcc <4 x i32> @xor_int32_16908546(<4 x i32> %a) {
711 ; CHECKLE-LABEL: xor_int32_16908546:
712 ; CHECKLE:       @ %bb.0: @ %entry
713 ; CHECKLE-NEXT:    mov.w r0, #258
714 ; CHECKLE-NEXT:    vdup.16 q1, r0
715 ; CHECKLE-NEXT:    veor q0, q0, q1
716 ; CHECKLE-NEXT:    bx lr
718 ; CHECKBE-LABEL: xor_int32_16908546:
719 ; CHECKBE:       @ %bb.0: @ %entry
720 ; CHECKBE-NEXT:    mov.w r0, #258
721 ; CHECKBE-NEXT:    vrev64.32 q2, q0
722 ; CHECKBE-NEXT:    vdup.16 q1, r0
723 ; CHECKBE-NEXT:    veor q1, q2, q1
724 ; CHECKBE-NEXT:    vrev64.32 q0, q1
725 ; CHECKBE-NEXT:    bx lr
726 entry:
727   %b = xor <4 x i32> %a, <i32 16908546, i32 16908546, i32 16908546, i32 16908546>
728   ret <4 x i32> %b
731 define arm_aapcs_vfpcc <4 x i32> @mov_int32_64() {
732 ; CHECKLE-LABEL: mov_int32_64:
733 ; CHECKLE:       @ %bb.0: @ %entry
734 ; CHECKLE-NEXT:    vmov.i64 q0, #0xff00ffff00ff00
735 ; CHECKLE-NEXT:    bx lr
737 ; CHECKBE-LABEL: mov_int32_64:
738 ; CHECKBE:       @ %bb.0: @ %entry
739 ; CHECKBE-NEXT:    vmov.i64 q0, #0xff00ff0000ff00ff
740 ; CHECKBE-NEXT:    bx lr
741 entry:
742   ret <4 x i32> <i32 u0xff00ff00, i32 u0x00ff00ff, i32 u0xff00ff00, i32 u0x00ff00ff>
745 define arm_aapcs_vfpcc <4 x i32> @xor_int32_64(<4 x i32> %a) {
746 ; CHECKLE-LABEL: xor_int32_64:
747 ; CHECKLE:       @ %bb.0: @ %entry
748 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff00ffff00ff00
749 ; CHECKLE-NEXT:    veor q0, q0, q1
750 ; CHECKLE-NEXT:    bx lr
752 ; CHECKBE-LABEL: xor_int32_64:
753 ; CHECKBE:       @ %bb.0: @ %entry
754 ; CHECKBE-NEXT:    vmov.i64 q1, #0xff00ffff00ff00
755 ; CHECKBE-NEXT:    vrev64.32 q2, q0
756 ; CHECKBE-NEXT:    veor q1, q2, q1
757 ; CHECKBE-NEXT:    vrev64.32 q0, q1
758 ; CHECKBE-NEXT:    bx lr
759 entry:
760   %b = xor <4 x i32> %a, <i32 u0xff00ff00, i32 u0x00ff00ff, i32 u0xff00ff00, i32 u0x00ff00ff>
761   ret <4 x i32> %b
764 define arm_aapcs_vfpcc <2 x i64> @mov_int64_1() {
765 ; CHECKLE-LABEL: mov_int64_1:
766 ; CHECKLE:       @ %bb.0: @ %entry
767 ; CHECKLE-NEXT:    adr r0, .LCPI50_0
768 ; CHECKLE-NEXT:    vldrw.u32 q0, [r0]
769 ; CHECKLE-NEXT:    bx lr
770 ; CHECKLE-NEXT:    .p2align 4
771 ; CHECKLE-NEXT:  @ %bb.1:
772 ; CHECKLE-NEXT:  .LCPI50_0:
773 ; CHECKLE-NEXT:    .long 1 @ double 4.9406564584124654E-324
774 ; CHECKLE-NEXT:    .long 0
775 ; CHECKLE-NEXT:    .long 1 @ double 4.9406564584124654E-324
776 ; CHECKLE-NEXT:    .long 0
778 ; CHECKBE-LABEL: mov_int64_1:
779 ; CHECKBE:       @ %bb.0: @ %entry
780 ; CHECKBE-NEXT:    adr r0, .LCPI50_0
781 ; CHECKBE-NEXT:    vldrb.u8 q1, [r0]
782 ; CHECKBE-NEXT:    vrev64.8 q0, q1
783 ; CHECKBE-NEXT:    bx lr
784 ; CHECKBE-NEXT:    .p2align 4
785 ; CHECKBE-NEXT:  @ %bb.1:
786 ; CHECKBE-NEXT:  .LCPI50_0:
787 ; CHECKBE-NEXT:    .long 0 @ double 4.9406564584124654E-324
788 ; CHECKBE-NEXT:    .long 1
789 ; CHECKBE-NEXT:    .long 0 @ double 4.9406564584124654E-324
790 ; CHECKBE-NEXT:    .long 1
791 entry:
792   ret <2 x i64> <i64 1, i64 1>
795 define arm_aapcs_vfpcc <2 x i64> @xor_int64_1(<2 x i64> %a) {
796 ; CHECKLE-LABEL: xor_int64_1:
797 ; CHECKLE:       @ %bb.0: @ %entry
798 ; CHECKLE-NEXT:    adr r0, .LCPI51_0
799 ; CHECKLE-NEXT:    vldrw.u32 q1, [r0]
800 ; CHECKLE-NEXT:    veor q0, q0, q1
801 ; CHECKLE-NEXT:    bx lr
802 ; CHECKLE-NEXT:    .p2align 4
803 ; CHECKLE-NEXT:  @ %bb.1:
804 ; CHECKLE-NEXT:  .LCPI51_0:
805 ; CHECKLE-NEXT:    .long 1 @ 0x1
806 ; CHECKLE-NEXT:    .long 0 @ 0x0
807 ; CHECKLE-NEXT:    .long 1 @ 0x1
808 ; CHECKLE-NEXT:    .long 0 @ 0x0
810 ; CHECKBE-LABEL: xor_int64_1:
811 ; CHECKBE:       @ %bb.0: @ %entry
812 ; CHECKBE-NEXT:    adr r0, .LCPI51_0
813 ; CHECKBE-NEXT:    vldrb.u8 q1, [r0]
814 ; CHECKBE-NEXT:    vrev64.8 q2, q1
815 ; CHECKBE-NEXT:    veor q0, q0, q2
816 ; CHECKBE-NEXT:    bx lr
817 ; CHECKBE-NEXT:    .p2align 4
818 ; CHECKBE-NEXT:  @ %bb.1:
819 ; CHECKBE-NEXT:  .LCPI51_0:
820 ; CHECKBE-NEXT:    .long 0 @ 0x0
821 ; CHECKBE-NEXT:    .long 1 @ 0x1
822 ; CHECKBE-NEXT:    .long 0 @ 0x0
823 ; CHECKBE-NEXT:    .long 1 @ 0x1
824 entry:
825   %b = xor <2 x i64> %a, <i64 1, i64 1>
826   ret <2 x i64> %b
829 define arm_aapcs_vfpcc <2 x i64> @mov_int64_ff() {
830 ; CHECK-LABEL: mov_int64_ff:
831 ; CHECK:       @ %bb.0: @ %entry
832 ; CHECK-NEXT:    vmov.i64 q0, #0xff
833 ; CHECK-NEXT:    bx lr
834 entry:
835   ret <2 x i64> <i64 255, i64 255>
838 define arm_aapcs_vfpcc <2 x i64> @xor_int64_ff(<2 x i64> %a) {
839 ; CHECKLE-LABEL: xor_int64_ff:
840 ; CHECKLE:       @ %bb.0: @ %entry
841 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff
842 ; CHECKLE-NEXT:    veor q0, q0, q1
843 ; CHECKLE-NEXT:    bx lr
845 ; CHECKBE-LABEL: xor_int64_ff:
846 ; CHECKBE:       @ %bb.0: @ %entry
847 ; CHECKBE-NEXT:    vmov.i64 q1, #0xff00000000
848 ; CHECKBE-NEXT:    vrev64.32 q2, q1
849 ; CHECKBE-NEXT:    veor q0, q0, q2
850 ; CHECKBE-NEXT:    bx lr
851 entry:
852   %b = xor <2 x i64> %a, <i64 255, i64 255>
853   ret <2 x i64> %b
856 define arm_aapcs_vfpcc <2 x i64> @mov_int64_m1() {
857 ; CHECK-LABEL: mov_int64_m1:
858 ; CHECK:       @ %bb.0: @ %entry
859 ; CHECK-NEXT:    vmov.i8 q0, #0xff
860 ; CHECK-NEXT:    bx lr
861 entry:
862   ret <2 x i64> <i64 -1, i64 -1>
865 define arm_aapcs_vfpcc <2 x i64> @xor_int64_m1(<2 x i64> %a) {
866 ; CHECKLE-LABEL: xor_int64_m1:
867 ; CHECKLE:       @ %bb.0: @ %entry
868 ; CHECKLE-NEXT:    vmvn q0, q0
869 ; CHECKLE-NEXT:    bx lr
871 ; CHECKBE-LABEL: xor_int64_m1:
872 ; CHECKBE:       @ %bb.0: @ %entry
873 ; CHECKBE-NEXT:    vmov.i8 q1, #0xff
874 ; CHECKBE-NEXT:    veor q0, q0, q1
875 ; CHECKBE-NEXT:    bx lr
876 entry:
877   %b = xor <2 x i64> %a, <i64 -1, i64 -1>
878   ret <2 x i64> %b
881 define arm_aapcs_vfpcc <2 x i64> @mov_int64_ff0000ff0000ffff() {
882 ; CHECK-LABEL: mov_int64_ff0000ff0000ffff:
883 ; CHECK:       @ %bb.0: @ %entry
884 ; CHECK-NEXT:    vmov.i64 q0, #0xff0000ff0000ffff
885 ; CHECK-NEXT:    bx lr
886 entry:
887   ret <2 x i64> <i64 18374687574888349695, i64 18374687574888349695>
890 define arm_aapcs_vfpcc <2 x i64> @xor_int64_ff0000ff0000ffff(<2 x i64> %a) {
891 ; CHECKLE-LABEL: xor_int64_ff0000ff0000ffff:
892 ; CHECKLE:       @ %bb.0: @ %entry
893 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff0000ff0000ffff
894 ; CHECKLE-NEXT:    veor q0, q0, q1
895 ; CHECKLE-NEXT:    bx lr
897 ; CHECKBE-LABEL: xor_int64_ff0000ff0000ffff:
898 ; CHECKBE:       @ %bb.0: @ %entry
899 ; CHECKBE-NEXT:    vmov.i64 q1, #0xffffff0000ff
900 ; CHECKBE-NEXT:    vrev64.32 q2, q1
901 ; CHECKBE-NEXT:    veor q0, q0, q2
902 ; CHECKBE-NEXT:    bx lr
903 entry:
904   %b = xor <2 x i64> %a, <i64 18374687574888349695, i64 18374687574888349695>
905   ret <2 x i64> %b
908 define arm_aapcs_vfpcc <2 x i64> @mov_int64_f_0() {
909 ; CHECKLE-LABEL: mov_int64_f_0:
910 ; CHECKLE:       @ %bb.0: @ %entry
911 ; CHECKLE-NEXT:    adr r0, .LCPI58_0
912 ; CHECKLE-NEXT:    vldrw.u32 q0, [r0]
913 ; CHECKLE-NEXT:    bx lr
914 ; CHECKLE-NEXT:    .p2align 4
915 ; CHECKLE-NEXT:  @ %bb.1:
916 ; CHECKLE-NEXT:  .LCPI58_0:
917 ; CHECKLE-NEXT:    .long 255 @ double 1.2598673968951787E-321
918 ; CHECKLE-NEXT:    .long 0
919 ; CHECKLE-NEXT:    .long 0 @ double 0
920 ; CHECKLE-NEXT:    .long 0
922 ; CHECKBE-LABEL: mov_int64_f_0:
923 ; CHECKBE:       @ %bb.0: @ %entry
924 ; CHECKBE-NEXT:    adr r0, .LCPI58_0
925 ; CHECKBE-NEXT:    vldrb.u8 q1, [r0]
926 ; CHECKBE-NEXT:    vrev64.8 q0, q1
927 ; CHECKBE-NEXT:    bx lr
928 ; CHECKBE-NEXT:    .p2align 4
929 ; CHECKBE-NEXT:  @ %bb.1:
930 ; CHECKBE-NEXT:  .LCPI58_0:
931 ; CHECKBE-NEXT:    .long 0 @ double 1.2598673968951787E-321
932 ; CHECKBE-NEXT:    .long 255
933 ; CHECKBE-NEXT:    .long 0 @ double 0
934 ; CHECKBE-NEXT:    .long 0
935 entry:
936   ret <2 x i64> <i64 255, i64 0>
939 define arm_aapcs_vfpcc <2 x i64> @xor_int64_f_0(<2 x i64> %a) {
940 ; CHECKLE-LABEL: xor_int64_f_0:
941 ; CHECKLE:       @ %bb.0: @ %entry
942 ; CHECKLE-NEXT:    adr r0, .LCPI59_0
943 ; CHECKLE-NEXT:    vldrw.u32 q1, [r0]
944 ; CHECKLE-NEXT:    veor q0, q0, q1
945 ; CHECKLE-NEXT:    bx lr
946 ; CHECKLE-NEXT:    .p2align 4
947 ; CHECKLE-NEXT:  @ %bb.1:
948 ; CHECKLE-NEXT:  .LCPI59_0:
949 ; CHECKLE-NEXT:    .long 255 @ 0xff
950 ; CHECKLE-NEXT:    .long 0 @ 0x0
951 ; CHECKLE-NEXT:    .long 0 @ 0x0
952 ; CHECKLE-NEXT:    .long 0 @ 0x0
954 ; CHECKBE-LABEL: xor_int64_f_0:
955 ; CHECKBE:       @ %bb.0: @ %entry
956 ; CHECKBE-NEXT:    adr r0, .LCPI59_0
957 ; CHECKBE-NEXT:    vldrb.u8 q1, [r0]
958 ; CHECKBE-NEXT:    vrev64.8 q2, q1
959 ; CHECKBE-NEXT:    veor q0, q0, q2
960 ; CHECKBE-NEXT:    bx lr
961 ; CHECKBE-NEXT:    .p2align 4
962 ; CHECKBE-NEXT:  @ %bb.1:
963 ; CHECKBE-NEXT:  .LCPI59_0:
964 ; CHECKBE-NEXT:    .long 0 @ 0x0
965 ; CHECKBE-NEXT:    .long 255 @ 0xff
966 ; CHECKBE-NEXT:    .long 0 @ 0x0
967 ; CHECKBE-NEXT:    .long 0 @ 0x0
968 entry:
969   %b = xor <2 x i64> %a, <i64 255, i64 0>
970   ret <2 x i64> %b
973 define arm_aapcs_vfpcc <16 x i8> @mov_int64_0f000f0f() {
974 ; CHECKLE-LABEL: mov_int64_0f000f0f:
975 ; CHECKLE:       @ %bb.0: @ %entry
976 ; CHECKLE-NEXT:    vmov.i64 q0, #0xff000000ff00ff
977 ; CHECKLE-NEXT:    bx lr
979 ; CHECKBE-LABEL: mov_int64_0f000f0f:
980 ; CHECKBE:       @ %bb.0: @ %entry
981 ; CHECKBE-NEXT:    vmov.i64 q0, #0xff00ff000000ff00
982 ; CHECKBE-NEXT:    bx lr
983 entry:
984   ret <16 x i8> <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0>
987 define arm_aapcs_vfpcc <16 x i8> @xor_int64_0f000f0f(<16 x i8> %a) {
988 ; CHECKLE-LABEL: xor_int64_0f000f0f:
989 ; CHECKLE:       @ %bb.0: @ %entry
990 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff000000ff00ff
991 ; CHECKLE-NEXT:    veor q0, q0, q1
992 ; CHECKLE-NEXT:    bx lr
994 ; CHECKBE-LABEL: xor_int64_0f000f0f:
995 ; CHECKBE:       @ %bb.0: @ %entry
996 ; CHECKBE-NEXT:    vmov.i64 q1, #0xff000000ff00ff
997 ; CHECKBE-NEXT:    vrev64.8 q2, q0
998 ; CHECKBE-NEXT:    veor q1, q2, q1
999 ; CHECKBE-NEXT:    vrev64.8 q0, q1
1000 ; CHECKBE-NEXT:    bx lr
1001 entry:
1002   %b = xor <16 x i8> %a, <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0>
1003   ret <16 x i8> %b
1006 define arm_aapcs_vfpcc <8 x i16> @mov_int64_ff00ffff() {
1007 ; CHECKLE-LABEL: mov_int64_ff00ffff:
1008 ; CHECKLE:       @ %bb.0: @ %entry
1009 ; CHECKLE-NEXT:    vmov.i64 q0, #0xffffffff0000ffff
1010 ; CHECKLE-NEXT:    bx lr
1012 ; CHECKBE-LABEL: mov_int64_ff00ffff:
1013 ; CHECKBE:       @ %bb.0: @ %entry
1014 ; CHECKBE-NEXT:    vmov.i64 q0, #0xffff0000ffffffff
1015 ; CHECKBE-NEXT:    bx lr
1016 entry:
1017   ret <8 x i16> <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1>
1020 define arm_aapcs_vfpcc <8 x i16> @xor_int64_ff00ffff(<8 x i16> %a) {
1021 ; CHECKLE-LABEL: xor_int64_ff00ffff:
1022 ; CHECKLE:       @ %bb.0: @ %entry
1023 ; CHECKLE-NEXT:    vmov.i64 q1, #0xffffffff0000ffff
1024 ; CHECKLE-NEXT:    veor q0, q0, q1
1025 ; CHECKLE-NEXT:    bx lr
1027 ; CHECKBE-LABEL: xor_int64_ff00ffff:
1028 ; CHECKBE:       @ %bb.0: @ %entry
1029 ; CHECKBE-NEXT:    vmov.i64 q1, #0xffffffff0000ffff
1030 ; CHECKBE-NEXT:    vrev64.16 q2, q0
1031 ; CHECKBE-NEXT:    veor q1, q2, q1
1032 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1033 ; CHECKBE-NEXT:    bx lr
1034 entry:
1035   %b = xor <8 x i16> %a, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1>
1036   ret <8 x i16> %b
1039 define arm_aapcs_vfpcc <16 x i8> @mov_int64_0f0f0f0f0f0f0f0f() {
1040 ; CHECKLE-LABEL: mov_int64_0f0f0f0f0f0f0f0f:
1041 ; CHECKLE:       @ %bb.0: @ %entry
1042 ; CHECKLE-NEXT:    vmov.i16 q0, #0xff
1043 ; CHECKLE-NEXT:    bx lr
1045 ; CHECKBE-LABEL: mov_int64_0f0f0f0f0f0f0f0f:
1046 ; CHECKBE:       @ %bb.0: @ %entry
1047 ; CHECKBE-NEXT:    vmov.i16 q0, #0xff00
1048 ; CHECKBE-NEXT:    bx lr
1049 entry:
1050   ret <16 x i8> <i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0>
1053 define arm_aapcs_vfpcc <16 x i8> @xor_int64_0f0f0f0f0f0f0f0f(<16 x i8> %a) {
1054 ; CHECKLE-LABEL: xor_int64_0f0f0f0f0f0f0f0f:
1055 ; CHECKLE:       @ %bb.0: @ %entry
1056 ; CHECKLE-NEXT:    vmov.i16 q1, #0xff
1057 ; CHECKLE-NEXT:    veor q0, q0, q1
1058 ; CHECKLE-NEXT:    bx lr
1060 ; CHECKBE-LABEL: xor_int64_0f0f0f0f0f0f0f0f:
1061 ; CHECKBE:       @ %bb.0: @ %entry
1062 ; CHECKBE-NEXT:    vmov.i16 q1, #0xff
1063 ; CHECKBE-NEXT:    vrev64.8 q2, q0
1064 ; CHECKBE-NEXT:    veor q1, q2, q1
1065 ; CHECKBE-NEXT:    vrev64.8 q0, q1
1066 ; CHECKBE-NEXT:    bx lr
1067 entry:
1068   %b = xor <16 x i8> %a, <i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0>
1069   ret <16 x i8> %b
1072 define arm_aapcs_vfpcc <4 x float> @mov_float_1() {
1073 ; CHECK-LABEL: mov_float_1:
1074 ; CHECK:       @ %bb.0: @ %entry
1075 ; CHECK-NEXT:    mov.w r0, #1065353216
1076 ; CHECK-NEXT:    vdup.32 q0, r0
1077 ; CHECK-NEXT:    bx lr
1078 entry:
1079   ret <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
1082 define arm_aapcs_vfpcc <4 x float> @fadd_float_1(<4 x float> %a) {
1083 ; CHECKBE-LABEL: fadd_float_1:
1084 ; CHECKBE:       @ %bb.0: @ %entry
1085 ; CHECKBE-NEXT:    vmov.f32 q1, #1.000000e+00
1086 ; CHECKBE-NEXT:    vrev64.32 q2, q0
1087 ; CHECKBE-NEXT:    vadd.f32 q1, q2, q1
1088 ; CHECKBE-NEXT:    vrev64.32 q0, q1
1089 ; CHECKBE-NEXT:    bx lr
1090 entry:
1091   %b = fadd <4 x float> %a, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
1092   ret <4 x float> %b
1095 define arm_aapcs_vfpcc <4 x float> @mov_float_m3() {
1096 ; CHECK-LABEL: mov_float_m3:
1097 ; CHECK:       @ %bb.0: @ %entry
1098 ; CHECK-NEXT:    movs r0, #0
1099 ; CHECK-NEXT:    movt r0, #49216
1100 ; CHECK-NEXT:    vdup.32 q0, r0
1101 ; CHECK-NEXT:    bx lr
1102 entry:
1103   ret <4 x float> <float -3.000000e+00, float -3.000000e+00, float -3.000000e+00, float -3.000000e+00>
1106 define arm_aapcs_vfpcc <4 x float> @fadd_float_m3(<4 x float> %a) {
1107 ; CHECKBE-LABEL: fadd_float_m3:
1108 ; CHECKBE:       @ %bb.0: @ %entry
1109 ; CHECKBE-NEXT:    vmov.f32 q1, #-3.000000e+00
1110 ; CHECKBE-NEXT:    vrev64.32 q2, q0
1111 ; CHECKBE-NEXT:    vadd.f32 q1, q2, q1
1112 ; CHECKBE-NEXT:    vrev64.32 q0, q1
1113 ; CHECKBE-NEXT:    bx lr
1114 entry:
1115   %b = fadd <4 x float> %a, <float -3.000000e+00, float -3.000000e+00, float -3.000000e+00, float -3.000000e+00>
1116   ret <4 x float> %b
1119 define arm_aapcs_vfpcc <8 x half> @mov_float16_1() {
1120 ; CHECK-LABEL: mov_float16_1:
1121 ; CHECK:       @ %bb.0: @ %entry
1122 ; CHECK-NEXT:    vmov.i16 q0, #0x3c00
1123 ; CHECK-NEXT:    bx lr
1124 entry:
1125   ret <8 x half> <half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00>
1128 define arm_aapcs_vfpcc <8 x half> @fadd_float16_1(<8 x half> %a) {
1129 ; CHECKBE-LABEL: fadd_float16_1:
1130 ; CHECKBE:       @ %bb.0: @ %entry
1131 ; CHECKBE-NEXT:    vmov.i16 q1, #0x3c00
1132 ; CHECKBE-NEXT:    vrev64.16 q2, q0
1133 ; CHECKBE-NEXT:    vadd.f16 q1, q2, q1
1134 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1135 ; CHECKBE-NEXT:    bx lr
1136 entry:
1137   %b = fadd <8 x half> %a, <half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00>
1138   ret <8 x half> %b
1141 define arm_aapcs_vfpcc <8 x half> @mov_float16_m3() {
1142 ; CHECK-LABEL: mov_float16_m3:
1143 ; CHECK:       @ %bb.0: @ %entry
1144 ; CHECK-NEXT:    vmov.i16 q0, #0xc200
1145 ; CHECK-NEXT:    bx lr
1146 entry:
1147   ret <8 x half> <half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00>
1150 define arm_aapcs_vfpcc <8 x half> @fadd_float16_m3(<8 x half> %a) {
1151 ; CHECKBE-LABEL: fadd_float16_m3:
1152 ; CHECKBE:       @ %bb.0: @ %entry
1153 ; CHECKBE-NEXT:    vmov.i16 q1, #0xc200
1154 ; CHECKBE-NEXT:    vrev64.16 q2, q0
1155 ; CHECKBE-NEXT:    vadd.f16 q1, q2, q1
1156 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1157 ; CHECKBE-NEXT:    bx lr
1158 entry:
1159   %b = fadd <8 x half> %a, <half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00>
1160   ret <8 x half> %b
1163 define arm_aapcs_vfpcc <2 x double> @mov_double_1() {
1164 ; CHECKLE-LABEL: mov_double_1:
1165 ; CHECKLE:       @ %bb.0: @ %entry
1166 ; CHECKLE-NEXT:    adr r0, .LCPI74_0
1167 ; CHECKLE-NEXT:    vldrw.u32 q0, [r0]
1168 ; CHECKLE-NEXT:    bx lr
1169 ; CHECKLE-NEXT:    .p2align 4
1170 ; CHECKLE-NEXT:  @ %bb.1:
1171 ; CHECKLE-NEXT:  .LCPI74_0:
1172 ; CHECKLE-NEXT:    .long 0 @ double 1
1173 ; CHECKLE-NEXT:    .long 1072693248
1174 ; CHECKLE-NEXT:    .long 0 @ double 1
1175 ; CHECKLE-NEXT:    .long 1072693248
1177 ; CHECKBE-LABEL: mov_double_1:
1178 ; CHECKBE:       @ %bb.0: @ %entry
1179 ; CHECKBE-NEXT:    adr r0, .LCPI74_0
1180 ; CHECKBE-NEXT:    vldrb.u8 q1, [r0]
1181 ; CHECKBE-NEXT:    vrev64.8 q0, q1
1182 ; CHECKBE-NEXT:    bx lr
1183 ; CHECKBE-NEXT:    .p2align 4
1184 ; CHECKBE-NEXT:  @ %bb.1:
1185 ; CHECKBE-NEXT:  .LCPI74_0:
1186 ; CHECKBE-NEXT:    .long 1072693248 @ double 1
1187 ; CHECKBE-NEXT:    .long 0
1188 ; CHECKBE-NEXT:    .long 1072693248 @ double 1
1189 ; CHECKBE-NEXT:    .long 0
1190 entry:
1191   ret <2 x double> <double 1.000000e+00, double 1.000000e+00>
1194 define arm_aapcs_vfpcc <16 x i8> @test(<16 x i8> %i) {
1195 ; CHECKLE-LABEL: test:
1196 ; CHECKLE:       @ %bb.0: @ %entry
1197 ; CHECKLE-NEXT:    vmov.i64 q1, #0xff000000ff00ff
1198 ; CHECKLE-NEXT:    vorr q0, q0, q1
1199 ; CHECKLE-NEXT:    bx lr
1201 ; CHECKBE-LABEL: test:
1202 ; CHECKBE:       @ %bb.0: @ %entry
1203 ; CHECKBE-NEXT:    vmov.i64 q1, #0xff000000ff00ff
1204 ; CHECKBE-NEXT:    vrev64.8 q2, q0
1205 ; CHECKBE-NEXT:    vorr q1, q2, q1
1206 ; CHECKBE-NEXT:    vrev64.8 q0, q1
1207 ; CHECKBE-NEXT:    bx lr
1208 entry:
1209   %o = or <16 x i8> %i, <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0>
1210   ret <16 x i8> %o
1213 define arm_aapcs_vfpcc <8 x i16> @test2(<8 x i16> %i) {
1214 ; CHECKLE-LABEL: test2:
1215 ; CHECKLE:       @ %bb.0: @ %entry
1216 ; CHECKLE-NEXT:    vmov.i64 q1, #0xffffffff0000ffff
1217 ; CHECKLE-NEXT:    vorr q0, q0, q1
1218 ; CHECKLE-NEXT:    bx lr
1220 ; CHECKBE-LABEL: test2:
1221 ; CHECKBE:       @ %bb.0: @ %entry
1222 ; CHECKBE-NEXT:    vmov.i64 q1, #0xffffffff0000ffff
1223 ; CHECKBE-NEXT:    vrev64.16 q2, q0
1224 ; CHECKBE-NEXT:    vorr q1, q2, q1
1225 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1226 ; CHECKBE-NEXT:    bx lr
1227 entry:
1228   %o = or <8 x i16> %i, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1>
1229   ret <8 x i16> %o
1232 define arm_aapcs_vfpcc <4 x i32> @i1and_vmov(<4 x i32> %a, <4 x i32> %b, i32 %c) {
1233 ; CHECKLE-LABEL: i1and_vmov:
1234 ; CHECKLE:       @ %bb.0: @ %entry
1235 ; CHECKLE-NEXT:    cmp r0, #0
1236 ; CHECKLE-NEXT:    mov.w r1, #15
1237 ; CHECKLE-NEXT:    csetm r0, eq
1238 ; CHECKLE-NEXT:    ands r0, r1
1239 ; CHECKLE-NEXT:    vmsr p0, r0
1240 ; CHECKLE-NEXT:    vpsel q0, q0, q1
1241 ; CHECKLE-NEXT:    bx lr
1243 ; CHECKBE-LABEL: i1and_vmov:
1244 ; CHECKBE:       @ %bb.0: @ %entry
1245 ; CHECKBE-NEXT:    cmp r0, #0
1246 ; CHECKBE-NEXT:    mov.w r1, #15
1247 ; CHECKBE-NEXT:    csetm r0, eq
1248 ; CHECKBE-NEXT:    vrev64.32 q2, q1
1249 ; CHECKBE-NEXT:    ands r0, r1
1250 ; CHECKBE-NEXT:    vrev64.32 q1, q0
1251 ; CHECKBE-NEXT:    vmsr p0, r0
1252 ; CHECKBE-NEXT:    vpsel q1, q1, q2
1253 ; CHECKBE-NEXT:    vrev64.32 q0, q1
1254 ; CHECKBE-NEXT:    bx lr
1255 entry:
1256   %c1 = icmp eq i32 %c, zeroinitializer
1257   %broadcast.splatinsert1967 = insertelement <4 x i1> undef, i1 %c1, i32 0
1258   %broadcast.splat1968 = shufflevector <4 x i1> %broadcast.splatinsert1967, <4 x i1> undef, <4 x i32> zeroinitializer
1259   %l699 = and <4 x i1> %broadcast.splat1968, <i1 true, i1 false, i1 false, i1 false>
1260   %s = select <4 x i1> %l699, <4 x i32> %a, <4 x i32> %b
1261   ret <4 x i32> %s
1264 define arm_aapcs_vfpcc <4 x i32> @i1or_vmov(<4 x i32> %a, <4 x i32> %b, i32 %c) {
1265 ; CHECKLE-LABEL: i1or_vmov:
1266 ; CHECKLE:       @ %bb.0: @ %entry
1267 ; CHECKLE-NEXT:    cmp r0, #0
1268 ; CHECKLE-NEXT:    mov.w r1, #15
1269 ; CHECKLE-NEXT:    csetm r0, eq
1270 ; CHECKLE-NEXT:    orrs r0, r1
1271 ; CHECKLE-NEXT:    vmsr p0, r0
1272 ; CHECKLE-NEXT:    vpsel q0, q0, q1
1273 ; CHECKLE-NEXT:    bx lr
1275 ; CHECKBE-LABEL: i1or_vmov:
1276 ; CHECKBE:       @ %bb.0: @ %entry
1277 ; CHECKBE-NEXT:    cmp r0, #0
1278 ; CHECKBE-NEXT:    mov.w r1, #15
1279 ; CHECKBE-NEXT:    csetm r0, eq
1280 ; CHECKBE-NEXT:    vrev64.32 q2, q1
1281 ; CHECKBE-NEXT:    orrs r0, r1
1282 ; CHECKBE-NEXT:    vrev64.32 q1, q0
1283 ; CHECKBE-NEXT:    vmsr p0, r0
1284 ; CHECKBE-NEXT:    vpsel q1, q1, q2
1285 ; CHECKBE-NEXT:    vrev64.32 q0, q1
1286 ; CHECKBE-NEXT:    bx lr
1287 entry:
1288   %c1 = icmp eq i32 %c, zeroinitializer
1289   %broadcast.splatinsert1967 = insertelement <4 x i1> undef, i1 %c1, i32 0
1290   %broadcast.splat1968 = shufflevector <4 x i1> %broadcast.splatinsert1967, <4 x i1> undef, <4 x i32> zeroinitializer
1291   %l699 = or <4 x i1> %broadcast.splat1968, <i1 true, i1 false, i1 false, i1 false>
1292   %s = select <4 x i1> %l699, <4 x i32> %a, <4 x i32> %b
1293   ret <4 x i32> %s
1296 define arm_aapcs_vfpcc <2 x i64> @v2i1and_vmov(<2 x i64> %a, <2 x i64> %b, i32 %c) {
1297 ; CHECK-LABEL: v2i1and_vmov:
1298 ; CHECK:       @ %bb.0: @ %entry
1299 ; CHECK-NEXT:    cmp r0, #0
1300 ; CHECK-NEXT:    mov.w r1, #0
1301 ; CHECK-NEXT:    csetm r0, eq
1302 ; CHECK-NEXT:    bfi r1, r0, #0, #8
1303 ; CHECK-NEXT:    vmsr p0, r1
1304 ; CHECK-NEXT:    vpsel q0, q0, q1
1305 ; CHECK-NEXT:    bx lr
1306 entry:
1307   %c1 = icmp eq i32 %c, zeroinitializer
1308   %broadcast.splatinsert1967 = insertelement <2 x i1> undef, i1 %c1, i32 0
1309   %broadcast.splat1968 = shufflevector <2 x i1> %broadcast.splatinsert1967, <2 x i1> undef, <2 x i32> zeroinitializer
1310   %l699 = and <2 x i1> %broadcast.splat1968, <i1 true, i1 false>
1311   %s = select <2 x i1> %l699, <2 x i64> %a, <2 x i64> %b
1312   ret <2 x i64> %s
1315 define arm_aapcs_vfpcc <2 x i64> @v2i1or_vmov(<2 x i64> %a, <2 x i64> %b, i32 %c) {
1316 ; CHECK-LABEL: v2i1or_vmov:
1317 ; CHECK:       @ %bb.0: @ %entry
1318 ; CHECK-NEXT:    cmp r0, #0
1319 ; CHECK-NEXT:    mov.w r1, #255
1320 ; CHECK-NEXT:    csetm r0, eq
1321 ; CHECK-NEXT:    bfi r1, r0, #8, #8
1322 ; CHECK-NEXT:    vmsr p0, r1
1323 ; CHECK-NEXT:    vpsel q0, q0, q1
1324 ; CHECK-NEXT:    bx lr
1325 entry:
1326   %c1 = icmp eq i32 %c, zeroinitializer
1327   %broadcast.splatinsert1967 = insertelement <2 x i1> undef, i1 %c1, i32 0
1328   %broadcast.splat1968 = shufflevector <2 x i1> %broadcast.splatinsert1967, <2 x i1> undef, <2 x i32> zeroinitializer
1329   %l699 = or <2 x i1> %broadcast.splat1968, <i1 true, i1 false>
1330   %s = select <2 x i1> %l699, <2 x i64> %a, <2 x i64> %b
1331   ret <2 x i64> %s
1334 define arm_aapcs_vfpcc <8 x i16> @and_v8i16_m1(<8 x i16> %a) {
1335 ; CHECKLE-LABEL: and_v8i16_m1:
1336 ; CHECKLE:       @ %bb.0:
1337 ; CHECKLE-NEXT:    vbic.i32 q0, #0x10000
1338 ; CHECKLE-NEXT:    bx lr
1340 ; CHECKBE-LABEL: and_v8i16_m1:
1341 ; CHECKBE:       @ %bb.0:
1342 ; CHECKBE-NEXT:    vrev64.16 q1, q0
1343 ; CHECKBE-NEXT:    vbic.i32 q1, #0x10000
1344 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1345 ; CHECKBE-NEXT:    bx lr
1346   %b = and <8 x i16> %a, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534>
1347   ret <8 x i16> %b
1350 define arm_aapcs_vfpcc <8 x i16> @or_v8i16_1(<8 x i16> %a) {
1351 ; CHECKLE-LABEL: or_v8i16_1:
1352 ; CHECKLE:       @ %bb.0:
1353 ; CHECKLE-NEXT:    vorr.i32 q0, #0x10000
1354 ; CHECKLE-NEXT:    bx lr
1356 ; CHECKBE-LABEL: or_v8i16_1:
1357 ; CHECKBE:       @ %bb.0:
1358 ; CHECKBE-NEXT:    vrev64.16 q1, q0
1359 ; CHECKBE-NEXT:    vorr.i32 q1, #0x10000
1360 ; CHECKBE-NEXT:    vrev64.16 q0, q1
1361 ; CHECKBE-NEXT:    bx lr
1362   %b = or <8 x i16> %a, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>
1363   ret <8 x i16> %b