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> @cmpeqz_v4i1(<4 x i32> %a, <4 x i32> %b) {
5 ; CHECK-LABEL: cmpeqz_v4i1:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vcmp.i32 eq, q1, zr
8 ; CHECK-NEXT: vmrs r0, p0
9 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
10 ; CHECK-NEXT: vmrs r1, p0
11 ; CHECK-NEXT: orrs r0, r1
12 ; CHECK-NEXT: vmsr p0, r0
13 ; CHECK-NEXT: vpsel q0, q0, q1
16 %c1 = icmp eq <4 x i32> %a, zeroinitializer
17 %c2 = icmp eq <4 x i32> %b, zeroinitializer
18 %o = or <4 x i1> %c1, %c2
19 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
23 define arm_aapcs_vfpcc <4 x i32> @cmpnez_v4i1(<4 x i32> %a, <4 x i32> %b) {
24 ; CHECK-LABEL: cmpnez_v4i1:
25 ; CHECK: @ %bb.0: @ %entry
26 ; CHECK-NEXT: vcmp.i32 ne, q1, zr
27 ; CHECK-NEXT: vmrs r0, p0
28 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
29 ; CHECK-NEXT: vmrs r1, p0
30 ; CHECK-NEXT: orrs r0, r1
31 ; CHECK-NEXT: vmsr p0, r0
32 ; CHECK-NEXT: vpsel q0, q0, q1
35 %c1 = icmp eq <4 x i32> %a, zeroinitializer
36 %c2 = icmp ne <4 x i32> %b, zeroinitializer
37 %o = or <4 x i1> %c1, %c2
38 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
42 define arm_aapcs_vfpcc <4 x i32> @cmpsltz_v4i1(<4 x i32> %a, <4 x i32> %b) {
43 ; CHECK-LABEL: cmpsltz_v4i1:
44 ; CHECK: @ %bb.0: @ %entry
45 ; CHECK-NEXT: vcmp.s32 lt, q1, zr
46 ; CHECK-NEXT: vmrs r0, p0
47 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
48 ; CHECK-NEXT: vmrs r1, p0
49 ; CHECK-NEXT: orrs r0, r1
50 ; CHECK-NEXT: vmsr p0, r0
51 ; CHECK-NEXT: vpsel q0, q0, q1
54 %c1 = icmp eq <4 x i32> %a, zeroinitializer
55 %c2 = icmp slt <4 x i32> %b, zeroinitializer
56 %o = or <4 x i1> %c1, %c2
57 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
61 define arm_aapcs_vfpcc <4 x i32> @cmpsgtz_v4i1(<4 x i32> %a, <4 x i32> %b) {
62 ; CHECK-LABEL: cmpsgtz_v4i1:
63 ; CHECK: @ %bb.0: @ %entry
64 ; CHECK-NEXT: vcmp.s32 gt, q1, zr
65 ; CHECK-NEXT: vmrs r0, p0
66 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
67 ; CHECK-NEXT: vmrs r1, p0
68 ; CHECK-NEXT: orrs r0, r1
69 ; CHECK-NEXT: vmsr p0, r0
70 ; CHECK-NEXT: vpsel q0, q0, q1
73 %c1 = icmp eq <4 x i32> %a, zeroinitializer
74 %c2 = icmp sgt <4 x i32> %b, zeroinitializer
75 %o = or <4 x i1> %c1, %c2
76 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
80 define arm_aapcs_vfpcc <4 x i32> @cmpslez_v4i1(<4 x i32> %a, <4 x i32> %b) {
81 ; CHECK-LABEL: cmpslez_v4i1:
82 ; CHECK: @ %bb.0: @ %entry
83 ; CHECK-NEXT: vcmp.s32 le, q1, zr
84 ; CHECK-NEXT: vmrs r0, p0
85 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
86 ; CHECK-NEXT: vmrs r1, p0
87 ; CHECK-NEXT: orrs r0, r1
88 ; CHECK-NEXT: vmsr p0, r0
89 ; CHECK-NEXT: vpsel q0, q0, q1
92 %c1 = icmp eq <4 x i32> %a, zeroinitializer
93 %c2 = icmp sle <4 x i32> %b, zeroinitializer
94 %o = or <4 x i1> %c1, %c2
95 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
99 define arm_aapcs_vfpcc <4 x i32> @cmpsgez_v4i1(<4 x i32> %a, <4 x i32> %b) {
100 ; CHECK-LABEL: cmpsgez_v4i1:
101 ; CHECK: @ %bb.0: @ %entry
102 ; CHECK-NEXT: vcmp.s32 ge, q1, zr
103 ; CHECK-NEXT: vmrs r0, p0
104 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
105 ; CHECK-NEXT: vmrs r1, p0
106 ; CHECK-NEXT: orrs r0, r1
107 ; CHECK-NEXT: vmsr p0, r0
108 ; CHECK-NEXT: vpsel q0, q0, q1
111 %c1 = icmp eq <4 x i32> %a, zeroinitializer
112 %c2 = icmp sge <4 x i32> %b, zeroinitializer
113 %o = or <4 x i1> %c1, %c2
114 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
118 define arm_aapcs_vfpcc <4 x i32> @cmpultz_v4i1(<4 x i32> %a, <4 x i32> %b) {
119 ; CHECK-LABEL: cmpultz_v4i1:
120 ; CHECK: @ %bb.0: @ %entry
121 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
122 ; CHECK-NEXT: vpsel q0, q0, q1
125 %c1 = icmp eq <4 x i32> %a, zeroinitializer
126 %c2 = icmp ult <4 x i32> %b, zeroinitializer
127 %o = or <4 x i1> %c1, %c2
128 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
132 define arm_aapcs_vfpcc <4 x i32> @cmpugtz_v4i1(<4 x i32> %a, <4 x i32> %b) {
133 ; CHECK-LABEL: cmpugtz_v4i1:
134 ; CHECK: @ %bb.0: @ %entry
135 ; CHECK-NEXT: vcmp.i32 ne, q1, zr
136 ; CHECK-NEXT: vmrs r0, p0
137 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
138 ; CHECK-NEXT: vmrs r1, p0
139 ; CHECK-NEXT: orrs r0, r1
140 ; CHECK-NEXT: vmsr p0, r0
141 ; CHECK-NEXT: vpsel q0, q0, q1
144 %c1 = icmp eq <4 x i32> %a, zeroinitializer
145 %c2 = icmp ugt <4 x i32> %b, zeroinitializer
146 %o = or <4 x i1> %c1, %c2
147 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
151 define arm_aapcs_vfpcc <4 x i32> @cmpulez_v4i1(<4 x i32> %a, <4 x i32> %b) {
152 ; CHECK-LABEL: cmpulez_v4i1:
153 ; CHECK: @ %bb.0: @ %entry
154 ; CHECK-NEXT: vmov.i32 q2, #0x0
155 ; CHECK-NEXT: vcmp.u32 cs, q2, q1
156 ; CHECK-NEXT: vmrs r0, p0
157 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
158 ; CHECK-NEXT: vmrs r1, p0
159 ; CHECK-NEXT: orrs r0, r1
160 ; CHECK-NEXT: vmsr p0, r0
161 ; CHECK-NEXT: vpsel q0, q0, q1
164 %c1 = icmp eq <4 x i32> %a, zeroinitializer
165 %c2 = icmp ule <4 x i32> %b, zeroinitializer
166 %o = or <4 x i1> %c1, %c2
167 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
171 define arm_aapcs_vfpcc <4 x i32> @cmpugez_v4i1(<4 x i32> %a, <4 x i32> %b) {
172 ; CHECK-LABEL: cmpugez_v4i1:
173 ; CHECK: @ %bb.0: @ %entry
176 %c1 = icmp eq <4 x i32> %a, zeroinitializer
177 %c2 = icmp uge <4 x i32> %b, zeroinitializer
178 %o = or <4 x i1> %c1, %c2
179 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
185 define arm_aapcs_vfpcc <4 x i32> @cmpeq_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
186 ; CHECK-LABEL: cmpeq_v4i1:
187 ; CHECK: @ %bb.0: @ %entry
188 ; CHECK-NEXT: vcmp.i32 eq, q1, q2
189 ; CHECK-NEXT: vmrs r0, p0
190 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
191 ; CHECK-NEXT: vmrs r1, p0
192 ; CHECK-NEXT: orrs r0, r1
193 ; CHECK-NEXT: vmsr p0, r0
194 ; CHECK-NEXT: vpsel q0, q0, q1
197 %c1 = icmp eq <4 x i32> %a, zeroinitializer
198 %c2 = icmp eq <4 x i32> %b, %c
199 %o = or <4 x i1> %c1, %c2
200 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
204 define arm_aapcs_vfpcc <4 x i32> @cmpne_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
205 ; CHECK-LABEL: cmpne_v4i1:
206 ; CHECK: @ %bb.0: @ %entry
207 ; CHECK-NEXT: vcmp.i32 ne, q1, q2
208 ; CHECK-NEXT: vmrs r0, p0
209 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
210 ; CHECK-NEXT: vmrs r1, p0
211 ; CHECK-NEXT: orrs r0, r1
212 ; CHECK-NEXT: vmsr p0, r0
213 ; CHECK-NEXT: vpsel q0, q0, q1
216 %c1 = icmp eq <4 x i32> %a, zeroinitializer
217 %c2 = icmp ne <4 x i32> %b, %c
218 %o = or <4 x i1> %c1, %c2
219 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
223 define arm_aapcs_vfpcc <4 x i32> @cmpslt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
224 ; CHECK-LABEL: cmpslt_v4i1:
225 ; CHECK: @ %bb.0: @ %entry
226 ; CHECK-NEXT: vcmp.s32 gt, q2, q1
227 ; CHECK-NEXT: vmrs r0, p0
228 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
229 ; CHECK-NEXT: vmrs r1, p0
230 ; CHECK-NEXT: orrs r0, r1
231 ; CHECK-NEXT: vmsr p0, r0
232 ; CHECK-NEXT: vpsel q0, q0, q1
235 %c1 = icmp eq <4 x i32> %a, zeroinitializer
236 %c2 = icmp slt <4 x i32> %b, %c
237 %o = or <4 x i1> %c1, %c2
238 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
242 define arm_aapcs_vfpcc <4 x i32> @cmpsgt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
243 ; CHECK-LABEL: cmpsgt_v4i1:
244 ; CHECK: @ %bb.0: @ %entry
245 ; CHECK-NEXT: vcmp.s32 gt, q1, q2
246 ; CHECK-NEXT: vmrs r0, p0
247 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
248 ; CHECK-NEXT: vmrs r1, p0
249 ; CHECK-NEXT: orrs r0, r1
250 ; CHECK-NEXT: vmsr p0, r0
251 ; CHECK-NEXT: vpsel q0, q0, q1
254 %c1 = icmp eq <4 x i32> %a, zeroinitializer
255 %c2 = icmp sgt <4 x i32> %b, %c
256 %o = or <4 x i1> %c1, %c2
257 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
261 define arm_aapcs_vfpcc <4 x i32> @cmpsle_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
262 ; CHECK-LABEL: cmpsle_v4i1:
263 ; CHECK: @ %bb.0: @ %entry
264 ; CHECK-NEXT: vcmp.s32 ge, q2, q1
265 ; CHECK-NEXT: vmrs r0, p0
266 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
267 ; CHECK-NEXT: vmrs r1, p0
268 ; CHECK-NEXT: orrs r0, r1
269 ; CHECK-NEXT: vmsr p0, r0
270 ; CHECK-NEXT: vpsel q0, q0, q1
273 %c1 = icmp eq <4 x i32> %a, zeroinitializer
274 %c2 = icmp sle <4 x i32> %b, %c
275 %o = or <4 x i1> %c1, %c2
276 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
280 define arm_aapcs_vfpcc <4 x i32> @cmpsge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
281 ; CHECK-LABEL: cmpsge_v4i1:
282 ; CHECK: @ %bb.0: @ %entry
283 ; CHECK-NEXT: vcmp.s32 ge, q1, q2
284 ; CHECK-NEXT: vmrs r0, p0
285 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
286 ; CHECK-NEXT: vmrs r1, p0
287 ; CHECK-NEXT: orrs r0, r1
288 ; CHECK-NEXT: vmsr p0, r0
289 ; CHECK-NEXT: vpsel q0, q0, q1
292 %c1 = icmp eq <4 x i32> %a, zeroinitializer
293 %c2 = icmp sge <4 x i32> %b, %c
294 %o = or <4 x i1> %c1, %c2
295 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
299 define arm_aapcs_vfpcc <4 x i32> @cmpult_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
300 ; CHECK-LABEL: cmpult_v4i1:
301 ; CHECK: @ %bb.0: @ %entry
302 ; CHECK-NEXT: vcmp.u32 hi, q2, q1
303 ; CHECK-NEXT: vmrs r0, p0
304 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
305 ; CHECK-NEXT: vmrs r1, p0
306 ; CHECK-NEXT: orrs r0, r1
307 ; CHECK-NEXT: vmsr p0, r0
308 ; CHECK-NEXT: vpsel q0, q0, q1
311 %c1 = icmp eq <4 x i32> %a, zeroinitializer
312 %c2 = icmp ult <4 x i32> %b, %c
313 %o = or <4 x i1> %c1, %c2
314 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
318 define arm_aapcs_vfpcc <4 x i32> @cmpugt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
319 ; CHECK-LABEL: cmpugt_v4i1:
320 ; CHECK: @ %bb.0: @ %entry
321 ; CHECK-NEXT: vcmp.u32 hi, q1, q2
322 ; CHECK-NEXT: vmrs r0, p0
323 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
324 ; CHECK-NEXT: vmrs r1, p0
325 ; CHECK-NEXT: orrs r0, r1
326 ; CHECK-NEXT: vmsr p0, r0
327 ; CHECK-NEXT: vpsel q0, q0, q1
330 %c1 = icmp eq <4 x i32> %a, zeroinitializer
331 %c2 = icmp ugt <4 x i32> %b, %c
332 %o = or <4 x i1> %c1, %c2
333 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
337 define arm_aapcs_vfpcc <4 x i32> @cmpule_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
338 ; CHECK-LABEL: cmpule_v4i1:
339 ; CHECK: @ %bb.0: @ %entry
340 ; CHECK-NEXT: vcmp.u32 cs, q2, q1
341 ; CHECK-NEXT: vmrs r0, p0
342 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
343 ; CHECK-NEXT: vmrs r1, p0
344 ; CHECK-NEXT: orrs r0, r1
345 ; CHECK-NEXT: vmsr p0, r0
346 ; CHECK-NEXT: vpsel q0, q0, q1
349 %c1 = icmp eq <4 x i32> %a, zeroinitializer
350 %c2 = icmp ule <4 x i32> %b, %c
351 %o = or <4 x i1> %c1, %c2
352 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
356 define arm_aapcs_vfpcc <4 x i32> @cmpuge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
357 ; CHECK-LABEL: cmpuge_v4i1:
358 ; CHECK: @ %bb.0: @ %entry
359 ; CHECK-NEXT: vcmp.u32 cs, q1, q2
360 ; CHECK-NEXT: vmrs r0, p0
361 ; CHECK-NEXT: vcmp.i32 eq, q0, zr
362 ; CHECK-NEXT: vmrs r1, p0
363 ; CHECK-NEXT: orrs r0, r1
364 ; CHECK-NEXT: vmsr p0, r0
365 ; CHECK-NEXT: vpsel q0, q0, q1
368 %c1 = icmp eq <4 x i32> %a, zeroinitializer
369 %c2 = icmp uge <4 x i32> %b, %c
370 %o = or <4 x i1> %c1, %c2
371 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
378 define arm_aapcs_vfpcc <8 x i16> @cmpeqz_v8i1(<8 x i16> %a, <8 x i16> %b) {
379 ; CHECK-LABEL: cmpeqz_v8i1:
380 ; CHECK: @ %bb.0: @ %entry
381 ; CHECK-NEXT: vcmp.i16 eq, q1, zr
382 ; CHECK-NEXT: vmrs r0, p0
383 ; CHECK-NEXT: vcmp.i16 eq, q0, zr
384 ; CHECK-NEXT: vmrs r1, p0
385 ; CHECK-NEXT: orrs r0, r1
386 ; CHECK-NEXT: vmsr p0, r0
387 ; CHECK-NEXT: vpsel q0, q0, q1
390 %c1 = icmp eq <8 x i16> %a, zeroinitializer
391 %c2 = icmp eq <8 x i16> %b, zeroinitializer
392 %o = or <8 x i1> %c1, %c2
393 %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
397 define arm_aapcs_vfpcc <8 x i16> @cmpeq_v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
398 ; CHECK-LABEL: cmpeq_v8i1:
399 ; CHECK: @ %bb.0: @ %entry
400 ; CHECK-NEXT: vcmp.i16 eq, q1, q2
401 ; CHECK-NEXT: vmrs r0, p0
402 ; CHECK-NEXT: vcmp.i16 eq, q0, zr
403 ; CHECK-NEXT: vmrs r1, p0
404 ; CHECK-NEXT: orrs r0, r1
405 ; CHECK-NEXT: vmsr p0, r0
406 ; CHECK-NEXT: vpsel q0, q0, q1
409 %c1 = icmp eq <8 x i16> %a, zeroinitializer
410 %c2 = icmp eq <8 x i16> %b, %c
411 %o = or <8 x i1> %c1, %c2
412 %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
417 define arm_aapcs_vfpcc <16 x i8> @cmpeqz_v16i1(<16 x i8> %a, <16 x i8> %b) {
418 ; CHECK-LABEL: cmpeqz_v16i1:
419 ; CHECK: @ %bb.0: @ %entry
420 ; CHECK-NEXT: vcmp.i8 eq, q1, zr
421 ; CHECK-NEXT: vmrs r0, p0
422 ; CHECK-NEXT: vcmp.i8 eq, q0, zr
423 ; CHECK-NEXT: vmrs r1, p0
424 ; CHECK-NEXT: orrs r0, r1
425 ; CHECK-NEXT: vmsr p0, r0
426 ; CHECK-NEXT: vpsel q0, q0, q1
429 %c1 = icmp eq <16 x i8> %a, zeroinitializer
430 %c2 = icmp eq <16 x i8> %b, zeroinitializer
431 %o = or <16 x i1> %c1, %c2
432 %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
436 define arm_aapcs_vfpcc <16 x i8> @cmpeq_v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
437 ; CHECK-LABEL: cmpeq_v16i1:
438 ; CHECK: @ %bb.0: @ %entry
439 ; CHECK-NEXT: vcmp.i8 eq, q1, q2
440 ; CHECK-NEXT: vmrs r0, p0
441 ; CHECK-NEXT: vcmp.i8 eq, q0, zr
442 ; CHECK-NEXT: vmrs r1, p0
443 ; CHECK-NEXT: orrs r0, r1
444 ; CHECK-NEXT: vmsr p0, r0
445 ; CHECK-NEXT: vpsel q0, q0, q1
448 %c1 = icmp eq <16 x i8> %a, zeroinitializer
449 %c2 = icmp eq <16 x i8> %b, %c
450 %o = or <16 x i1> %c1, %c2
451 %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
456 define arm_aapcs_vfpcc <2 x i64> @cmpeqz_v2i1(<2 x i64> %a, <2 x i64> %b) {
457 ; CHECK-LABEL: cmpeqz_v2i1:
458 ; CHECK: @ %bb.0: @ %entry
459 ; CHECK-NEXT: vmov r0, s5
460 ; CHECK-NEXT: vmov r1, s4
461 ; CHECK-NEXT: orrs r0, r1
462 ; CHECK-NEXT: vmov r1, s6
463 ; CHECK-NEXT: clz r0, r0
464 ; CHECK-NEXT: lsrs r0, r0, #5
466 ; CHECK-NEXT: movne.w r0, #-1
467 ; CHECK-NEXT: vmov.32 q2[0], r0
468 ; CHECK-NEXT: vmov.32 q2[1], r0
469 ; CHECK-NEXT: vmov r0, s7
470 ; CHECK-NEXT: orrs r0, r1
471 ; CHECK-NEXT: vmov r1, s0
472 ; CHECK-NEXT: clz r0, r0
473 ; CHECK-NEXT: lsrs r0, r0, #5
475 ; CHECK-NEXT: movne.w r0, #-1
476 ; CHECK-NEXT: vmov.32 q2[2], r0
477 ; CHECK-NEXT: vmov.32 q2[3], r0
478 ; CHECK-NEXT: vmov r0, s1
479 ; CHECK-NEXT: orrs r0, r1
480 ; CHECK-NEXT: vmov r1, s2
481 ; CHECK-NEXT: clz r0, r0
482 ; CHECK-NEXT: lsrs r0, r0, #5
484 ; CHECK-NEXT: movne.w r0, #-1
485 ; CHECK-NEXT: vmov.32 q3[0], r0
486 ; CHECK-NEXT: vmov.32 q3[1], r0
487 ; CHECK-NEXT: vmov r0, s3
488 ; CHECK-NEXT: orrs r0, r1
489 ; CHECK-NEXT: clz r0, r0
490 ; CHECK-NEXT: lsrs r0, r0, #5
492 ; CHECK-NEXT: movne.w r0, #-1
493 ; CHECK-NEXT: vmov.32 q3[2], r0
494 ; CHECK-NEXT: vmov.32 q3[3], r0
495 ; CHECK-NEXT: vorr q2, q3, q2
496 ; CHECK-NEXT: vbic q1, q1, q2
497 ; CHECK-NEXT: vand q0, q0, q2
498 ; CHECK-NEXT: vorr q0, q0, q1
501 %c1 = icmp eq <2 x i64> %a, zeroinitializer
502 %c2 = icmp eq <2 x i64> %b, zeroinitializer
503 %o = or <2 x i1> %c1, %c2
504 %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b
508 define arm_aapcs_vfpcc <2 x i64> @cmpeq_v2i1(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {
509 ; CHECK-LABEL: cmpeq_v2i1:
510 ; CHECK: @ %bb.0: @ %entry
511 ; CHECK-NEXT: vmov r0, s9
512 ; CHECK-NEXT: vmov r1, s5
513 ; CHECK-NEXT: vmov r2, s4
514 ; CHECK-NEXT: eors r0, r1
515 ; CHECK-NEXT: vmov r1, s8
516 ; CHECK-NEXT: eors r1, r2
517 ; CHECK-NEXT: vmov r2, s6
518 ; CHECK-NEXT: orrs r0, r1
519 ; CHECK-NEXT: vmov r1, s7
520 ; CHECK-NEXT: clz r0, r0
521 ; CHECK-NEXT: lsrs r0, r0, #5
523 ; CHECK-NEXT: movne.w r0, #-1
524 ; CHECK-NEXT: vmov.32 q3[0], r0
525 ; CHECK-NEXT: vmov.32 q3[1], r0
526 ; CHECK-NEXT: vmov r0, s11
527 ; CHECK-NEXT: eors r0, r1
528 ; CHECK-NEXT: vmov r1, s10
529 ; CHECK-NEXT: eors r1, r2
530 ; CHECK-NEXT: orrs r0, r1
531 ; CHECK-NEXT: vmov r1, s0
532 ; CHECK-NEXT: clz r0, r0
533 ; CHECK-NEXT: lsrs r0, r0, #5
535 ; CHECK-NEXT: movne.w r0, #-1
536 ; CHECK-NEXT: vmov.32 q3[2], r0
537 ; CHECK-NEXT: vmov.32 q3[3], r0
538 ; CHECK-NEXT: vmov r0, s1
539 ; CHECK-NEXT: orrs r0, r1
540 ; CHECK-NEXT: vmov r1, s2
541 ; CHECK-NEXT: clz r0, r0
542 ; CHECK-NEXT: lsrs r0, r0, #5
544 ; CHECK-NEXT: movne.w r0, #-1
545 ; CHECK-NEXT: vmov.32 q2[0], r0
546 ; CHECK-NEXT: vmov.32 q2[1], r0
547 ; CHECK-NEXT: vmov r0, s3
548 ; CHECK-NEXT: orrs r0, r1
549 ; CHECK-NEXT: clz r0, r0
550 ; CHECK-NEXT: lsrs r0, r0, #5
552 ; CHECK-NEXT: movne.w r0, #-1
553 ; CHECK-NEXT: vmov.32 q2[2], r0
554 ; CHECK-NEXT: vmov.32 q2[3], r0
555 ; CHECK-NEXT: vorr q2, q2, q3
556 ; CHECK-NEXT: vbic q1, q1, q2
557 ; CHECK-NEXT: vand q0, q0, q2
558 ; CHECK-NEXT: vorr q0, q0, q1
561 %c1 = icmp eq <2 x i64> %a, zeroinitializer
562 %c2 = icmp eq <2 x i64> %b, %c
563 %o = or <2 x i1> %c1, %c2
564 %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b