Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-vcmpz.ll
blobfcb9d136307fe5c3d11f4da1cbdff7c6cabc1ec8
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> @vcmp_eqz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
5 ; CHECK-LABEL: vcmp_eqz_v4i32:
6 ; CHECK:       @ %bb.0: @ %entry
7 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
8 ; CHECK-NEXT:    vpsel q0, q1, q2
9 ; CHECK-NEXT:    bx lr
10 entry:
11   %c = icmp eq <4 x i32> %src, zeroinitializer
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_nez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
17 ; CHECK-LABEL: vcmp_nez_v4i32:
18 ; CHECK:       @ %bb.0: @ %entry
19 ; CHECK-NEXT:    vcmp.i32 ne, q0, zr
20 ; CHECK-NEXT:    vpsel q0, q1, q2
21 ; CHECK-NEXT:    bx lr
22 entry:
23   %c = icmp ne <4 x i32> %src, zeroinitializer
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_sgtz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
29 ; CHECK-LABEL: vcmp_sgtz_v4i32:
30 ; CHECK:       @ %bb.0: @ %entry
31 ; CHECK-NEXT:    vcmp.s32 gt, q0, zr
32 ; CHECK-NEXT:    vpsel q0, q1, q2
33 ; CHECK-NEXT:    bx lr
34 entry:
35   %c = icmp sgt <4 x i32> %src, zeroinitializer
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_sgez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
41 ; CHECK-LABEL: vcmp_sgez_v4i32:
42 ; CHECK:       @ %bb.0: @ %entry
43 ; CHECK-NEXT:    vcmp.s32 ge, q0, zr
44 ; CHECK-NEXT:    vpsel q0, q1, q2
45 ; CHECK-NEXT:    bx lr
46 entry:
47   %c = icmp sge <4 x i32> %src, zeroinitializer
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_sltz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
53 ; CHECK-LABEL: vcmp_sltz_v4i32:
54 ; CHECK:       @ %bb.0: @ %entry
55 ; CHECK-NEXT:    vcmp.s32 lt, q0, zr
56 ; CHECK-NEXT:    vpsel q0, q1, q2
57 ; CHECK-NEXT:    bx lr
58 entry:
59   %c = icmp slt <4 x i32> %src, zeroinitializer
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_slez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
65 ; CHECK-LABEL: vcmp_slez_v4i32:
66 ; CHECK:       @ %bb.0: @ %entry
67 ; CHECK-NEXT:    vcmp.s32 le, q0, zr
68 ; CHECK-NEXT:    vpsel q0, q1, q2
69 ; CHECK-NEXT:    bx lr
70 entry:
71   %c = icmp sle <4 x i32> %src, zeroinitializer
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_ugtz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
77 ; CHECK-LABEL: vcmp_ugtz_v4i32:
78 ; CHECK:       @ %bb.0: @ %entry
79 ; CHECK-NEXT:    vcmp.i32 ne, q0, zr
80 ; CHECK-NEXT:    vpsel q0, q1, q2
81 ; CHECK-NEXT:    bx lr
82 entry:
83   %c = icmp ugt <4 x i32> %src, zeroinitializer
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_ugez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
89 ; CHECK-LABEL: vcmp_ugez_v4i32:
90 ; CHECK:       @ %bb.0: @ %entry
91 ; CHECK-NEXT:    vmov q0, q1
92 ; CHECK-NEXT:    bx lr
93 entry:
94   %c = icmp uge <4 x i32> %src, zeroinitializer
95   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
96   ret <4 x i32> %s
99 define arm_aapcs_vfpcc <4 x i32> @vcmp_ultz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
100 ; CHECK-LABEL: vcmp_ultz_v4i32:
101 ; CHECK:       @ %bb.0: @ %entry
102 ; CHECK-NEXT:    vmov q0, q2
103 ; CHECK-NEXT:    bx lr
104 entry:
105   %c = icmp ult <4 x i32> %src, zeroinitializer
106   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
107   ret <4 x i32> %s
110 define arm_aapcs_vfpcc <4 x i32> @vcmp_ulez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
111 ; CHECK-LABEL: vcmp_ulez_v4i32:
112 ; CHECK:       @ %bb.0: @ %entry
113 ; CHECK-NEXT:    vcmp.u32 cs, q0, zr
114 ; CHECK-NEXT:    vpsel q0, q1, q2
115 ; CHECK-NEXT:    bx lr
116 entry:
117   %c = icmp ule <4 x i32> %src, zeroinitializer
118   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
119   ret <4 x i32> %s
123 define arm_aapcs_vfpcc <8 x i16> @vcmp_eqz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
124 ; CHECK-LABEL: vcmp_eqz_v8i16:
125 ; CHECK:       @ %bb.0: @ %entry
126 ; CHECK-NEXT:    vcmp.i16 eq, q0, zr
127 ; CHECK-NEXT:    vpsel q0, q1, q2
128 ; CHECK-NEXT:    bx lr
129 entry:
130   %c = icmp eq <8 x i16> %src, zeroinitializer
131   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
132   ret <8 x i16> %s
135 define arm_aapcs_vfpcc <8 x i16> @vcmp_nez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
136 ; CHECK-LABEL: vcmp_nez_v8i16:
137 ; CHECK:       @ %bb.0: @ %entry
138 ; CHECK-NEXT:    vcmp.i16 ne, q0, zr
139 ; CHECK-NEXT:    vpsel q0, q1, q2
140 ; CHECK-NEXT:    bx lr
141 entry:
142   %c = icmp ne <8 x i16> %src, zeroinitializer
143   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
144   ret <8 x i16> %s
147 define arm_aapcs_vfpcc <8 x i16> @vcmp_sgtz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
148 ; CHECK-LABEL: vcmp_sgtz_v8i16:
149 ; CHECK:       @ %bb.0: @ %entry
150 ; CHECK-NEXT:    vcmp.s16 gt, q0, zr
151 ; CHECK-NEXT:    vpsel q0, q1, q2
152 ; CHECK-NEXT:    bx lr
153 entry:
154   %c = icmp sgt <8 x i16> %src, zeroinitializer
155   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
156   ret <8 x i16> %s
159 define arm_aapcs_vfpcc <8 x i16> @vcmp_sgez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
160 ; CHECK-LABEL: vcmp_sgez_v8i16:
161 ; CHECK:       @ %bb.0: @ %entry
162 ; CHECK-NEXT:    vcmp.s16 ge, q0, zr
163 ; CHECK-NEXT:    vpsel q0, q1, q2
164 ; CHECK-NEXT:    bx lr
165 entry:
166   %c = icmp sge <8 x i16> %src, zeroinitializer
167   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
168   ret <8 x i16> %s
171 define arm_aapcs_vfpcc <8 x i16> @vcmp_sltz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
172 ; CHECK-LABEL: vcmp_sltz_v8i16:
173 ; CHECK:       @ %bb.0: @ %entry
174 ; CHECK-NEXT:    vcmp.s16 lt, q0, zr
175 ; CHECK-NEXT:    vpsel q0, q1, q2
176 ; CHECK-NEXT:    bx lr
177 entry:
178   %c = icmp slt <8 x i16> %src, zeroinitializer
179   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
180   ret <8 x i16> %s
183 define arm_aapcs_vfpcc <8 x i16> @vcmp_slez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
184 ; CHECK-LABEL: vcmp_slez_v8i16:
185 ; CHECK:       @ %bb.0: @ %entry
186 ; CHECK-NEXT:    vcmp.s16 le, q0, zr
187 ; CHECK-NEXT:    vpsel q0, q1, q2
188 ; CHECK-NEXT:    bx lr
189 entry:
190   %c = icmp sle <8 x i16> %src, zeroinitializer
191   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
192   ret <8 x i16> %s
195 define arm_aapcs_vfpcc <8 x i16> @vcmp_ugtz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
196 ; CHECK-LABEL: vcmp_ugtz_v8i16:
197 ; CHECK:       @ %bb.0: @ %entry
198 ; CHECK-NEXT:    vcmp.i16 ne, q0, zr
199 ; CHECK-NEXT:    vpsel q0, q1, q2
200 ; CHECK-NEXT:    bx lr
201 entry:
202   %c = icmp ugt <8 x i16> %src, zeroinitializer
203   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
204   ret <8 x i16> %s
207 define arm_aapcs_vfpcc <8 x i16> @vcmp_ugez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
208 ; CHECK-LABEL: vcmp_ugez_v8i16:
209 ; CHECK:       @ %bb.0: @ %entry
210 ; CHECK-NEXT:    vmov q0, q1
211 ; CHECK-NEXT:    bx lr
212 entry:
213   %c = icmp uge <8 x i16> %src, zeroinitializer
214   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
215   ret <8 x i16> %s
218 define arm_aapcs_vfpcc <8 x i16> @vcmp_ultz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
219 ; CHECK-LABEL: vcmp_ultz_v8i16:
220 ; CHECK:       @ %bb.0: @ %entry
221 ; CHECK-NEXT:    vmov q0, q2
222 ; CHECK-NEXT:    bx lr
223 entry:
224   %c = icmp ult <8 x i16> %src, zeroinitializer
225   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
226   ret <8 x i16> %s
229 define arm_aapcs_vfpcc <8 x i16> @vcmp_ulez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
230 ; CHECK-LABEL: vcmp_ulez_v8i16:
231 ; CHECK:       @ %bb.0: @ %entry
232 ; CHECK-NEXT:    vcmp.u16 cs, q0, zr
233 ; CHECK-NEXT:    vpsel q0, q1, q2
234 ; CHECK-NEXT:    bx lr
235 entry:
236   %c = icmp ule <8 x i16> %src, zeroinitializer
237   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
238   ret <8 x i16> %s
242 define arm_aapcs_vfpcc <16 x i8> @vcmp_eqz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
243 ; CHECK-LABEL: vcmp_eqz_v16i8:
244 ; CHECK:       @ %bb.0: @ %entry
245 ; CHECK-NEXT:    vcmp.i8 eq, q0, zr
246 ; CHECK-NEXT:    vpsel q0, q1, q2
247 ; CHECK-NEXT:    bx lr
248 entry:
249   %c = icmp eq <16 x i8> %src, zeroinitializer
250   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
251   ret <16 x i8> %s
254 define arm_aapcs_vfpcc <16 x i8> @vcmp_nez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
255 ; CHECK-LABEL: vcmp_nez_v16i8:
256 ; CHECK:       @ %bb.0: @ %entry
257 ; CHECK-NEXT:    vcmp.i8 ne, q0, zr
258 ; CHECK-NEXT:    vpsel q0, q1, q2
259 ; CHECK-NEXT:    bx lr
260 entry:
261   %c = icmp ne <16 x i8> %src, zeroinitializer
262   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
263   ret <16 x i8> %s
266 define arm_aapcs_vfpcc <16 x i8> @vcmp_sgtz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
267 ; CHECK-LABEL: vcmp_sgtz_v16i8:
268 ; CHECK:       @ %bb.0: @ %entry
269 ; CHECK-NEXT:    vcmp.s8 gt, q0, zr
270 ; CHECK-NEXT:    vpsel q0, q1, q2
271 ; CHECK-NEXT:    bx lr
272 entry:
273   %c = icmp sgt <16 x i8> %src, zeroinitializer
274   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
275   ret <16 x i8> %s
278 define arm_aapcs_vfpcc <16 x i8> @vcmp_sgez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
279 ; CHECK-LABEL: vcmp_sgez_v16i8:
280 ; CHECK:       @ %bb.0: @ %entry
281 ; CHECK-NEXT:    vcmp.s8 ge, q0, zr
282 ; CHECK-NEXT:    vpsel q0, q1, q2
283 ; CHECK-NEXT:    bx lr
284 entry:
285   %c = icmp sge <16 x i8> %src, zeroinitializer
286   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
287   ret <16 x i8> %s
290 define arm_aapcs_vfpcc <16 x i8> @vcmp_sltz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
291 ; CHECK-LABEL: vcmp_sltz_v16i8:
292 ; CHECK:       @ %bb.0: @ %entry
293 ; CHECK-NEXT:    vcmp.s8 lt, q0, zr
294 ; CHECK-NEXT:    vpsel q0, q1, q2
295 ; CHECK-NEXT:    bx lr
296 entry:
297   %c = icmp slt <16 x i8> %src, zeroinitializer
298   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
299   ret <16 x i8> %s
302 define arm_aapcs_vfpcc <16 x i8> @vcmp_slez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
303 ; CHECK-LABEL: vcmp_slez_v16i8:
304 ; CHECK:       @ %bb.0: @ %entry
305 ; CHECK-NEXT:    vcmp.s8 le, q0, zr
306 ; CHECK-NEXT:    vpsel q0, q1, q2
307 ; CHECK-NEXT:    bx lr
308 entry:
309   %c = icmp sle <16 x i8> %src, zeroinitializer
310   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
311   ret <16 x i8> %s
314 define arm_aapcs_vfpcc <16 x i8> @vcmp_ugtz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
315 ; CHECK-LABEL: vcmp_ugtz_v16i8:
316 ; CHECK:       @ %bb.0: @ %entry
317 ; CHECK-NEXT:    vcmp.i8 ne, q0, zr
318 ; CHECK-NEXT:    vpsel q0, q1, q2
319 ; CHECK-NEXT:    bx lr
320 entry:
321   %c = icmp ugt <16 x i8> %src, zeroinitializer
322   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
323   ret <16 x i8> %s
326 define arm_aapcs_vfpcc <16 x i8> @vcmp_ugez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
327 ; CHECK-LABEL: vcmp_ugez_v16i8:
328 ; CHECK:       @ %bb.0: @ %entry
329 ; CHECK-NEXT:    vmov q0, q1
330 ; CHECK-NEXT:    bx lr
331 entry:
332   %c = icmp uge <16 x i8> %src, zeroinitializer
333   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
334   ret <16 x i8> %s
337 define arm_aapcs_vfpcc <16 x i8> @vcmp_ultz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
338 ; CHECK-LABEL: vcmp_ultz_v16i8:
339 ; CHECK:       @ %bb.0: @ %entry
340 ; CHECK-NEXT:    vmov q0, q2
341 ; CHECK-NEXT:    bx lr
342 entry:
343   %c = icmp ult <16 x i8> %src, zeroinitializer
344   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
345   ret <16 x i8> %s
348 define arm_aapcs_vfpcc <16 x i8> @vcmp_ulez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
349 ; CHECK-LABEL: vcmp_ulez_v16i8:
350 ; CHECK:       @ %bb.0: @ %entry
351 ; CHECK-NEXT:    vcmp.u8 cs, q0, zr
352 ; CHECK-NEXT:    vpsel q0, q1, q2
353 ; CHECK-NEXT:    bx lr
354 entry:
355   %c = icmp ule <16 x i8> %src, zeroinitializer
356   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
357   ret <16 x i8> %s
361 define arm_aapcs_vfpcc <2 x i64> @vcmp_eqz_v2i64(<2 x i64> %src, <2 x i64> %a, <2 x i64> %b) {
362 ; CHECK-LABEL: vcmp_eqz_v2i64:
363 ; CHECK:       @ %bb.0: @ %entry
364 ; CHECK-NEXT:    vmov r0, r1, d0
365 ; CHECK-NEXT:    orrs r0, r1
366 ; CHECK-NEXT:    mov.w r1, #0
367 ; CHECK-NEXT:    csetm r0, eq
368 ; CHECK-NEXT:    bfi r1, r0, #0, #8
369 ; CHECK-NEXT:    vmov r0, r2, d1
370 ; CHECK-NEXT:    orrs r0, r2
371 ; CHECK-NEXT:    csetm r0, eq
372 ; CHECK-NEXT:    bfi r1, r0, #8, #8
373 ; CHECK-NEXT:    vmsr p0, r1
374 ; CHECK-NEXT:    vpsel q0, q1, q2
375 ; CHECK-NEXT:    bx lr
376 entry:
377   %c = icmp eq <2 x i64> %src, zeroinitializer
378   %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b
379   ret <2 x i64> %s
382 define arm_aapcs_vfpcc <2 x i32> @vcmp_eqz_v2i32(<2 x i64> %src, <2 x i32> %a, <2 x i32> %b) {
383 ; CHECK-LABEL: vcmp_eqz_v2i32:
384 ; CHECK:       @ %bb.0: @ %entry
385 ; CHECK-NEXT:    vmov r0, r1, d0
386 ; CHECK-NEXT:    orrs r0, r1
387 ; CHECK-NEXT:    mov.w r1, #0
388 ; CHECK-NEXT:    csetm r0, eq
389 ; CHECK-NEXT:    bfi r1, r0, #0, #8
390 ; CHECK-NEXT:    vmov r0, r2, d1
391 ; CHECK-NEXT:    orrs r0, r2
392 ; CHECK-NEXT:    csetm r0, eq
393 ; CHECK-NEXT:    bfi r1, r0, #8, #8
394 ; CHECK-NEXT:    vmsr p0, r1
395 ; CHECK-NEXT:    vpsel q0, q1, q2
396 ; CHECK-NEXT:    bx lr
397 entry:
398   %c = icmp eq <2 x i64> %src, zeroinitializer
399   %s = select <2 x i1> %c, <2 x i32> %a, <2 x i32> %b
400   ret <2 x i32> %s
404 ; Reversed
406 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_eqz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
407 ; CHECK-LABEL: vcmp_r_eqz_v4i32:
408 ; CHECK:       @ %bb.0: @ %entry
409 ; CHECK-NEXT:    vcmp.i32 eq, q0, zr
410 ; CHECK-NEXT:    vpsel q0, q1, q2
411 ; CHECK-NEXT:    bx lr
412 entry:
413   %c = icmp eq <4 x i32> zeroinitializer, %src
414   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
415   ret <4 x i32> %s
418 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_nez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
419 ; CHECK-LABEL: vcmp_r_nez_v4i32:
420 ; CHECK:       @ %bb.0: @ %entry
421 ; CHECK-NEXT:    vcmp.i32 ne, q0, zr
422 ; CHECK-NEXT:    vpsel q0, q1, q2
423 ; CHECK-NEXT:    bx lr
424 entry:
425   %c = icmp ne <4 x i32> zeroinitializer, %src
426   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
427   ret <4 x i32> %s
430 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_sgtz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
431 ; CHECK-LABEL: vcmp_r_sgtz_v4i32:
432 ; CHECK:       @ %bb.0: @ %entry
433 ; CHECK-NEXT:    vcmp.s32 lt, q0, zr
434 ; CHECK-NEXT:    vpsel q0, q1, q2
435 ; CHECK-NEXT:    bx lr
436 entry:
437   %c = icmp sgt <4 x i32> zeroinitializer, %src
438   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
439   ret <4 x i32> %s
442 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_sgez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
443 ; CHECK-LABEL: vcmp_r_sgez_v4i32:
444 ; CHECK:       @ %bb.0: @ %entry
445 ; CHECK-NEXT:    vcmp.s32 le, q0, zr
446 ; CHECK-NEXT:    vpsel q0, q1, q2
447 ; CHECK-NEXT:    bx lr
448 entry:
449   %c = icmp sge <4 x i32> zeroinitializer, %src
450   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
451   ret <4 x i32> %s
454 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_sltz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
455 ; CHECK-LABEL: vcmp_r_sltz_v4i32:
456 ; CHECK:       @ %bb.0: @ %entry
457 ; CHECK-NEXT:    vcmp.s32 gt, q0, zr
458 ; CHECK-NEXT:    vpsel q0, q1, q2
459 ; CHECK-NEXT:    bx lr
460 entry:
461   %c = icmp slt <4 x i32> zeroinitializer, %src
462   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
463   ret <4 x i32> %s
466 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_slez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
467 ; CHECK-LABEL: vcmp_r_slez_v4i32:
468 ; CHECK:       @ %bb.0: @ %entry
469 ; CHECK-NEXT:    vcmp.s32 ge, q0, zr
470 ; CHECK-NEXT:    vpsel q0, q1, q2
471 ; CHECK-NEXT:    bx lr
472 entry:
473   %c = icmp sle <4 x i32> zeroinitializer, %src
474   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
475   ret <4 x i32> %s
478 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_ugtz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
479 ; CHECK-LABEL: vcmp_r_ugtz_v4i32:
480 ; CHECK:       @ %bb.0: @ %entry
481 ; CHECK-NEXT:    vmov q0, q2
482 ; CHECK-NEXT:    bx lr
483 entry:
484   %c = icmp ugt <4 x i32> zeroinitializer, %src
485   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
486   ret <4 x i32> %s
489 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_ugez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
490 ; CHECK-LABEL: vcmp_r_ugez_v4i32:
491 ; CHECK:       @ %bb.0: @ %entry
492 ; CHECK-NEXT:    vcmp.u32 cs, q0, zr
493 ; CHECK-NEXT:    vpsel q0, q1, q2
494 ; CHECK-NEXT:    bx lr
495 entry:
496   %c = icmp uge <4 x i32> zeroinitializer, %src
497   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
498   ret <4 x i32> %s
501 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_ultz_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
502 ; CHECK-LABEL: vcmp_r_ultz_v4i32:
503 ; CHECK:       @ %bb.0: @ %entry
504 ; CHECK-NEXT:    vcmp.i32 ne, q0, zr
505 ; CHECK-NEXT:    vpsel q0, q1, q2
506 ; CHECK-NEXT:    bx lr
507 entry:
508   %c = icmp ult <4 x i32> zeroinitializer, %src
509   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
510   ret <4 x i32> %s
513 define arm_aapcs_vfpcc <4 x i32> @vcmp_r_ulez_v4i32(<4 x i32> %src, <4 x i32> %a, <4 x i32> %b) {
514 ; CHECK-LABEL: vcmp_r_ulez_v4i32:
515 ; CHECK:       @ %bb.0: @ %entry
516 ; CHECK-NEXT:    vmov q0, q1
517 ; CHECK-NEXT:    bx lr
518 entry:
519   %c = icmp ule <4 x i32> zeroinitializer, %src
520   %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b
521   ret <4 x i32> %s
525 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_eqz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
526 ; CHECK-LABEL: vcmp_r_eqz_v8i16:
527 ; CHECK:       @ %bb.0: @ %entry
528 ; CHECK-NEXT:    vcmp.i16 eq, q0, zr
529 ; CHECK-NEXT:    vpsel q0, q1, q2
530 ; CHECK-NEXT:    bx lr
531 entry:
532   %c = icmp eq <8 x i16> zeroinitializer, %src
533   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
534   ret <8 x i16> %s
537 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_nez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
538 ; CHECK-LABEL: vcmp_r_nez_v8i16:
539 ; CHECK:       @ %bb.0: @ %entry
540 ; CHECK-NEXT:    vcmp.i16 ne, q0, zr
541 ; CHECK-NEXT:    vpsel q0, q1, q2
542 ; CHECK-NEXT:    bx lr
543 entry:
544   %c = icmp ne <8 x i16> zeroinitializer, %src
545   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
546   ret <8 x i16> %s
549 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_sgtz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
550 ; CHECK-LABEL: vcmp_r_sgtz_v8i16:
551 ; CHECK:       @ %bb.0: @ %entry
552 ; CHECK-NEXT:    vcmp.s16 lt, q0, zr
553 ; CHECK-NEXT:    vpsel q0, q1, q2
554 ; CHECK-NEXT:    bx lr
555 entry:
556   %c = icmp sgt <8 x i16> zeroinitializer, %src
557   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
558   ret <8 x i16> %s
561 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_sgez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
562 ; CHECK-LABEL: vcmp_r_sgez_v8i16:
563 ; CHECK:       @ %bb.0: @ %entry
564 ; CHECK-NEXT:    vcmp.s16 le, q0, zr
565 ; CHECK-NEXT:    vpsel q0, q1, q2
566 ; CHECK-NEXT:    bx lr
567 entry:
568   %c = icmp sge <8 x i16> zeroinitializer, %src
569   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
570   ret <8 x i16> %s
573 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_sltz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
574 ; CHECK-LABEL: vcmp_r_sltz_v8i16:
575 ; CHECK:       @ %bb.0: @ %entry
576 ; CHECK-NEXT:    vcmp.s16 gt, q0, zr
577 ; CHECK-NEXT:    vpsel q0, q1, q2
578 ; CHECK-NEXT:    bx lr
579 entry:
580   %c = icmp slt <8 x i16> zeroinitializer, %src
581   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
582   ret <8 x i16> %s
585 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_slez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
586 ; CHECK-LABEL: vcmp_r_slez_v8i16:
587 ; CHECK:       @ %bb.0: @ %entry
588 ; CHECK-NEXT:    vcmp.s16 ge, q0, zr
589 ; CHECK-NEXT:    vpsel q0, q1, q2
590 ; CHECK-NEXT:    bx lr
591 entry:
592   %c = icmp sle <8 x i16> zeroinitializer, %src
593   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
594   ret <8 x i16> %s
597 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_ugtz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
598 ; CHECK-LABEL: vcmp_r_ugtz_v8i16:
599 ; CHECK:       @ %bb.0: @ %entry
600 ; CHECK-NEXT:    vmov q0, q2
601 ; CHECK-NEXT:    bx lr
602 entry:
603   %c = icmp ugt <8 x i16> zeroinitializer, %src
604   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
605   ret <8 x i16> %s
608 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_ugez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
609 ; CHECK-LABEL: vcmp_r_ugez_v8i16:
610 ; CHECK:       @ %bb.0: @ %entry
611 ; CHECK-NEXT:    vcmp.u16 cs, q0, zr
612 ; CHECK-NEXT:    vpsel q0, q1, q2
613 ; CHECK-NEXT:    bx lr
614 entry:
615   %c = icmp uge <8 x i16> zeroinitializer, %src
616   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
617   ret <8 x i16> %s
620 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_ultz_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
621 ; CHECK-LABEL: vcmp_r_ultz_v8i16:
622 ; CHECK:       @ %bb.0: @ %entry
623 ; CHECK-NEXT:    vcmp.i16 ne, q0, zr
624 ; CHECK-NEXT:    vpsel q0, q1, q2
625 ; CHECK-NEXT:    bx lr
626 entry:
627   %c = icmp ult <8 x i16> zeroinitializer, %src
628   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
629   ret <8 x i16> %s
632 define arm_aapcs_vfpcc <8 x i16> @vcmp_r_ulez_v8i16(<8 x i16> %src, <8 x i16> %a, <8 x i16> %b) {
633 ; CHECK-LABEL: vcmp_r_ulez_v8i16:
634 ; CHECK:       @ %bb.0: @ %entry
635 ; CHECK-NEXT:    vmov q0, q1
636 ; CHECK-NEXT:    bx lr
637 entry:
638   %c = icmp ule <8 x i16> zeroinitializer, %src
639   %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
640   ret <8 x i16> %s
644 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_eqz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
645 ; CHECK-LABEL: vcmp_r_eqz_v16i8:
646 ; CHECK:       @ %bb.0: @ %entry
647 ; CHECK-NEXT:    vcmp.i8 eq, q0, zr
648 ; CHECK-NEXT:    vpsel q0, q1, q2
649 ; CHECK-NEXT:    bx lr
650 entry:
651   %c = icmp eq <16 x i8> zeroinitializer, %src
652   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
653   ret <16 x i8> %s
656 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_nez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
657 ; CHECK-LABEL: vcmp_r_nez_v16i8:
658 ; CHECK:       @ %bb.0: @ %entry
659 ; CHECK-NEXT:    vcmp.i8 ne, q0, zr
660 ; CHECK-NEXT:    vpsel q0, q1, q2
661 ; CHECK-NEXT:    bx lr
662 entry:
663   %c = icmp ne <16 x i8> zeroinitializer, %src
664   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
665   ret <16 x i8> %s
668 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_sgtz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
669 ; CHECK-LABEL: vcmp_r_sgtz_v16i8:
670 ; CHECK:       @ %bb.0: @ %entry
671 ; CHECK-NEXT:    vcmp.s8 lt, q0, zr
672 ; CHECK-NEXT:    vpsel q0, q1, q2
673 ; CHECK-NEXT:    bx lr
674 entry:
675   %c = icmp sgt <16 x i8> zeroinitializer, %src
676   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
677   ret <16 x i8> %s
680 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_sgez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
681 ; CHECK-LABEL: vcmp_r_sgez_v16i8:
682 ; CHECK:       @ %bb.0: @ %entry
683 ; CHECK-NEXT:    vcmp.s8 le, q0, zr
684 ; CHECK-NEXT:    vpsel q0, q1, q2
685 ; CHECK-NEXT:    bx lr
686 entry:
687   %c = icmp sge <16 x i8> zeroinitializer, %src
688   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
689   ret <16 x i8> %s
692 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_sltz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
693 ; CHECK-LABEL: vcmp_r_sltz_v16i8:
694 ; CHECK:       @ %bb.0: @ %entry
695 ; CHECK-NEXT:    vcmp.s8 gt, q0, zr
696 ; CHECK-NEXT:    vpsel q0, q1, q2
697 ; CHECK-NEXT:    bx lr
698 entry:
699   %c = icmp slt <16 x i8> zeroinitializer, %src
700   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
701   ret <16 x i8> %s
704 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_slez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
705 ; CHECK-LABEL: vcmp_r_slez_v16i8:
706 ; CHECK:       @ %bb.0: @ %entry
707 ; CHECK-NEXT:    vcmp.s8 ge, q0, zr
708 ; CHECK-NEXT:    vpsel q0, q1, q2
709 ; CHECK-NEXT:    bx lr
710 entry:
711   %c = icmp sle <16 x i8> zeroinitializer, %src
712   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
713   ret <16 x i8> %s
716 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_ugtz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
717 ; CHECK-LABEL: vcmp_r_ugtz_v16i8:
718 ; CHECK:       @ %bb.0: @ %entry
719 ; CHECK-NEXT:    vmov q0, q2
720 ; CHECK-NEXT:    bx lr
721 entry:
722   %c = icmp ugt <16 x i8> zeroinitializer, %src
723   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
724   ret <16 x i8> %s
727 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_ugez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
728 ; CHECK-LABEL: vcmp_r_ugez_v16i8:
729 ; CHECK:       @ %bb.0: @ %entry
730 ; CHECK-NEXT:    vcmp.u8 cs, q0, zr
731 ; CHECK-NEXT:    vpsel q0, q1, q2
732 ; CHECK-NEXT:    bx lr
733 entry:
734   %c = icmp uge <16 x i8> zeroinitializer, %src
735   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
736   ret <16 x i8> %s
739 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_ultz_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
740 ; CHECK-LABEL: vcmp_r_ultz_v16i8:
741 ; CHECK:       @ %bb.0: @ %entry
742 ; CHECK-NEXT:    vcmp.i8 ne, q0, zr
743 ; CHECK-NEXT:    vpsel q0, q1, q2
744 ; CHECK-NEXT:    bx lr
745 entry:
746   %c = icmp ult <16 x i8> zeroinitializer, %src
747   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
748   ret <16 x i8> %s
751 define arm_aapcs_vfpcc <16 x i8> @vcmp_r_ulez_v16i8(<16 x i8> %src, <16 x i8> %a, <16 x i8> %b) {
752 ; CHECK-LABEL: vcmp_r_ulez_v16i8:
753 ; CHECK:       @ %bb.0: @ %entry
754 ; CHECK-NEXT:    vmov q0, q1
755 ; CHECK-NEXT:    bx lr
756 entry:
757   %c = icmp ule <16 x i8> zeroinitializer, %src
758   %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b
759   ret <16 x i8> %s
763 define arm_aapcs_vfpcc <2 x i64> @vcmp_r_eqz_v2i64(<2 x i64> %src, <2 x i64> %a, <2 x i64> %b) {
764 ; CHECK-LABEL: vcmp_r_eqz_v2i64:
765 ; CHECK:       @ %bb.0: @ %entry
766 ; CHECK-NEXT:    vmov r0, r1, d0
767 ; CHECK-NEXT:    orrs r0, r1
768 ; CHECK-NEXT:    mov.w r1, #0
769 ; CHECK-NEXT:    csetm r0, eq
770 ; CHECK-NEXT:    bfi r1, r0, #0, #8
771 ; CHECK-NEXT:    vmov r0, r2, d1
772 ; CHECK-NEXT:    orrs r0, r2
773 ; CHECK-NEXT:    csetm r0, eq
774 ; CHECK-NEXT:    bfi r1, r0, #8, #8
775 ; CHECK-NEXT:    vmsr p0, r1
776 ; CHECK-NEXT:    vpsel q0, q1, q2
777 ; CHECK-NEXT:    bx lr
778 entry:
779   %c = icmp eq <2 x i64> zeroinitializer, %src
780   %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b
781   ret <2 x i64> %s
784 define arm_aapcs_vfpcc <2 x i32> @vcmp_r_eqz_v2i32(<2 x i64> %src, <2 x i32> %a, <2 x i32> %b) {
785 ; CHECK-LABEL: vcmp_r_eqz_v2i32:
786 ; CHECK:       @ %bb.0: @ %entry
787 ; CHECK-NEXT:    vmov r0, r1, d0
788 ; CHECK-NEXT:    orrs r0, r1
789 ; CHECK-NEXT:    mov.w r1, #0
790 ; CHECK-NEXT:    csetm r0, eq
791 ; CHECK-NEXT:    bfi r1, r0, #0, #8
792 ; CHECK-NEXT:    vmov r0, r2, d1
793 ; CHECK-NEXT:    orrs r0, r2
794 ; CHECK-NEXT:    csetm r0, eq
795 ; CHECK-NEXT:    bfi r1, r0, #8, #8
796 ; CHECK-NEXT:    vmsr p0, r1
797 ; CHECK-NEXT:    vpsel q0, q1, q2
798 ; CHECK-NEXT:    bx lr
799 entry:
800   %c = icmp eq <2 x i64> %src, zeroinitializer
801   %s = select <2 x i1> %c, <2 x i32> %a, <2 x i32> %b
802   ret <2 x i32> %s