1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
4 define arm_aapcs_vfpcc <4 x i32> @vcmp_eq_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
5 ; CHECK-LABEL: vcmp_eq_v4i32:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vcmp.i32 eq, q0, q1
8 ; CHECK-NEXT: vpsel q0, q2, q3
11 %c = icmp eq <4 x i32> %src, %srcb
12 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
16 define arm_aapcs_vfpcc <4 x i32> @vcmp_ne_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
17 ; CHECK-LABEL: vcmp_ne_v4i32:
18 ; CHECK: @ %bb.0: @ %entry
19 ; CHECK-NEXT: vcmp.i32 ne, q0, q1
20 ; CHECK-NEXT: vpsel q0, q2, q3
23 %c = icmp ne <4 x i32> %src, %srcb
24 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
28 define arm_aapcs_vfpcc <4 x i32> @vcmp_sgt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
29 ; CHECK-LABEL: vcmp_sgt_v4i32:
30 ; CHECK: @ %bb.0: @ %entry
31 ; CHECK-NEXT: vcmp.s32 gt, q0, q1
32 ; CHECK-NEXT: vpsel q0, q2, q3
35 %c = icmp sgt <4 x i32> %src, %srcb
36 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
40 define arm_aapcs_vfpcc <4 x i32> @vcmp_sge_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
41 ; CHECK-LABEL: vcmp_sge_v4i32:
42 ; CHECK: @ %bb.0: @ %entry
43 ; CHECK-NEXT: vcmp.s32 ge, q0, q1
44 ; CHECK-NEXT: vpsel q0, q2, q3
47 %c = icmp sge <4 x i32> %src, %srcb
48 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
52 define arm_aapcs_vfpcc <4 x i32> @vcmp_slt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
53 ; CHECK-LABEL: vcmp_slt_v4i32:
54 ; CHECK: @ %bb.0: @ %entry
55 ; CHECK-NEXT: vcmp.s32 gt, q1, q0
56 ; CHECK-NEXT: vpsel q0, q2, q3
59 %c = icmp slt <4 x i32> %src, %srcb
60 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
64 define arm_aapcs_vfpcc <4 x i32> @vcmp_sle_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
65 ; CHECK-LABEL: vcmp_sle_v4i32:
66 ; CHECK: @ %bb.0: @ %entry
67 ; CHECK-NEXT: vcmp.s32 ge, q1, q0
68 ; CHECK-NEXT: vpsel q0, q2, q3
71 %c = icmp sle <4 x i32> %src, %srcb
72 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
76 define arm_aapcs_vfpcc <4 x i32> @vcmp_ugt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
77 ; CHECK-LABEL: vcmp_ugt_v4i32:
78 ; CHECK: @ %bb.0: @ %entry
79 ; CHECK-NEXT: vcmp.u32 hi, q0, q1
80 ; CHECK-NEXT: vpsel q0, q2, q3
83 %c = icmp ugt <4 x i32> %src, %srcb
84 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
88 define arm_aapcs_vfpcc <4 x i32> @vcmp_uge_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
89 ; CHECK-LABEL: vcmp_uge_v4i32:
90 ; CHECK: @ %bb.0: @ %entry
91 ; CHECK-NEXT: vcmp.u32 cs, q0, q1
92 ; CHECK-NEXT: vpsel q0, q2, q3
95 %c = icmp uge <4 x i32> %src, %srcb
96 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
100 define arm_aapcs_vfpcc <4 x i32> @vcmp_ult_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
101 ; CHECK-LABEL: vcmp_ult_v4i32:
102 ; CHECK: @ %bb.0: @ %entry
103 ; CHECK-NEXT: vcmp.u32 hi, q1, q0
104 ; CHECK-NEXT: vpsel q0, q2, q3
107 %c = icmp ult <4 x i32> %src, %srcb
108 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
112 define arm_aapcs_vfpcc <4 x i32> @vcmp_ule_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) {
113 ; CHECK-LABEL: vcmp_ule_v4i32:
114 ; CHECK: @ %bb.0: @ %entry
115 ; CHECK-NEXT: vcmp.u32 cs, q1, q0
116 ; CHECK-NEXT: vpsel q0, q2, q3
119 %c = icmp ule <4 x i32> %src, %srcb
120 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
125 define arm_aapcs_vfpcc <8 x i16> @vcmp_eq_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
126 ; CHECK-LABEL: vcmp_eq_v8i16:
127 ; CHECK: @ %bb.0: @ %entry
128 ; CHECK-NEXT: vcmp.i16 eq, q0, q1
129 ; CHECK-NEXT: vpsel q0, q2, q3
132 %c = icmp eq <8 x i16> %src, %srcb
133 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
137 define arm_aapcs_vfpcc <8 x i16> @vcmp_ne_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
138 ; CHECK-LABEL: vcmp_ne_v8i16:
139 ; CHECK: @ %bb.0: @ %entry
140 ; CHECK-NEXT: vcmp.i16 ne, q0, q1
141 ; CHECK-NEXT: vpsel q0, q2, q3
144 %c = icmp ne <8 x i16> %src, %srcb
145 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
149 define arm_aapcs_vfpcc <8 x i16> @vcmp_sgt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
150 ; CHECK-LABEL: vcmp_sgt_v8i16:
151 ; CHECK: @ %bb.0: @ %entry
152 ; CHECK-NEXT: vcmp.s16 gt, q0, q1
153 ; CHECK-NEXT: vpsel q0, q2, q3
156 %c = icmp sgt <8 x i16> %src, %srcb
157 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
161 define arm_aapcs_vfpcc <8 x i16> @vcmp_sge_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
162 ; CHECK-LABEL: vcmp_sge_v8i16:
163 ; CHECK: @ %bb.0: @ %entry
164 ; CHECK-NEXT: vcmp.s16 ge, q0, q1
165 ; CHECK-NEXT: vpsel q0, q2, q3
168 %c = icmp sge <8 x i16> %src, %srcb
169 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
173 define arm_aapcs_vfpcc <8 x i16> @vcmp_slt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
174 ; CHECK-LABEL: vcmp_slt_v8i16:
175 ; CHECK: @ %bb.0: @ %entry
176 ; CHECK-NEXT: vcmp.s16 gt, q1, q0
177 ; CHECK-NEXT: vpsel q0, q2, q3
180 %c = icmp slt <8 x i16> %src, %srcb
181 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
185 define arm_aapcs_vfpcc <8 x i16> @vcmp_sle_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
186 ; CHECK-LABEL: vcmp_sle_v8i16:
187 ; CHECK: @ %bb.0: @ %entry
188 ; CHECK-NEXT: vcmp.s16 ge, q1, q0
189 ; CHECK-NEXT: vpsel q0, q2, q3
192 %c = icmp sle <8 x i16> %src, %srcb
193 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
197 define arm_aapcs_vfpcc <8 x i16> @vcmp_ugt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
198 ; CHECK-LABEL: vcmp_ugt_v8i16:
199 ; CHECK: @ %bb.0: @ %entry
200 ; CHECK-NEXT: vcmp.u16 hi, q0, q1
201 ; CHECK-NEXT: vpsel q0, q2, q3
204 %c = icmp ugt <8 x i16> %src, %srcb
205 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
209 define arm_aapcs_vfpcc <8 x i16> @vcmp_uge_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
210 ; CHECK-LABEL: vcmp_uge_v8i16:
211 ; CHECK: @ %bb.0: @ %entry
212 ; CHECK-NEXT: vcmp.u16 cs, q0, q1
213 ; CHECK-NEXT: vpsel q0, q2, q3
216 %c = icmp uge <8 x i16> %src, %srcb
217 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
221 define arm_aapcs_vfpcc <8 x i16> @vcmp_ult_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
222 ; CHECK-LABEL: vcmp_ult_v8i16:
223 ; CHECK: @ %bb.0: @ %entry
224 ; CHECK-NEXT: vcmp.u16 hi, q1, q0
225 ; CHECK-NEXT: vpsel q0, q2, q3
228 %c = icmp ult <8 x i16> %src, %srcb
229 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
233 define arm_aapcs_vfpcc <8 x i16> @vcmp_ule_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) {
234 ; CHECK-LABEL: vcmp_ule_v8i16:
235 ; CHECK: @ %bb.0: @ %entry
236 ; CHECK-NEXT: vcmp.u16 cs, q1, q0
237 ; CHECK-NEXT: vpsel q0, q2, q3
240 %c = icmp ule <8 x i16> %src, %srcb
241 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
246 define arm_aapcs_vfpcc <16 x i8> @vcmp_eq_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
247 ; CHECK-LABEL: vcmp_eq_v16i8:
248 ; CHECK: @ %bb.0: @ %entry
249 ; CHECK-NEXT: vcmp.i8 eq, q0, q1
250 ; CHECK-NEXT: vpsel q0, q2, q3
253 %c = icmp eq <16 x i8> %src, %srcb
254 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
258 define arm_aapcs_vfpcc <16 x i8> @vcmp_ne_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
259 ; CHECK-LABEL: vcmp_ne_v16i8:
260 ; CHECK: @ %bb.0: @ %entry
261 ; CHECK-NEXT: vcmp.i8 ne, q0, q1
262 ; CHECK-NEXT: vpsel q0, q2, q3
265 %c = icmp ne <16 x i8> %src, %srcb
266 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
270 define arm_aapcs_vfpcc <16 x i8> @vcmp_sgt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
271 ; CHECK-LABEL: vcmp_sgt_v16i8:
272 ; CHECK: @ %bb.0: @ %entry
273 ; CHECK-NEXT: vcmp.s8 gt, q0, q1
274 ; CHECK-NEXT: vpsel q0, q2, q3
277 %c = icmp sgt <16 x i8> %src, %srcb
278 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
282 define arm_aapcs_vfpcc <16 x i8> @vcmp_sge_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
283 ; CHECK-LABEL: vcmp_sge_v16i8:
284 ; CHECK: @ %bb.0: @ %entry
285 ; CHECK-NEXT: vcmp.s8 ge, q0, q1
286 ; CHECK-NEXT: vpsel q0, q2, q3
289 %c = icmp sge <16 x i8> %src, %srcb
290 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
294 define arm_aapcs_vfpcc <16 x i8> @vcmp_slt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
295 ; CHECK-LABEL: vcmp_slt_v16i8:
296 ; CHECK: @ %bb.0: @ %entry
297 ; CHECK-NEXT: vcmp.s8 gt, q1, q0
298 ; CHECK-NEXT: vpsel q0, q2, q3
301 %c = icmp slt <16 x i8> %src, %srcb
302 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
306 define arm_aapcs_vfpcc <16 x i8> @vcmp_sle_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
307 ; CHECK-LABEL: vcmp_sle_v16i8:
308 ; CHECK: @ %bb.0: @ %entry
309 ; CHECK-NEXT: vcmp.s8 ge, q1, q0
310 ; CHECK-NEXT: vpsel q0, q2, q3
313 %c = icmp sle <16 x i8> %src, %srcb
314 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
318 define arm_aapcs_vfpcc <16 x i8> @vcmp_ugt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
319 ; CHECK-LABEL: vcmp_ugt_v16i8:
320 ; CHECK: @ %bb.0: @ %entry
321 ; CHECK-NEXT: vcmp.u8 hi, q0, q1
322 ; CHECK-NEXT: vpsel q0, q2, q3
325 %c = icmp ugt <16 x i8> %src, %srcb
326 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
330 define arm_aapcs_vfpcc <16 x i8> @vcmp_uge_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
331 ; CHECK-LABEL: vcmp_uge_v16i8:
332 ; CHECK: @ %bb.0: @ %entry
333 ; CHECK-NEXT: vcmp.u8 cs, q0, q1
334 ; CHECK-NEXT: vpsel q0, q2, q3
337 %c = icmp uge <16 x i8> %src, %srcb
338 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
342 define arm_aapcs_vfpcc <16 x i8> @vcmp_ult_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
343 ; CHECK-LABEL: vcmp_ult_v16i8:
344 ; CHECK: @ %bb.0: @ %entry
345 ; CHECK-NEXT: vcmp.u8 hi, q1, q0
346 ; CHECK-NEXT: vpsel q0, q2, q3
349 %c = icmp ult <16 x i8> %src, %srcb
350 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
354 define arm_aapcs_vfpcc <16 x i8> @vcmp_ule_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) {
355 ; CHECK-LABEL: vcmp_ule_v16i8:
356 ; CHECK: @ %bb.0: @ %entry
357 ; CHECK-NEXT: vcmp.u8 cs, q1, q0
358 ; CHECK-NEXT: vpsel q0, q2, q3
361 %c = icmp ule <16 x i8> %src, %srcb
362 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
367 define arm_aapcs_vfpcc <2 x i64> @vcmp_eq_v2i64(<2 x i64> %src, <2 x i64> %srcb, <2 x i64> %a, <2 x i64> %b) {
368 ; CHECK-LABEL: vcmp_eq_v2i64:
369 ; CHECK: @ %bb.0: @ %entry
370 ; CHECK-NEXT: .vsave {d8, d9}
371 ; CHECK-NEXT: vpush {d8, d9}
372 ; CHECK-NEXT: vmov r0, s5
373 ; CHECK-NEXT: vmov r1, s1
374 ; CHECK-NEXT: vmov r2, s0
375 ; CHECK-NEXT: eors r0, r1
376 ; CHECK-NEXT: vmov r1, s4
377 ; CHECK-NEXT: eors r1, r2
378 ; CHECK-NEXT: vmov r2, s2
379 ; CHECK-NEXT: orrs r0, r1
380 ; CHECK-NEXT: vmov r1, s3
381 ; CHECK-NEXT: clz r0, r0
382 ; CHECK-NEXT: lsrs r0, r0, #5
384 ; CHECK-NEXT: movne.w r0, #-1
385 ; CHECK-NEXT: vmov.32 q4[0], r0
386 ; CHECK-NEXT: vmov.32 q4[1], r0
387 ; CHECK-NEXT: vmov r0, s7
388 ; CHECK-NEXT: eors r0, r1
389 ; CHECK-NEXT: vmov r1, s6
390 ; CHECK-NEXT: eors r1, r2
391 ; CHECK-NEXT: orrs r0, r1
392 ; CHECK-NEXT: clz r0, r0
393 ; CHECK-NEXT: lsrs r0, r0, #5
395 ; CHECK-NEXT: movne.w r0, #-1
396 ; CHECK-NEXT: vmov.32 q4[2], r0
397 ; CHECK-NEXT: vmov.32 q4[3], r0
398 ; CHECK-NEXT: vbic q0, q3, q4
399 ; CHECK-NEXT: vand q1, q2, q4
400 ; CHECK-NEXT: vorr q0, q1, q0
401 ; CHECK-NEXT: vpop {d8, d9}
404 %c = icmp eq <2 x i64> %src, %srcb
405 %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b
409 define arm_aapcs_vfpcc <2 x i32> @vcmp_eq_v2i32(<2 x i64> %src, <2 x i64> %srcb, <2 x i32> %a, <2 x i32> %b) {
410 ; CHECK-LABEL: vcmp_eq_v2i32:
411 ; CHECK: @ %bb.0: @ %entry
412 ; CHECK-NEXT: .vsave {d8, d9}
413 ; CHECK-NEXT: vpush {d8, d9}
414 ; CHECK-NEXT: vmov r0, s5
415 ; CHECK-NEXT: vmov r1, s1
416 ; CHECK-NEXT: vmov r2, s0
417 ; CHECK-NEXT: eors r0, r1
418 ; CHECK-NEXT: vmov r1, s4
419 ; CHECK-NEXT: eors r1, r2
420 ; CHECK-NEXT: vmov r2, s2
421 ; CHECK-NEXT: orrs r0, r1
422 ; CHECK-NEXT: vmov r1, s3
423 ; CHECK-NEXT: clz r0, r0
424 ; CHECK-NEXT: lsrs r0, r0, #5
426 ; CHECK-NEXT: movne.w r0, #-1
427 ; CHECK-NEXT: vmov.32 q4[0], r0
428 ; CHECK-NEXT: vmov.32 q4[1], r0
429 ; CHECK-NEXT: vmov r0, s7
430 ; CHECK-NEXT: eors r0, r1
431 ; CHECK-NEXT: vmov r1, s6
432 ; CHECK-NEXT: eors r1, r2
433 ; CHECK-NEXT: orrs r0, r1
434 ; CHECK-NEXT: clz r0, r0
435 ; CHECK-NEXT: lsrs r0, r0, #5
437 ; CHECK-NEXT: movne.w r0, #-1
438 ; CHECK-NEXT: vmov.32 q4[2], r0
439 ; CHECK-NEXT: vmov.32 q4[3], r0
440 ; CHECK-NEXT: vbic q0, q3, q4
441 ; CHECK-NEXT: vand q1, q2, q4
442 ; CHECK-NEXT: vorr q0, q1, q0
443 ; CHECK-NEXT: vpop {d8, d9}
446 %c = icmp eq <2 x i64> %src, %srcb
447 %s = select <2 x i1> %c, <2 x i32> %a, <2 x i32> %b
451 define arm_aapcs_vfpcc <2 x i32> @vcmp_multi_v2i32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %c) {
452 ; CHECK-LABEL: vcmp_multi_v2i32:
454 ; CHECK-NEXT: .save {r7, lr}
455 ; CHECK-NEXT: push {r7, lr}
456 ; CHECK-NEXT: .vsave {d8, d9, d10, d11}
457 ; CHECK-NEXT: vpush {d8, d9, d10, d11}
458 ; CHECK-NEXT: vmov r0, s1
459 ; CHECK-NEXT: movs r3, #0
460 ; CHECK-NEXT: vmov r1, s0
461 ; CHECK-NEXT: vmov r2, s8
462 ; CHECK-NEXT: vmov lr, s10
463 ; CHECK-NEXT: orrs r0, r1
464 ; CHECK-NEXT: vmov r1, s2
465 ; CHECK-NEXT: clz r0, r0
466 ; CHECK-NEXT: lsrs r0, r0, #5
468 ; CHECK-NEXT: movne.w r0, #-1
469 ; CHECK-NEXT: vmov.32 q3[0], r0
470 ; CHECK-NEXT: vmov.32 q3[1], r0
471 ; CHECK-NEXT: vmov r0, s3
472 ; CHECK-NEXT: orrs r0, r1
473 ; CHECK-NEXT: clz r0, r0
474 ; CHECK-NEXT: lsrs r0, r0, #5
476 ; CHECK-NEXT: movne.w r0, #-1
477 ; CHECK-NEXT: vmov.32 q3[2], r0
478 ; CHECK-NEXT: vmov.32 q3[3], r0
479 ; CHECK-NEXT: vbic q0, q2, q3
480 ; CHECK-NEXT: vmov r0, s0
481 ; CHECK-NEXT: subs r1, r0, r2
482 ; CHECK-NEXT: asr.w r12, r0, #31
483 ; CHECK-NEXT: sbcs.w r1, r12, r2, asr #31
484 ; CHECK-NEXT: mov.w r1, #0
486 ; CHECK-NEXT: movlt r1, #1
487 ; CHECK-NEXT: cmp r1, #0
489 ; CHECK-NEXT: movne.w r1, #-1
490 ; CHECK-NEXT: vmov.32 q3[0], r1
491 ; CHECK-NEXT: vmov.32 q3[1], r1
492 ; CHECK-NEXT: vmov r1, s2
493 ; CHECK-NEXT: subs.w r2, r1, lr
494 ; CHECK-NEXT: asr.w r12, r1, #31
495 ; CHECK-NEXT: sbcs.w r2, r12, lr, asr #31
497 ; CHECK-NEXT: movlt r3, #1
498 ; CHECK-NEXT: cmp r3, #0
500 ; CHECK-NEXT: movne.w r3, #-1
501 ; CHECK-NEXT: cmp r0, #0
503 ; CHECK-NEXT: movne r0, #1
504 ; CHECK-NEXT: cmp r0, #0
506 ; CHECK-NEXT: movne.w r0, #-1
507 ; CHECK-NEXT: vmov.32 q4[0], r0
508 ; CHECK-NEXT: vmov.32 q4[1], r0
509 ; CHECK-NEXT: vmov r0, s4
510 ; CHECK-NEXT: cmp r1, #0
512 ; CHECK-NEXT: movne r1, #1
513 ; CHECK-NEXT: cmp r1, #0
515 ; CHECK-NEXT: movne.w r1, #-1
516 ; CHECK-NEXT: vmov.32 q4[2], r1
517 ; CHECK-NEXT: vmov.32 q3[2], r3
518 ; CHECK-NEXT: vmov.32 q4[3], r1
519 ; CHECK-NEXT: vmov.32 q3[3], r3
520 ; CHECK-NEXT: cmp r0, #0
522 ; CHECK-NEXT: movne r0, #1
523 ; CHECK-NEXT: cmp r0, #0
525 ; CHECK-NEXT: movne.w r0, #-1
526 ; CHECK-NEXT: vmov.32 q5[0], r0
527 ; CHECK-NEXT: vmov.32 q5[1], r0
528 ; CHECK-NEXT: vmov r0, s6
529 ; CHECK-NEXT: cmp r0, #0
531 ; CHECK-NEXT: movne r0, #1
532 ; CHECK-NEXT: cmp r0, #0
534 ; CHECK-NEXT: movne.w r0, #-1
535 ; CHECK-NEXT: vmov.32 q5[2], r0
536 ; CHECK-NEXT: vmov.32 q5[3], r0
537 ; CHECK-NEXT: vand q1, q5, q4
538 ; CHECK-NEXT: vand q1, q3, q1
539 ; CHECK-NEXT: vbic q0, q0, q1
540 ; CHECK-NEXT: vand q1, q2, q1
541 ; CHECK-NEXT: vorr q0, q1, q0
542 ; CHECK-NEXT: vpop {d8, d9, d10, d11}
543 ; CHECK-NEXT: pop {r7, pc}
544 %a4 = icmp eq <2 x i64> %a, zeroinitializer
545 %a5 = select <2 x i1> %a4, <2 x i32> zeroinitializer, <2 x i32> %c
546 %a6 = icmp ne <2 x i32> %b, zeroinitializer
547 %a7 = icmp slt <2 x i32> %a5, %c
548 %a8 = icmp ne <2 x i32> %a5, zeroinitializer
549 %a9 = and <2 x i1> %a6, %a8
550 %a10 = and <2 x i1> %a7, %a9
551 %a11 = select <2 x i1> %a10, <2 x i32> %c, <2 x i32> %a5