[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-pred-xor.ll
blobf4a0d5120305a11389ea6d8c54223d68ad2d22f7
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
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:    eors r0, r1
12 ; CHECK-NEXT:    vmsr p0, r0
13 ; CHECK-NEXT:    vpsel q0, q0, q1
14 ; CHECK-NEXT:    bx lr
15 entry:
16   %c1 = icmp eq <4 x i32> %a, zeroinitializer
17   %c2 = icmp eq <4 x i32> %b, zeroinitializer
18   %o = xor <4 x i1> %c1, %c2
19   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
20   ret <4 x i32> %s
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:    eors r0, r1
31 ; CHECK-NEXT:    vmsr p0, r0
32 ; CHECK-NEXT:    vpsel q0, q0, q1
33 ; CHECK-NEXT:    bx lr
34 entry:
35   %c1 = icmp eq <4 x i32> %a, zeroinitializer
36   %c2 = icmp ne <4 x i32> %b, zeroinitializer
37   %o = xor <4 x i1> %c1, %c2
38   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
39   ret <4 x i32> %s
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:    eors r0, r1
50 ; CHECK-NEXT:    vmsr p0, r0
51 ; CHECK-NEXT:    vpsel q0, q0, q1
52 ; CHECK-NEXT:    bx lr
53 entry:
54   %c1 = icmp eq <4 x i32> %a, zeroinitializer
55   %c2 = icmp slt <4 x i32> %b, zeroinitializer
56   %o = xor <4 x i1> %c1, %c2
57   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
58   ret <4 x i32> %s
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:    eors r0, r1
69 ; CHECK-NEXT:    vmsr p0, r0
70 ; CHECK-NEXT:    vpsel q0, q0, q1
71 ; CHECK-NEXT:    bx lr
72 entry:
73   %c1 = icmp eq <4 x i32> %a, zeroinitializer
74   %c2 = icmp sgt <4 x i32> %b, zeroinitializer
75   %o = xor <4 x i1> %c1, %c2
76   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
77   ret <4 x i32> %s
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:    eors r0, r1
88 ; CHECK-NEXT:    vmsr p0, r0
89 ; CHECK-NEXT:    vpsel q0, q0, q1
90 ; CHECK-NEXT:    bx lr
91 entry:
92   %c1 = icmp eq <4 x i32> %a, zeroinitializer
93   %c2 = icmp sle <4 x i32> %b, zeroinitializer
94   %o = xor <4 x i1> %c1, %c2
95   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
96   ret <4 x i32> %s
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:    eors r0, r1
107 ; CHECK-NEXT:    vmsr p0, r0
108 ; CHECK-NEXT:    vpsel q0, q0, q1
109 ; CHECK-NEXT:    bx lr
110 entry:
111   %c1 = icmp eq <4 x i32> %a, zeroinitializer
112   %c2 = icmp sge <4 x i32> %b, zeroinitializer
113   %o = xor <4 x i1> %c1, %c2
114   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
115   ret <4 x i32> %s
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
123 ; CHECK-NEXT:    bx lr
124 entry:
125   %c1 = icmp eq <4 x i32> %a, zeroinitializer
126   %c2 = icmp ult <4 x i32> %b, zeroinitializer
127   %o = xor <4 x i1> %c1, %c2
128   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
129   ret <4 x i32> %s
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:    eors r0, r1
140 ; CHECK-NEXT:    vmsr p0, r0
141 ; CHECK-NEXT:    vpsel q0, q0, q1
142 ; CHECK-NEXT:    bx lr
143 entry:
144   %c1 = icmp eq <4 x i32> %a, zeroinitializer
145   %c2 = icmp ugt <4 x i32> %b, zeroinitializer
146   %o = xor <4 x i1> %c1, %c2
147   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
148   ret <4 x i32> %s
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:    eors r0, r1
160 ; CHECK-NEXT:    vmsr p0, r0
161 ; CHECK-NEXT:    vpsel q0, q0, q1
162 ; CHECK-NEXT:    bx lr
163 entry:
164   %c1 = icmp eq <4 x i32> %a, zeroinitializer
165   %c2 = icmp ule <4 x i32> %b, zeroinitializer
166   %o = xor <4 x i1> %c1, %c2
167   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
168   ret <4 x i32> %s
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
174 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
175 ; CHECK-NEXT:    vpsel q0, q1, q0
176 ; CHECK-NEXT:    bx lr
177 entry:
178   %c1 = icmp eq <4 x i32> %a, zeroinitializer
179   %c2 = icmp uge <4 x i32> %b, zeroinitializer
180   %o = xor <4 x i1> %c1, %c2
181   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
182   ret <4 x i32> %s
187 define arm_aapcs_vfpcc <4 x i32> @cmpeq_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
188 ; CHECK-LABEL: cmpeq_v4i1:
189 ; CHECK:       @ %bb.0: @ %entry
190 ; CHECK-NEXT:    vcmp.i32 eq, q1, q2
191 ; CHECK-NEXT:    vmrs r0, p0
192 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
193 ; CHECK-NEXT:    vmrs r1, p0
194 ; CHECK-NEXT:    eors r0, r1
195 ; CHECK-NEXT:    vmsr p0, r0
196 ; CHECK-NEXT:    vpsel q0, q0, q1
197 ; CHECK-NEXT:    bx lr
198 entry:
199   %c1 = icmp eq <4 x i32> %a, zeroinitializer
200   %c2 = icmp eq <4 x i32> %b, %c
201   %o = xor <4 x i1> %c1, %c2
202   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
203   ret <4 x i32> %s
206 define arm_aapcs_vfpcc <4 x i32> @cmpne_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
207 ; CHECK-LABEL: cmpne_v4i1:
208 ; CHECK:       @ %bb.0: @ %entry
209 ; CHECK-NEXT:    vcmp.i32 ne, q1, q2
210 ; CHECK-NEXT:    vmrs r0, p0
211 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
212 ; CHECK-NEXT:    vmrs r1, p0
213 ; CHECK-NEXT:    eors r0, r1
214 ; CHECK-NEXT:    vmsr p0, r0
215 ; CHECK-NEXT:    vpsel q0, q0, q1
216 ; CHECK-NEXT:    bx lr
217 entry:
218   %c1 = icmp eq <4 x i32> %a, zeroinitializer
219   %c2 = icmp ne <4 x i32> %b, %c
220   %o = xor <4 x i1> %c1, %c2
221   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
222   ret <4 x i32> %s
225 define arm_aapcs_vfpcc <4 x i32> @cmpslt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
226 ; CHECK-LABEL: cmpslt_v4i1:
227 ; CHECK:       @ %bb.0: @ %entry
228 ; CHECK-NEXT:    vcmp.s32 gt, q2, q1
229 ; CHECK-NEXT:    vmrs r0, p0
230 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
231 ; CHECK-NEXT:    vmrs r1, p0
232 ; CHECK-NEXT:    eors r0, r1
233 ; CHECK-NEXT:    vmsr p0, r0
234 ; CHECK-NEXT:    vpsel q0, q0, q1
235 ; CHECK-NEXT:    bx lr
236 entry:
237   %c1 = icmp eq <4 x i32> %a, zeroinitializer
238   %c2 = icmp slt <4 x i32> %b, %c
239   %o = xor <4 x i1> %c1, %c2
240   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
241   ret <4 x i32> %s
244 define arm_aapcs_vfpcc <4 x i32> @cmpsgt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
245 ; CHECK-LABEL: cmpsgt_v4i1:
246 ; CHECK:       @ %bb.0: @ %entry
247 ; CHECK-NEXT:    vcmp.s32 gt, q1, q2
248 ; CHECK-NEXT:    vmrs r0, p0
249 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
250 ; CHECK-NEXT:    vmrs r1, p0
251 ; CHECK-NEXT:    eors r0, r1
252 ; CHECK-NEXT:    vmsr p0, r0
253 ; CHECK-NEXT:    vpsel q0, q0, q1
254 ; CHECK-NEXT:    bx lr
255 entry:
256   %c1 = icmp eq <4 x i32> %a, zeroinitializer
257   %c2 = icmp sgt <4 x i32> %b, %c
258   %o = xor <4 x i1> %c1, %c2
259   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
260   ret <4 x i32> %s
263 define arm_aapcs_vfpcc <4 x i32> @cmpsle_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
264 ; CHECK-LABEL: cmpsle_v4i1:
265 ; CHECK:       @ %bb.0: @ %entry
266 ; CHECK-NEXT:    vcmp.s32 ge, q2, q1
267 ; CHECK-NEXT:    vmrs r0, p0
268 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
269 ; CHECK-NEXT:    vmrs r1, p0
270 ; CHECK-NEXT:    eors r0, r1
271 ; CHECK-NEXT:    vmsr p0, r0
272 ; CHECK-NEXT:    vpsel q0, q0, q1
273 ; CHECK-NEXT:    bx lr
274 entry:
275   %c1 = icmp eq <4 x i32> %a, zeroinitializer
276   %c2 = icmp sle <4 x i32> %b, %c
277   %o = xor <4 x i1> %c1, %c2
278   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
279   ret <4 x i32> %s
282 define arm_aapcs_vfpcc <4 x i32> @cmpsge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
283 ; CHECK-LABEL: cmpsge_v4i1:
284 ; CHECK:       @ %bb.0: @ %entry
285 ; CHECK-NEXT:    vcmp.s32 ge, q1, q2
286 ; CHECK-NEXT:    vmrs r0, p0
287 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
288 ; CHECK-NEXT:    vmrs r1, p0
289 ; CHECK-NEXT:    eors r0, r1
290 ; CHECK-NEXT:    vmsr p0, r0
291 ; CHECK-NEXT:    vpsel q0, q0, q1
292 ; CHECK-NEXT:    bx lr
293 entry:
294   %c1 = icmp eq <4 x i32> %a, zeroinitializer
295   %c2 = icmp sge <4 x i32> %b, %c
296   %o = xor <4 x i1> %c1, %c2
297   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
298   ret <4 x i32> %s
301 define arm_aapcs_vfpcc <4 x i32> @cmpult_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
302 ; CHECK-LABEL: cmpult_v4i1:
303 ; CHECK:       @ %bb.0: @ %entry
304 ; CHECK-NEXT:    vcmp.u32 hi, q2, q1
305 ; CHECK-NEXT:    vmrs r0, p0
306 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
307 ; CHECK-NEXT:    vmrs r1, p0
308 ; CHECK-NEXT:    eors r0, r1
309 ; CHECK-NEXT:    vmsr p0, r0
310 ; CHECK-NEXT:    vpsel q0, q0, q1
311 ; CHECK-NEXT:    bx lr
312 entry:
313   %c1 = icmp eq <4 x i32> %a, zeroinitializer
314   %c2 = icmp ult <4 x i32> %b, %c
315   %o = xor <4 x i1> %c1, %c2
316   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
317   ret <4 x i32> %s
320 define arm_aapcs_vfpcc <4 x i32> @cmpugt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
321 ; CHECK-LABEL: cmpugt_v4i1:
322 ; CHECK:       @ %bb.0: @ %entry
323 ; CHECK-NEXT:    vcmp.u32 hi, q1, q2
324 ; CHECK-NEXT:    vmrs r0, p0
325 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
326 ; CHECK-NEXT:    vmrs r1, p0
327 ; CHECK-NEXT:    eors r0, r1
328 ; CHECK-NEXT:    vmsr p0, r0
329 ; CHECK-NEXT:    vpsel q0, q0, q1
330 ; CHECK-NEXT:    bx lr
331 entry:
332   %c1 = icmp eq <4 x i32> %a, zeroinitializer
333   %c2 = icmp ugt <4 x i32> %b, %c
334   %o = xor <4 x i1> %c1, %c2
335   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
336   ret <4 x i32> %s
339 define arm_aapcs_vfpcc <4 x i32> @cmpule_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
340 ; CHECK-LABEL: cmpule_v4i1:
341 ; CHECK:       @ %bb.0: @ %entry
342 ; CHECK-NEXT:    vcmp.u32 cs, q2, q1
343 ; CHECK-NEXT:    vmrs r0, p0
344 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
345 ; CHECK-NEXT:    vmrs r1, p0
346 ; CHECK-NEXT:    eors r0, r1
347 ; CHECK-NEXT:    vmsr p0, r0
348 ; CHECK-NEXT:    vpsel q0, q0, q1
349 ; CHECK-NEXT:    bx lr
350 entry:
351   %c1 = icmp eq <4 x i32> %a, zeroinitializer
352   %c2 = icmp ule <4 x i32> %b, %c
353   %o = xor <4 x i1> %c1, %c2
354   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
355   ret <4 x i32> %s
358 define arm_aapcs_vfpcc <4 x i32> @cmpuge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
359 ; CHECK-LABEL: cmpuge_v4i1:
360 ; CHECK:       @ %bb.0: @ %entry
361 ; CHECK-NEXT:    vcmp.u32 cs, q1, q2
362 ; CHECK-NEXT:    vmrs r0, p0
363 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
364 ; CHECK-NEXT:    vmrs r1, p0
365 ; CHECK-NEXT:    eors r0, r1
366 ; CHECK-NEXT:    vmsr p0, r0
367 ; CHECK-NEXT:    vpsel q0, q0, q1
368 ; CHECK-NEXT:    bx lr
369 entry:
370   %c1 = icmp eq <4 x i32> %a, zeroinitializer
371   %c2 = icmp uge <4 x i32> %b, %c
372   %o = xor <4 x i1> %c1, %c2
373   %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
374   ret <4 x i32> %s
380 define arm_aapcs_vfpcc <8 x i16> @cmpeqz_v8i1(<8 x i16> %a, <8 x i16> %b) {
381 ; CHECK-LABEL: cmpeqz_v8i1:
382 ; CHECK:       @ %bb.0: @ %entry
383 ; CHECK-NEXT:    vcmp.i16 eq, q1, zr
384 ; CHECK-NEXT:    vmrs r0, p0
385 ; CHECK-NEXT:    vcmp.i16 eq, q0, zr
386 ; CHECK-NEXT:    vmrs r1, p0
387 ; CHECK-NEXT:    eors r0, r1
388 ; CHECK-NEXT:    vmsr p0, r0
389 ; CHECK-NEXT:    vpsel q0, q0, q1
390 ; CHECK-NEXT:    bx lr
391 entry:
392   %c1 = icmp eq <8 x i16> %a, zeroinitializer
393   %c2 = icmp eq <8 x i16> %b, zeroinitializer
394   %o = xor <8 x i1> %c1, %c2
395   %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
396   ret <8 x i16> %s
399 define arm_aapcs_vfpcc <8 x i16> @cmpeq_v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
400 ; CHECK-LABEL: cmpeq_v8i1:
401 ; CHECK:       @ %bb.0: @ %entry
402 ; CHECK-NEXT:    vcmp.i16 eq, q1, q2
403 ; CHECK-NEXT:    vmrs r0, p0
404 ; CHECK-NEXT:    vcmp.i16 eq, q0, zr
405 ; CHECK-NEXT:    vmrs r1, p0
406 ; CHECK-NEXT:    eors r0, r1
407 ; CHECK-NEXT:    vmsr p0, r0
408 ; CHECK-NEXT:    vpsel q0, q0, q1
409 ; CHECK-NEXT:    bx lr
410 entry:
411   %c1 = icmp eq <8 x i16> %a, zeroinitializer
412   %c2 = icmp eq <8 x i16> %b, %c
413   %o = xor <8 x i1> %c1, %c2
414   %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
415   ret <8 x i16> %s
419 define arm_aapcs_vfpcc <16 x i8> @cmpeqz_v16i1(<16 x i8> %a, <16 x i8> %b) {
420 ; CHECK-LABEL: cmpeqz_v16i1:
421 ; CHECK:       @ %bb.0: @ %entry
422 ; CHECK-NEXT:    vcmp.i8 eq, q1, zr
423 ; CHECK-NEXT:    vmrs r0, p0
424 ; CHECK-NEXT:    vcmp.i8 eq, q0, zr
425 ; CHECK-NEXT:    vmrs r1, p0
426 ; CHECK-NEXT:    eors r0, r1
427 ; CHECK-NEXT:    vmsr p0, r0
428 ; CHECK-NEXT:    vpsel q0, q0, q1
429 ; CHECK-NEXT:    bx lr
430 entry:
431   %c1 = icmp eq <16 x i8> %a, zeroinitializer
432   %c2 = icmp eq <16 x i8> %b, zeroinitializer
433   %o = xor <16 x i1> %c1, %c2
434   %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
435   ret <16 x i8> %s
438 define arm_aapcs_vfpcc <16 x i8> @cmpeq_v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
439 ; CHECK-LABEL: cmpeq_v16i1:
440 ; CHECK:       @ %bb.0: @ %entry
441 ; CHECK-NEXT:    vcmp.i8 eq, q1, q2
442 ; CHECK-NEXT:    vmrs r0, p0
443 ; CHECK-NEXT:    vcmp.i8 eq, q0, zr
444 ; CHECK-NEXT:    vmrs r1, p0
445 ; CHECK-NEXT:    eors r0, r1
446 ; CHECK-NEXT:    vmsr p0, r0
447 ; CHECK-NEXT:    vpsel q0, q0, q1
448 ; CHECK-NEXT:    bx lr
449 entry:
450   %c1 = icmp eq <16 x i8> %a, zeroinitializer
451   %c2 = icmp eq <16 x i8> %b, %c
452   %o = xor <16 x i1> %c1, %c2
453   %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
454   ret <16 x i8> %s
458 define arm_aapcs_vfpcc <2 x i64> @cmpeqz_v2i1(<2 x i64> %a, <2 x i64> %b) {
459 ; CHECK-LABEL: cmpeqz_v2i1:
460 ; CHECK:       @ %bb.0: @ %entry
461 ; CHECK-NEXT:    vmov r0, r1, d2
462 ; CHECK-NEXT:    orrs r0, r1
463 ; CHECK-NEXT:    vmov r1, r2, d0
464 ; CHECK-NEXT:    cset r0, eq
465 ; CHECK-NEXT:    orrs r1, r2
466 ; CHECK-NEXT:    it eq
467 ; CHECK-NEXT:    eoreq r0, r0, #1
468 ; CHECK-NEXT:    rsbs r0, r0, #0
469 ; CHECK-NEXT:    movs r1, #0
470 ; CHECK-NEXT:    bfi r1, r0, #0, #8
471 ; CHECK-NEXT:    vmov r0, r2, d3
472 ; CHECK-NEXT:    orrs r0, r2
473 ; CHECK-NEXT:    vmov r2, r3, d1
474 ; CHECK-NEXT:    cset r0, eq
475 ; CHECK-NEXT:    orrs r2, r3
476 ; CHECK-NEXT:    it eq
477 ; CHECK-NEXT:    eoreq r0, r0, #1
478 ; CHECK-NEXT:    rsbs r0, r0, #0
479 ; CHECK-NEXT:    bfi r1, r0, #8, #8
480 ; CHECK-NEXT:    vmsr p0, r1
481 ; CHECK-NEXT:    vpsel q0, q0, q1
482 ; CHECK-NEXT:    bx lr
483 entry:
484   %c1 = icmp eq <2 x i64> %a, zeroinitializer
485   %c2 = icmp eq <2 x i64> %b, zeroinitializer
486   %o = xor <2 x i1> %c1, %c2
487   %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b
488   ret <2 x i64> %s
491 define arm_aapcs_vfpcc <2 x i64> @cmpeq_v2i1(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {
492 ; CHECK-LABEL: cmpeq_v2i1:
493 ; CHECK:       @ %bb.0: @ %entry
494 ; CHECK-NEXT:    vmov r0, r1, d4
495 ; CHECK-NEXT:    vmov r2, r3, d2
496 ; CHECK-NEXT:    eors r1, r3
497 ; CHECK-NEXT:    eors r0, r2
498 ; CHECK-NEXT:    orrs r0, r1
499 ; CHECK-NEXT:    vmov r1, r2, d0
500 ; CHECK-NEXT:    cset r0, eq
501 ; CHECK-NEXT:    orrs r1, r2
502 ; CHECK-NEXT:    it eq
503 ; CHECK-NEXT:    eoreq r0, r0, #1
504 ; CHECK-NEXT:    rsbs r0, r0, #0
505 ; CHECK-NEXT:    movs r1, #0
506 ; CHECK-NEXT:    bfi r1, r0, #0, #8
507 ; CHECK-NEXT:    vmov r12, r2, d5
508 ; CHECK-NEXT:    vmov r3, r0, d3
509 ; CHECK-NEXT:    eors r0, r2
510 ; CHECK-NEXT:    eor.w r2, r3, r12
511 ; CHECK-NEXT:    orrs r0, r2
512 ; CHECK-NEXT:    vmov r2, r3, d1
513 ; CHECK-NEXT:    cset r0, eq
514 ; CHECK-NEXT:    orrs r2, r3
515 ; CHECK-NEXT:    it eq
516 ; CHECK-NEXT:    eoreq r0, r0, #1
517 ; CHECK-NEXT:    rsbs r0, r0, #0
518 ; CHECK-NEXT:    bfi r1, r0, #8, #8
519 ; CHECK-NEXT:    vmsr p0, r1
520 ; CHECK-NEXT:    vpsel q0, q0, q1
521 ; CHECK-NEXT:    bx lr
522 entry:
523   %c1 = icmp eq <2 x i64> %a, zeroinitializer
524   %c2 = icmp eq <2 x i64> %b, %c
525   %o = xor <2 x i1> %c1, %c2
526   %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b
527   ret <2 x i64> %s