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
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
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
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>
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
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
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
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>
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
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
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
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
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>
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
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
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>
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
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
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>
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
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
194 %b = xor <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
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
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
221 %b = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
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
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
249 %b = xor <8 x i16> %a, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256>
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
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
277 %b = xor <8 x i16> %a, <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257>
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
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
308 %b = xor <8 x i16> %a, <i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258>
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
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
349 %b = xor <8 x i16> %a, <i16 257, i16 256, i16 257, i16 256, i16 257, i16 256, i16 257, i16 256>
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
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
377 %b = xor <8 x i16> %a, <i16 255, i16 0, i16 0, i16 255, i16 255, i16 0, i16 0, i16 255>
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
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
405 %b = xor <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1>
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
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
433 %b = xor <4 x i32> %a, <i32 256, i32 256, i32 256, i32 256>
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
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
461 %b = xor <4 x i32> %a, <i32 65536, i32 65536, i32 65536, i32 65536>
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
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
489 %b = xor <4 x i32> %a, <i32 16777216, i32 16777216, i32 16777216, i32 16777216>
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
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
523 %b = xor <4 x i32> %a, <i32 16777217, i32 16777217, i32 16777217, i32 16777217>
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
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
551 %b = xor <4 x i32> %a, <i32 17919, i32 17919, i32 17919, i32 17919>
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
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
579 %b = xor <4 x i32> %a, <i32 4587519, i32 4587519, i32 4587519, i32 4587519>
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
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
606 %b = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
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
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
634 %b = xor <4 x i32> %a, <i32 4294901760, i32 4294901760, i32 4294901760, i32 4294901760>
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
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
668 %b = xor <4 x i32> %a, <i32 4278190335, i32 4278190335, i32 4278190335, i32 4278190335>
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
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
696 %b = xor <4 x i32> %a, <i32 4278255615, i32 4278255615, i32 4278255615, i32 4278255615>
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
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
727 %b = xor <4 x i32> %a, <i32 16908546, i32 16908546, i32 16908546, i32 16908546>
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
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
760 %b = xor <4 x i32> %a, <i32 u0xff00ff00, i32 u0x00ff00ff, i32 u0xff00ff00, i32 u0x00ff00ff>
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
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
825 %b = xor <2 x i64> %a, <i64 1, i64 1>
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
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
852 %b = xor <2 x i64> %a, <i64 255, i64 255>
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
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
877 %b = xor <2 x i64> %a, <i64 -1, i64 -1>
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
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
904 %b = xor <2 x i64> %a, <i64 18374687574888349695, i64 18374687574888349695>
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
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
969 %b = xor <2 x i64> %a, <i64 255, i64 0>
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
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
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>
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
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
1035 %b = xor <8 x i16> %a, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1>
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
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
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>
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
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
1091 %b = fadd <4 x float> %a, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
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
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
1115 %b = fadd <4 x float> %a, <float -3.000000e+00, float -3.000000e+00, float -3.000000e+00, float -3.000000e+00>
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
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
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>
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
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
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>
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
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
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>
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
1228 %o = or <8 x i16> %i, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1>
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
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
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
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
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
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
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
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
1334 define arm_aapcs_vfpcc <8 x i16> @and_v8i16_m1(<8 x i16> %a) {
1335 ; CHECKLE-LABEL: and_v8i16_m1:
1337 ; CHECKLE-NEXT: vbic.i32 q0, #0x10000
1338 ; CHECKLE-NEXT: bx lr
1340 ; CHECKBE-LABEL: and_v8i16_m1:
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>
1350 define arm_aapcs_vfpcc <8 x i16> @or_v8i16_1(<8 x i16> %a) {
1351 ; CHECKLE-LABEL: or_v8i16_1:
1353 ; CHECKLE-NEXT: vorr.i32 q0, #0x10000
1354 ; CHECKLE-NEXT: bx lr
1356 ; CHECKBE-LABEL: or_v8i16_1:
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>