[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / Thumb2 / mve-vcmp.ll
bloba704b4eee67d9a74be5f2b809967c2321302b357
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
9 ; CHECK-NEXT:    bx lr
10 entry:
11   %c = icmp eq <4 x i32> %src, %srcb
12   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
13   ret <4 x i32> %s
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
21 ; CHECK-NEXT:    bx lr
22 entry:
23   %c = icmp ne <4 x i32> %src, %srcb
24   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
25   ret <4 x i32> %s
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
33 ; CHECK-NEXT:    bx lr
34 entry:
35   %c = icmp sgt <4 x i32> %src, %srcb
36   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
37   ret <4 x i32> %s
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
45 ; CHECK-NEXT:    bx lr
46 entry:
47   %c = icmp sge <4 x i32> %src, %srcb
48   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
49   ret <4 x i32> %s
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
57 ; CHECK-NEXT:    bx lr
58 entry:
59   %c = icmp slt <4 x i32> %src, %srcb
60   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
61   ret <4 x i32> %s
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
69 ; CHECK-NEXT:    bx lr
70 entry:
71   %c = icmp sle <4 x i32> %src, %srcb
72   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
73   ret <4 x i32> %s
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
81 ; CHECK-NEXT:    bx lr
82 entry:
83   %c = icmp ugt <4 x i32> %src, %srcb
84   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
85   ret <4 x i32> %s
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
93 ; CHECK-NEXT:    bx lr
94 entry:
95   %c = icmp uge <4 x i32> %src, %srcb
96   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
97   ret <4 x i32> %s
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
105 ; CHECK-NEXT:    bx lr
106 entry:
107   %c = icmp ult <4 x i32> %src, %srcb
108   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
109   ret <4 x i32> %s
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
117 ; CHECK-NEXT:    bx lr
118 entry:
119   %c = icmp ule <4 x i32> %src, %srcb
120   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
121   ret <4 x i32> %s
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
130 ; CHECK-NEXT:    bx lr
131 entry:
132   %c = icmp eq <8 x i16> %src, %srcb
133   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
134   ret <8 x i16> %s
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
142 ; CHECK-NEXT:    bx lr
143 entry:
144   %c = icmp ne <8 x i16> %src, %srcb
145   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
146   ret <8 x i16> %s
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
154 ; CHECK-NEXT:    bx lr
155 entry:
156   %c = icmp sgt <8 x i16> %src, %srcb
157   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
158   ret <8 x i16> %s
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
166 ; CHECK-NEXT:    bx lr
167 entry:
168   %c = icmp sge <8 x i16> %src, %srcb
169   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
170   ret <8 x i16> %s
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
178 ; CHECK-NEXT:    bx lr
179 entry:
180   %c = icmp slt <8 x i16> %src, %srcb
181   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
182   ret <8 x i16> %s
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
190 ; CHECK-NEXT:    bx lr
191 entry:
192   %c = icmp sle <8 x i16> %src, %srcb
193   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
194   ret <8 x i16> %s
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
202 ; CHECK-NEXT:    bx lr
203 entry:
204   %c = icmp ugt <8 x i16> %src, %srcb
205   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
206   ret <8 x i16> %s
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
214 ; CHECK-NEXT:    bx lr
215 entry:
216   %c = icmp uge <8 x i16> %src, %srcb
217   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
218   ret <8 x i16> %s
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
226 ; CHECK-NEXT:    bx lr
227 entry:
228   %c = icmp ult <8 x i16> %src, %srcb
229   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
230   ret <8 x i16> %s
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
238 ; CHECK-NEXT:    bx lr
239 entry:
240   %c = icmp ule <8 x i16> %src, %srcb
241   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
242   ret <8 x i16> %s
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
251 ; CHECK-NEXT:    bx lr
252 entry:
253   %c = icmp eq <16 x i8> %src, %srcb
254   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
255   ret <16 x i8> %s
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
263 ; CHECK-NEXT:    bx lr
264 entry:
265   %c = icmp ne <16 x i8> %src, %srcb
266   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
267   ret <16 x i8> %s
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
275 ; CHECK-NEXT:    bx lr
276 entry:
277   %c = icmp sgt <16 x i8> %src, %srcb
278   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
279   ret <16 x i8> %s
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
287 ; CHECK-NEXT:    bx lr
288 entry:
289   %c = icmp sge <16 x i8> %src, %srcb
290   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
291   ret <16 x i8> %s
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
299 ; CHECK-NEXT:    bx lr
300 entry:
301   %c = icmp slt <16 x i8> %src, %srcb
302   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
303   ret <16 x i8> %s
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
311 ; CHECK-NEXT:    bx lr
312 entry:
313   %c = icmp sle <16 x i8> %src, %srcb
314   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
315   ret <16 x i8> %s
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
323 ; CHECK-NEXT:    bx lr
324 entry:
325   %c = icmp ugt <16 x i8> %src, %srcb
326   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
327   ret <16 x i8> %s
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
335 ; CHECK-NEXT:    bx lr
336 entry:
337   %c = icmp uge <16 x i8> %src, %srcb
338   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
339   ret <16 x i8> %s
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
347 ; CHECK-NEXT:    bx lr
348 entry:
349   %c = icmp ult <16 x i8> %src, %srcb
350   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
351   ret <16 x i8> %s
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
359 ; CHECK-NEXT:    bx lr
360 entry:
361   %c = icmp ule <16 x i8> %src, %srcb
362   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
363   ret <16 x i8> %s
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
383 ; CHECK-NEXT:    it ne
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
394 ; CHECK-NEXT:    it ne
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}
402 ; CHECK-NEXT:    bx lr
403 entry:
404   %c = icmp eq <2 x i64> %src, %srcb
405   %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b
406   ret <2 x i64> %s
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
425 ; CHECK-NEXT:    it ne
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
436 ; CHECK-NEXT:    it ne
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}
444 ; CHECK-NEXT:    bx lr
445 entry:
446   %c = icmp eq <2 x i64> %src, %srcb
447   %s = select <2 x i1> %c, <2 x i32> %a, <2 x i32> %b
448   ret <2 x i32> %s
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:
453 ; CHECK:       @ %bb.0:
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
467 ; CHECK-NEXT:    it ne
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
475 ; CHECK-NEXT:    it ne
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
485 ; CHECK-NEXT:    it lt
486 ; CHECK-NEXT:    movlt r1, #1
487 ; CHECK-NEXT:    cmp r1, #0
488 ; CHECK-NEXT:    it ne
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
496 ; CHECK-NEXT:    it lt
497 ; CHECK-NEXT:    movlt r3, #1
498 ; CHECK-NEXT:    cmp r3, #0
499 ; CHECK-NEXT:    it ne
500 ; CHECK-NEXT:    movne.w r3, #-1
501 ; CHECK-NEXT:    cmp r0, #0
502 ; CHECK-NEXT:    it ne
503 ; CHECK-NEXT:    movne r0, #1
504 ; CHECK-NEXT:    cmp r0, #0
505 ; CHECK-NEXT:    it ne
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
511 ; CHECK-NEXT:    it ne
512 ; CHECK-NEXT:    movne r1, #1
513 ; CHECK-NEXT:    cmp r1, #0
514 ; CHECK-NEXT:    it ne
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
521 ; CHECK-NEXT:    it ne
522 ; CHECK-NEXT:    movne r0, #1
523 ; CHECK-NEXT:    cmp r0, #0
524 ; CHECK-NEXT:    it ne
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
530 ; CHECK-NEXT:    it ne
531 ; CHECK-NEXT:    movne r0, #1
532 ; CHECK-NEXT:    cmp r0, #0
533 ; CHECK-NEXT:    it ne
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
552   ret <2 x i32> %a11