1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define <8 x i8> @cmeq8xi8(<8 x i8> %A, <8 x i8> %B) {
6 ; CHECK-LABEL: cmeq8xi8:
8 ; CHECK-NEXT: cmeq v0.8b, v0.8b, v1.8b
10 %tmp3 = icmp eq <8 x i8> %A, %B;
11 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
15 define <16 x i8> @cmeq16xi8(<16 x i8> %A, <16 x i8> %B) {
16 ; CHECK-LABEL: cmeq16xi8:
18 ; CHECK-NEXT: cmeq v0.16b, v0.16b, v1.16b
20 %tmp3 = icmp eq <16 x i8> %A, %B;
21 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
25 define <4 x i16> @cmeq4xi16(<4 x i16> %A, <4 x i16> %B) {
26 ; CHECK-LABEL: cmeq4xi16:
28 ; CHECK-NEXT: cmeq v0.4h, v0.4h, v1.4h
30 %tmp3 = icmp eq <4 x i16> %A, %B;
31 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
35 define <8 x i16> @cmeq8xi16(<8 x i16> %A, <8 x i16> %B) {
36 ; CHECK-LABEL: cmeq8xi16:
38 ; CHECK-NEXT: cmeq v0.8h, v0.8h, v1.8h
40 %tmp3 = icmp eq <8 x i16> %A, %B;
41 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
45 define <2 x i32> @cmeq2xi32(<2 x i32> %A, <2 x i32> %B) {
46 ; CHECK-LABEL: cmeq2xi32:
48 ; CHECK-NEXT: cmeq v0.2s, v0.2s, v1.2s
50 %tmp3 = icmp eq <2 x i32> %A, %B;
51 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
55 define <4 x i32> @cmeq4xi32(<4 x i32> %A, <4 x i32> %B) {
56 ; CHECK-LABEL: cmeq4xi32:
58 ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
60 %tmp3 = icmp eq <4 x i32> %A, %B;
61 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
65 define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
66 ; CHECK-LABEL: cmeq2xi64:
68 ; CHECK-NEXT: cmeq v0.2d, v0.2d, v1.2d
70 %tmp3 = icmp eq <2 x i64> %A, %B;
71 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
75 define <8 x i8> @cmne8xi8(<8 x i8> %A, <8 x i8> %B) {
76 ; CHECK-LABEL: cmne8xi8:
78 ; CHECK-NEXT: cmeq v0.8b, v0.8b, v1.8b
79 ; CHECK-NEXT: mvn v0.8b, v0.8b
81 %tmp3 = icmp ne <8 x i8> %A, %B;
82 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
86 define <16 x i8> @cmne16xi8(<16 x i8> %A, <16 x i8> %B) {
87 ; CHECK-LABEL: cmne16xi8:
89 ; CHECK-NEXT: cmeq v0.16b, v0.16b, v1.16b
90 ; CHECK-NEXT: mvn v0.16b, v0.16b
92 %tmp3 = icmp ne <16 x i8> %A, %B;
93 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
97 define <4 x i16> @cmne4xi16(<4 x i16> %A, <4 x i16> %B) {
98 ; CHECK-LABEL: cmne4xi16:
100 ; CHECK-NEXT: cmeq v0.4h, v0.4h, v1.4h
101 ; CHECK-NEXT: mvn v0.8b, v0.8b
103 %tmp3 = icmp ne <4 x i16> %A, %B;
104 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
108 define <8 x i16> @cmne8xi16(<8 x i16> %A, <8 x i16> %B) {
109 ; CHECK-LABEL: cmne8xi16:
111 ; CHECK-NEXT: cmeq v0.8h, v0.8h, v1.8h
112 ; CHECK-NEXT: mvn v0.16b, v0.16b
114 %tmp3 = icmp ne <8 x i16> %A, %B;
115 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
119 define <2 x i32> @cmne2xi32(<2 x i32> %A, <2 x i32> %B) {
120 ; CHECK-LABEL: cmne2xi32:
122 ; CHECK-NEXT: cmeq v0.2s, v0.2s, v1.2s
123 ; CHECK-NEXT: mvn v0.8b, v0.8b
125 %tmp3 = icmp ne <2 x i32> %A, %B;
126 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
130 define <4 x i32> @cmne4xi32(<4 x i32> %A, <4 x i32> %B) {
131 ; CHECK-LABEL: cmne4xi32:
133 ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
134 ; CHECK-NEXT: mvn v0.16b, v0.16b
136 %tmp3 = icmp ne <4 x i32> %A, %B;
137 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
141 define <2 x i64> @cmne2xi64(<2 x i64> %A, <2 x i64> %B) {
142 ; CHECK-LABEL: cmne2xi64:
144 ; CHECK-NEXT: cmeq v0.2d, v0.2d, v1.2d
145 ; CHECK-NEXT: mvn v0.16b, v0.16b
147 %tmp3 = icmp ne <2 x i64> %A, %B;
148 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
152 define <8 x i8> @cmgt8xi8(<8 x i8> %A, <8 x i8> %B) {
153 ; CHECK-LABEL: cmgt8xi8:
155 ; CHECK-NEXT: cmgt v0.8b, v0.8b, v1.8b
157 %tmp3 = icmp sgt <8 x i8> %A, %B;
158 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
162 define <16 x i8> @cmgt16xi8(<16 x i8> %A, <16 x i8> %B) {
163 ; CHECK-LABEL: cmgt16xi8:
165 ; CHECK-NEXT: cmgt v0.16b, v0.16b, v1.16b
167 %tmp3 = icmp sgt <16 x i8> %A, %B;
168 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
172 define <4 x i16> @cmgt4xi16(<4 x i16> %A, <4 x i16> %B) {
173 ; CHECK-LABEL: cmgt4xi16:
175 ; CHECK-NEXT: cmgt v0.4h, v0.4h, v1.4h
177 %tmp3 = icmp sgt <4 x i16> %A, %B;
178 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
182 define <8 x i16> @cmgt8xi16(<8 x i16> %A, <8 x i16> %B) {
183 ; CHECK-LABEL: cmgt8xi16:
185 ; CHECK-NEXT: cmgt v0.8h, v0.8h, v1.8h
187 %tmp3 = icmp sgt <8 x i16> %A, %B;
188 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
192 define <2 x i32> @cmgt2xi32(<2 x i32> %A, <2 x i32> %B) {
193 ; CHECK-LABEL: cmgt2xi32:
195 ; CHECK-NEXT: cmgt v0.2s, v0.2s, v1.2s
197 %tmp3 = icmp sgt <2 x i32> %A, %B;
198 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
202 define <4 x i32> @cmgt4xi32(<4 x i32> %A, <4 x i32> %B) {
203 ; CHECK-LABEL: cmgt4xi32:
205 ; CHECK-NEXT: cmgt v0.4s, v0.4s, v1.4s
207 %tmp3 = icmp sgt <4 x i32> %A, %B;
208 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
212 define <2 x i64> @cmgt2xi64(<2 x i64> %A, <2 x i64> %B) {
213 ; CHECK-LABEL: cmgt2xi64:
215 ; CHECK-NEXT: cmgt v0.2d, v0.2d, v1.2d
217 %tmp3 = icmp sgt <2 x i64> %A, %B;
218 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
222 ; LT implemented as GT, so check reversed operands.
223 define <8 x i8> @cmlt8xi8(<8 x i8> %A, <8 x i8> %B) {
224 ; CHECK-LABEL: cmlt8xi8:
226 ; CHECK-NEXT: cmgt v0.8b, v1.8b, v0.8b
228 %tmp3 = icmp slt <8 x i8> %A, %B;
229 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
233 ; LT implemented as GT, so check reversed operands.
234 define <16 x i8> @cmlt16xi8(<16 x i8> %A, <16 x i8> %B) {
235 ; CHECK-LABEL: cmlt16xi8:
237 ; CHECK-NEXT: cmgt v0.16b, v1.16b, v0.16b
239 %tmp3 = icmp slt <16 x i8> %A, %B;
240 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
244 ; LT implemented as GT, so check reversed operands.
245 define <4 x i16> @cmlt4xi16(<4 x i16> %A, <4 x i16> %B) {
246 ; CHECK-LABEL: cmlt4xi16:
248 ; CHECK-NEXT: cmgt v0.4h, v1.4h, v0.4h
250 %tmp3 = icmp slt <4 x i16> %A, %B;
251 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
255 ; LT implemented as GT, so check reversed operands.
256 define <8 x i16> @cmlt8xi16(<8 x i16> %A, <8 x i16> %B) {
257 ; CHECK-LABEL: cmlt8xi16:
259 ; CHECK-NEXT: cmgt v0.8h, v1.8h, v0.8h
261 %tmp3 = icmp slt <8 x i16> %A, %B;
262 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
266 ; LT implemented as GT, so check reversed operands.
267 define <2 x i32> @cmlt2xi32(<2 x i32> %A, <2 x i32> %B) {
268 ; CHECK-LABEL: cmlt2xi32:
270 ; CHECK-NEXT: cmgt v0.2s, v1.2s, v0.2s
272 %tmp3 = icmp slt <2 x i32> %A, %B;
273 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
277 ; LT implemented as GT, so check reversed operands.
278 define <4 x i32> @cmlt4xi32(<4 x i32> %A, <4 x i32> %B) {
279 ; CHECK-LABEL: cmlt4xi32:
281 ; CHECK-NEXT: cmgt v0.4s, v1.4s, v0.4s
283 %tmp3 = icmp slt <4 x i32> %A, %B;
284 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
288 ; LT implemented as GT, so check reversed operands.
289 define <2 x i64> @cmlt2xi64(<2 x i64> %A, <2 x i64> %B) {
290 ; CHECK-LABEL: cmlt2xi64:
292 ; CHECK-NEXT: cmgt v0.2d, v1.2d, v0.2d
294 %tmp3 = icmp slt <2 x i64> %A, %B;
295 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
299 define <8 x i8> @cmge8xi8(<8 x i8> %A, <8 x i8> %B) {
300 ; CHECK-LABEL: cmge8xi8:
302 ; CHECK-NEXT: cmge v0.8b, v0.8b, v1.8b
304 %tmp3 = icmp sge <8 x i8> %A, %B;
305 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
309 define <16 x i8> @cmge16xi8(<16 x i8> %A, <16 x i8> %B) {
310 ; CHECK-LABEL: cmge16xi8:
312 ; CHECK-NEXT: cmge v0.16b, v0.16b, v1.16b
314 %tmp3 = icmp sge <16 x i8> %A, %B;
315 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
319 define <4 x i16> @cmge4xi16(<4 x i16> %A, <4 x i16> %B) {
320 ; CHECK-LABEL: cmge4xi16:
322 ; CHECK-NEXT: cmge v0.4h, v0.4h, v1.4h
324 %tmp3 = icmp sge <4 x i16> %A, %B;
325 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
329 define <8 x i16> @cmge8xi16(<8 x i16> %A, <8 x i16> %B) {
330 ; CHECK-LABEL: cmge8xi16:
332 ; CHECK-NEXT: cmge v0.8h, v0.8h, v1.8h
334 %tmp3 = icmp sge <8 x i16> %A, %B;
335 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
339 define <2 x i32> @cmge2xi32(<2 x i32> %A, <2 x i32> %B) {
340 ; CHECK-LABEL: cmge2xi32:
342 ; CHECK-NEXT: cmge v0.2s, v0.2s, v1.2s
344 %tmp3 = icmp sge <2 x i32> %A, %B;
345 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
349 define <4 x i32> @cmge4xi32(<4 x i32> %A, <4 x i32> %B) {
350 ; CHECK-LABEL: cmge4xi32:
352 ; CHECK-NEXT: cmge v0.4s, v0.4s, v1.4s
354 %tmp3 = icmp sge <4 x i32> %A, %B;
355 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
359 define <2 x i64> @cmge2xi64(<2 x i64> %A, <2 x i64> %B) {
360 ; CHECK-LABEL: cmge2xi64:
362 ; CHECK-NEXT: cmge v0.2d, v0.2d, v1.2d
364 %tmp3 = icmp sge <2 x i64> %A, %B;
365 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
369 ; LE implemented as GE, so check reversed operands.
370 define <8 x i8> @cmle8xi8(<8 x i8> %A, <8 x i8> %B) {
371 ; CHECK-LABEL: cmle8xi8:
373 ; CHECK-NEXT: cmge v0.8b, v1.8b, v0.8b
375 %tmp3 = icmp sle <8 x i8> %A, %B;
376 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
380 ; LE implemented as GE, so check reversed operands.
381 define <16 x i8> @cmle16xi8(<16 x i8> %A, <16 x i8> %B) {
382 ; CHECK-LABEL: cmle16xi8:
384 ; CHECK-NEXT: cmge v0.16b, v1.16b, v0.16b
386 %tmp3 = icmp sle <16 x i8> %A, %B;
387 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
391 ; LE implemented as GE, so check reversed operands.
392 define <4 x i16> @cmle4xi16(<4 x i16> %A, <4 x i16> %B) {
393 ; CHECK-LABEL: cmle4xi16:
395 ; CHECK-NEXT: cmge v0.4h, v1.4h, v0.4h
397 %tmp3 = icmp sle <4 x i16> %A, %B;
398 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
402 ; LE implemented as GE, so check reversed operands.
403 define <8 x i16> @cmle8xi16(<8 x i16> %A, <8 x i16> %B) {
404 ; CHECK-LABEL: cmle8xi16:
406 ; CHECK-NEXT: cmge v0.8h, v1.8h, v0.8h
408 %tmp3 = icmp sle <8 x i16> %A, %B;
409 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
413 ; LE implemented as GE, so check reversed operands.
414 define <2 x i32> @cmle2xi32(<2 x i32> %A, <2 x i32> %B) {
415 ; CHECK-LABEL: cmle2xi32:
417 ; CHECK-NEXT: cmge v0.2s, v1.2s, v0.2s
419 %tmp3 = icmp sle <2 x i32> %A, %B;
420 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
424 ; LE implemented as GE, so check reversed operands.
425 define <4 x i32> @cmle4xi32(<4 x i32> %A, <4 x i32> %B) {
426 ; CHECK-LABEL: cmle4xi32:
428 ; CHECK-NEXT: cmge v0.4s, v1.4s, v0.4s
430 %tmp3 = icmp sle <4 x i32> %A, %B;
431 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
435 ; LE implemented as GE, so check reversed operands.
436 define <2 x i64> @cmle2xi64(<2 x i64> %A, <2 x i64> %B) {
437 ; CHECK-LABEL: cmle2xi64:
439 ; CHECK-NEXT: cmge v0.2d, v1.2d, v0.2d
441 %tmp3 = icmp sle <2 x i64> %A, %B;
442 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
446 define <8 x i8> @cmhi8xi8(<8 x i8> %A, <8 x i8> %B) {
447 ; CHECK-LABEL: cmhi8xi8:
449 ; CHECK-NEXT: cmhi v0.8b, v0.8b, v1.8b
451 %tmp3 = icmp ugt <8 x i8> %A, %B;
452 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
456 define <16 x i8> @cmhi16xi8(<16 x i8> %A, <16 x i8> %B) {
457 ; CHECK-LABEL: cmhi16xi8:
459 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
461 %tmp3 = icmp ugt <16 x i8> %A, %B;
462 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
466 define <4 x i16> @cmhi4xi16(<4 x i16> %A, <4 x i16> %B) {
467 ; CHECK-LABEL: cmhi4xi16:
469 ; CHECK-NEXT: cmhi v0.4h, v0.4h, v1.4h
471 %tmp3 = icmp ugt <4 x i16> %A, %B;
472 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
476 define <8 x i16> @cmhi8xi16(<8 x i16> %A, <8 x i16> %B) {
477 ; CHECK-LABEL: cmhi8xi16:
479 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
481 %tmp3 = icmp ugt <8 x i16> %A, %B;
482 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
486 define <2 x i32> @cmhi2xi32(<2 x i32> %A, <2 x i32> %B) {
487 ; CHECK-LABEL: cmhi2xi32:
489 ; CHECK-NEXT: cmhi v0.2s, v0.2s, v1.2s
491 %tmp3 = icmp ugt <2 x i32> %A, %B;
492 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
496 define <4 x i32> @cmhi4xi32(<4 x i32> %A, <4 x i32> %B) {
497 ; CHECK-LABEL: cmhi4xi32:
499 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
501 %tmp3 = icmp ugt <4 x i32> %A, %B;
502 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
506 define <2 x i64> @cmhi2xi64(<2 x i64> %A, <2 x i64> %B) {
507 ; CHECK-LABEL: cmhi2xi64:
509 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
511 %tmp3 = icmp ugt <2 x i64> %A, %B;
512 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
516 ; LO implemented as HI, so check reversed operands.
517 define <8 x i8> @cmlo8xi8(<8 x i8> %A, <8 x i8> %B) {
518 ; CHECK-LABEL: cmlo8xi8:
520 ; CHECK-NEXT: cmhi v0.8b, v1.8b, v0.8b
522 %tmp3 = icmp ult <8 x i8> %A, %B;
523 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
527 ; LO implemented as HI, so check reversed operands.
528 define <16 x i8> @cmlo16xi8(<16 x i8> %A, <16 x i8> %B) {
529 ; CHECK-LABEL: cmlo16xi8:
531 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
533 %tmp3 = icmp ult <16 x i8> %A, %B;
534 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
538 ; LO implemented as HI, so check reversed operands.
539 define <4 x i16> @cmlo4xi16(<4 x i16> %A, <4 x i16> %B) {
540 ; CHECK-LABEL: cmlo4xi16:
542 ; CHECK-NEXT: cmhi v0.4h, v1.4h, v0.4h
544 %tmp3 = icmp ult <4 x i16> %A, %B;
545 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
549 ; LO implemented as HI, so check reversed operands.
550 define <8 x i16> @cmlo8xi16(<8 x i16> %A, <8 x i16> %B) {
551 ; CHECK-LABEL: cmlo8xi16:
553 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
555 %tmp3 = icmp ult <8 x i16> %A, %B;
556 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
560 ; LO implemented as HI, so check reversed operands.
561 define <2 x i32> @cmlo2xi32(<2 x i32> %A, <2 x i32> %B) {
562 ; CHECK-LABEL: cmlo2xi32:
564 ; CHECK-NEXT: cmhi v0.2s, v1.2s, v0.2s
566 %tmp3 = icmp ult <2 x i32> %A, %B;
567 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
571 ; LO implemented as HI, so check reversed operands.
572 define <4 x i32> @cmlo4xi32(<4 x i32> %A, <4 x i32> %B) {
573 ; CHECK-LABEL: cmlo4xi32:
575 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
577 %tmp3 = icmp ult <4 x i32> %A, %B;
578 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
582 ; LO implemented as HI, so check reversed operands.
583 define <2 x i64> @cmlo2xi64(<2 x i64> %A, <2 x i64> %B) {
584 ; CHECK-LABEL: cmlo2xi64:
586 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
588 %tmp3 = icmp ult <2 x i64> %A, %B;
589 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
593 define <8 x i8> @cmhs8xi8(<8 x i8> %A, <8 x i8> %B) {
594 ; CHECK-LABEL: cmhs8xi8:
596 ; CHECK-NEXT: cmhs v0.8b, v0.8b, v1.8b
598 %tmp3 = icmp uge <8 x i8> %A, %B;
599 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
603 define <16 x i8> @cmhs16xi8(<16 x i8> %A, <16 x i8> %B) {
604 ; CHECK-LABEL: cmhs16xi8:
606 ; CHECK-NEXT: cmhs v0.16b, v0.16b, v1.16b
608 %tmp3 = icmp uge <16 x i8> %A, %B;
609 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
613 define <4 x i16> @cmhs4xi16(<4 x i16> %A, <4 x i16> %B) {
614 ; CHECK-LABEL: cmhs4xi16:
616 ; CHECK-NEXT: cmhs v0.4h, v0.4h, v1.4h
618 %tmp3 = icmp uge <4 x i16> %A, %B;
619 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
623 define <8 x i16> @cmhs8xi16(<8 x i16> %A, <8 x i16> %B) {
624 ; CHECK-LABEL: cmhs8xi16:
626 ; CHECK-NEXT: cmhs v0.8h, v0.8h, v1.8h
628 %tmp3 = icmp uge <8 x i16> %A, %B;
629 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
633 define <2 x i32> @cmhs2xi32(<2 x i32> %A, <2 x i32> %B) {
634 ; CHECK-LABEL: cmhs2xi32:
636 ; CHECK-NEXT: cmhs v0.2s, v0.2s, v1.2s
638 %tmp3 = icmp uge <2 x i32> %A, %B;
639 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
643 define <4 x i32> @cmhs4xi32(<4 x i32> %A, <4 x i32> %B) {
644 ; CHECK-LABEL: cmhs4xi32:
646 ; CHECK-NEXT: cmhs v0.4s, v0.4s, v1.4s
648 %tmp3 = icmp uge <4 x i32> %A, %B;
649 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
653 define <2 x i64> @cmhs2xi64(<2 x i64> %A, <2 x i64> %B) {
654 ; CHECK-LABEL: cmhs2xi64:
656 ; CHECK-NEXT: cmhs v0.2d, v0.2d, v1.2d
658 %tmp3 = icmp uge <2 x i64> %A, %B;
659 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
663 ; LS implemented as HS, so check reversed operands.
664 define <8 x i8> @cmls8xi8(<8 x i8> %A, <8 x i8> %B) {
665 ; CHECK-LABEL: cmls8xi8:
667 ; CHECK-NEXT: cmhs v0.8b, v1.8b, v0.8b
669 %tmp3 = icmp ule <8 x i8> %A, %B;
670 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
674 ; LS implemented as HS, so check reversed operands.
675 define <16 x i8> @cmls16xi8(<16 x i8> %A, <16 x i8> %B) {
676 ; CHECK-LABEL: cmls16xi8:
678 ; CHECK-NEXT: cmhs v0.16b, v1.16b, v0.16b
680 %tmp3 = icmp ule <16 x i8> %A, %B;
681 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
685 ; LS implemented as HS, so check reversed operands.
686 define <4 x i16> @cmls4xi16(<4 x i16> %A, <4 x i16> %B) {
687 ; CHECK-LABEL: cmls4xi16:
689 ; CHECK-NEXT: cmhs v0.4h, v1.4h, v0.4h
691 %tmp3 = icmp ule <4 x i16> %A, %B;
692 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
696 ; LS implemented as HS, so check reversed operands.
697 define <8 x i16> @cmls8xi16(<8 x i16> %A, <8 x i16> %B) {
698 ; CHECK-LABEL: cmls8xi16:
700 ; CHECK-NEXT: cmhs v0.8h, v1.8h, v0.8h
702 %tmp3 = icmp ule <8 x i16> %A, %B;
703 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
707 ; LS implemented as HS, so check reversed operands.
708 define <2 x i32> @cmls2xi32(<2 x i32> %A, <2 x i32> %B) {
709 ; CHECK-LABEL: cmls2xi32:
711 ; CHECK-NEXT: cmhs v0.2s, v1.2s, v0.2s
713 %tmp3 = icmp ule <2 x i32> %A, %B;
714 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
718 ; LS implemented as HS, so check reversed operands.
719 define <4 x i32> @cmls4xi32(<4 x i32> %A, <4 x i32> %B) {
720 ; CHECK-LABEL: cmls4xi32:
722 ; CHECK-NEXT: cmhs v0.4s, v1.4s, v0.4s
724 %tmp3 = icmp ule <4 x i32> %A, %B;
725 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
729 ; LS implemented as HS, so check reversed operands.
730 define <2 x i64> @cmls2xi64(<2 x i64> %A, <2 x i64> %B) {
731 ; CHECK-LABEL: cmls2xi64:
733 ; CHECK-NEXT: cmhs v0.2d, v1.2d, v0.2d
735 %tmp3 = icmp ule <2 x i64> %A, %B;
736 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
740 define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
741 ; CHECK-SD-LABEL: cmtst8xi8:
742 ; CHECK-SD: // %bb.0:
743 ; CHECK-SD-NEXT: cmtst v0.8b, v0.8b, v1.8b
746 ; CHECK-GI-LABEL: cmtst8xi8:
747 ; CHECK-GI: // %bb.0:
748 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
749 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
750 ; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v2.8b
751 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
753 %tmp3 = and <8 x i8> %A, %B
754 %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
755 %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
759 define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
760 ; CHECK-SD-LABEL: cmtst16xi8:
761 ; CHECK-SD: // %bb.0:
762 ; CHECK-SD-NEXT: cmtst v0.16b, v0.16b, v1.16b
765 ; CHECK-GI-LABEL: cmtst16xi8:
766 ; CHECK-GI: // %bb.0:
767 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
768 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
769 ; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v2.16b
770 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
772 %tmp3 = and <16 x i8> %A, %B
773 %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
774 %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
778 define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
779 ; CHECK-SD-LABEL: cmtst4xi16:
780 ; CHECK-SD: // %bb.0:
781 ; CHECK-SD-NEXT: cmtst v0.4h, v0.4h, v1.4h
784 ; CHECK-GI-LABEL: cmtst4xi16:
785 ; CHECK-GI: // %bb.0:
786 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
787 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
788 ; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v2.4h
789 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
791 %tmp3 = and <4 x i16> %A, %B
792 %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
793 %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
797 define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
798 ; CHECK-SD-LABEL: cmtst8xi16:
799 ; CHECK-SD: // %bb.0:
800 ; CHECK-SD-NEXT: cmtst v0.8h, v0.8h, v1.8h
803 ; CHECK-GI-LABEL: cmtst8xi16:
804 ; CHECK-GI: // %bb.0:
805 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
806 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
807 ; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v2.8h
808 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
810 %tmp3 = and <8 x i16> %A, %B
811 %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
812 %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
816 define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
817 ; CHECK-SD-LABEL: cmtst2xi32:
818 ; CHECK-SD: // %bb.0:
819 ; CHECK-SD-NEXT: cmtst v0.2s, v0.2s, v1.2s
822 ; CHECK-GI-LABEL: cmtst2xi32:
823 ; CHECK-GI: // %bb.0:
824 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
825 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
826 ; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v2.2s
827 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
829 %tmp3 = and <2 x i32> %A, %B
830 %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
831 %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
835 define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
836 ; CHECK-SD-LABEL: cmtst4xi32:
837 ; CHECK-SD: // %bb.0:
838 ; CHECK-SD-NEXT: cmtst v0.4s, v0.4s, v1.4s
841 ; CHECK-GI-LABEL: cmtst4xi32:
842 ; CHECK-GI: // %bb.0:
843 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
844 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
845 ; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v2.4s
846 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
848 %tmp3 = and <4 x i32> %A, %B
849 %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
850 %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
854 define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
855 ; CHECK-SD-LABEL: cmtst2xi64:
856 ; CHECK-SD: // %bb.0:
857 ; CHECK-SD-NEXT: cmtst v0.2d, v0.2d, v1.2d
860 ; CHECK-GI-LABEL: cmtst2xi64:
861 ; CHECK-GI: // %bb.0:
862 ; CHECK-GI-NEXT: movi v2.2d, #0000000000000000
863 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
864 ; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v2.2d
865 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
867 %tmp3 = and <2 x i64> %A, %B
868 %tmp4 = icmp ne <2 x i64> %tmp3, zeroinitializer
869 %tmp5 = sext <2 x i1> %tmp4 to <2 x i64>
875 define <8 x i8> @cmeqz8xi8(<8 x i8> %A) {
876 ; CHECK-SD-LABEL: cmeqz8xi8:
877 ; CHECK-SD: // %bb.0:
878 ; CHECK-SD-NEXT: cmeq v0.8b, v0.8b, #0
881 ; CHECK-GI-LABEL: cmeqz8xi8:
882 ; CHECK-GI: // %bb.0:
883 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
884 ; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v1.8b
886 %tmp3 = icmp eq <8 x i8> %A, zeroinitializer;
887 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
891 define <16 x i8> @cmeqz16xi8(<16 x i8> %A) {
892 ; CHECK-SD-LABEL: cmeqz16xi8:
893 ; CHECK-SD: // %bb.0:
894 ; CHECK-SD-NEXT: cmeq v0.16b, v0.16b, #0
897 ; CHECK-GI-LABEL: cmeqz16xi8:
898 ; CHECK-GI: // %bb.0:
899 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
900 ; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v1.16b
902 %tmp3 = icmp eq <16 x i8> %A, zeroinitializer;
903 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
907 define <4 x i16> @cmeqz4xi16(<4 x i16> %A) {
908 ; CHECK-SD-LABEL: cmeqz4xi16:
909 ; CHECK-SD: // %bb.0:
910 ; CHECK-SD-NEXT: cmeq v0.4h, v0.4h, #0
913 ; CHECK-GI-LABEL: cmeqz4xi16:
914 ; CHECK-GI: // %bb.0:
915 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
916 ; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v1.4h
918 %tmp3 = icmp eq <4 x i16> %A, zeroinitializer;
919 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
923 define <8 x i16> @cmeqz8xi16(<8 x i16> %A) {
924 ; CHECK-SD-LABEL: cmeqz8xi16:
925 ; CHECK-SD: // %bb.0:
926 ; CHECK-SD-NEXT: cmeq v0.8h, v0.8h, #0
929 ; CHECK-GI-LABEL: cmeqz8xi16:
930 ; CHECK-GI: // %bb.0:
931 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
932 ; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v1.8h
934 %tmp3 = icmp eq <8 x i16> %A, zeroinitializer;
935 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
939 define <2 x i32> @cmeqz2xi32(<2 x i32> %A) {
940 ; CHECK-SD-LABEL: cmeqz2xi32:
941 ; CHECK-SD: // %bb.0:
942 ; CHECK-SD-NEXT: cmeq v0.2s, v0.2s, #0
945 ; CHECK-GI-LABEL: cmeqz2xi32:
946 ; CHECK-GI: // %bb.0:
947 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
948 ; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v1.2s
950 %tmp3 = icmp eq <2 x i32> %A, zeroinitializer;
951 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
955 define <4 x i32> @cmeqz4xi32(<4 x i32> %A) {
956 ; CHECK-SD-LABEL: cmeqz4xi32:
957 ; CHECK-SD: // %bb.0:
958 ; CHECK-SD-NEXT: cmeq v0.4s, v0.4s, #0
961 ; CHECK-GI-LABEL: cmeqz4xi32:
962 ; CHECK-GI: // %bb.0:
963 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
964 ; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v1.4s
966 %tmp3 = icmp eq <4 x i32> %A, zeroinitializer;
967 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
971 define <2 x i64> @cmeqz2xi64(<2 x i64> %A) {
972 ; CHECK-SD-LABEL: cmeqz2xi64:
973 ; CHECK-SD: // %bb.0:
974 ; CHECK-SD-NEXT: cmeq v0.2d, v0.2d, #0
977 ; CHECK-GI-LABEL: cmeqz2xi64:
978 ; CHECK-GI: // %bb.0:
979 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
980 ; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v1.2d
982 %tmp3 = icmp eq <2 x i64> %A, zeroinitializer;
983 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
988 define <8 x i8> @cmgez8xi8(<8 x i8> %A) {
989 ; CHECK-SD-LABEL: cmgez8xi8:
990 ; CHECK-SD: // %bb.0:
991 ; CHECK-SD-NEXT: cmge v0.8b, v0.8b, #0
994 ; CHECK-GI-LABEL: cmgez8xi8:
995 ; CHECK-GI: // %bb.0:
996 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
997 ; CHECK-GI-NEXT: cmge v0.8b, v0.8b, v1.8b
999 %tmp3 = icmp sge <8 x i8> %A, zeroinitializer;
1000 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1004 define <16 x i8> @cmgez16xi8(<16 x i8> %A) {
1005 ; CHECK-SD-LABEL: cmgez16xi8:
1006 ; CHECK-SD: // %bb.0:
1007 ; CHECK-SD-NEXT: cmge v0.16b, v0.16b, #0
1008 ; CHECK-SD-NEXT: ret
1010 ; CHECK-GI-LABEL: cmgez16xi8:
1011 ; CHECK-GI: // %bb.0:
1012 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1013 ; CHECK-GI-NEXT: cmge v0.16b, v0.16b, v1.16b
1014 ; CHECK-GI-NEXT: ret
1015 %tmp3 = icmp sge <16 x i8> %A, zeroinitializer;
1016 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1020 define <4 x i16> @cmgez4xi16(<4 x i16> %A) {
1021 ; CHECK-SD-LABEL: cmgez4xi16:
1022 ; CHECK-SD: // %bb.0:
1023 ; CHECK-SD-NEXT: cmge v0.4h, v0.4h, #0
1024 ; CHECK-SD-NEXT: ret
1026 ; CHECK-GI-LABEL: cmgez4xi16:
1027 ; CHECK-GI: // %bb.0:
1028 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1029 ; CHECK-GI-NEXT: cmge v0.4h, v0.4h, v1.4h
1030 ; CHECK-GI-NEXT: ret
1031 %tmp3 = icmp sge <4 x i16> %A, zeroinitializer;
1032 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1036 define <8 x i16> @cmgez8xi16(<8 x i16> %A) {
1037 ; CHECK-SD-LABEL: cmgez8xi16:
1038 ; CHECK-SD: // %bb.0:
1039 ; CHECK-SD-NEXT: cmge v0.8h, v0.8h, #0
1040 ; CHECK-SD-NEXT: ret
1042 ; CHECK-GI-LABEL: cmgez8xi16:
1043 ; CHECK-GI: // %bb.0:
1044 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1045 ; CHECK-GI-NEXT: cmge v0.8h, v0.8h, v1.8h
1046 ; CHECK-GI-NEXT: ret
1047 %tmp3 = icmp sge <8 x i16> %A, zeroinitializer;
1048 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1052 define <2 x i32> @cmgez2xi32(<2 x i32> %A) {
1053 ; CHECK-SD-LABEL: cmgez2xi32:
1054 ; CHECK-SD: // %bb.0:
1055 ; CHECK-SD-NEXT: cmge v0.2s, v0.2s, #0
1056 ; CHECK-SD-NEXT: ret
1058 ; CHECK-GI-LABEL: cmgez2xi32:
1059 ; CHECK-GI: // %bb.0:
1060 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1061 ; CHECK-GI-NEXT: cmge v0.2s, v0.2s, v1.2s
1062 ; CHECK-GI-NEXT: ret
1063 %tmp3 = icmp sge <2 x i32> %A, zeroinitializer;
1064 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1068 define <4 x i32> @cmgez4xi32(<4 x i32> %A) {
1069 ; CHECK-SD-LABEL: cmgez4xi32:
1070 ; CHECK-SD: // %bb.0:
1071 ; CHECK-SD-NEXT: cmge v0.4s, v0.4s, #0
1072 ; CHECK-SD-NEXT: ret
1074 ; CHECK-GI-LABEL: cmgez4xi32:
1075 ; CHECK-GI: // %bb.0:
1076 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1077 ; CHECK-GI-NEXT: cmge v0.4s, v0.4s, v1.4s
1078 ; CHECK-GI-NEXT: ret
1079 %tmp3 = icmp sge <4 x i32> %A, zeroinitializer;
1080 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1084 define <2 x i64> @cmgez2xi64(<2 x i64> %A) {
1085 ; CHECK-SD-LABEL: cmgez2xi64:
1086 ; CHECK-SD: // %bb.0:
1087 ; CHECK-SD-NEXT: cmge v0.2d, v0.2d, #0
1088 ; CHECK-SD-NEXT: ret
1090 ; CHECK-GI-LABEL: cmgez2xi64:
1091 ; CHECK-GI: // %bb.0:
1092 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1093 ; CHECK-GI-NEXT: cmge v0.2d, v0.2d, v1.2d
1094 ; CHECK-GI-NEXT: ret
1095 %tmp3 = icmp sge <2 x i64> %A, zeroinitializer;
1096 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1101 define <8 x i8> @cmgez8xi8_alt(<8 x i8> %A) {
1102 ; CHECK-SD-LABEL: cmgez8xi8_alt:
1103 ; CHECK-SD: // %bb.0:
1104 ; CHECK-SD-NEXT: cmge v0.8b, v0.8b, #0
1105 ; CHECK-SD-NEXT: ret
1107 ; CHECK-GI-LABEL: cmgez8xi8_alt:
1108 ; CHECK-GI: // %bb.0:
1109 ; CHECK-GI-NEXT: sshr v0.8b, v0.8b, #7
1110 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1111 ; CHECK-GI-NEXT: ret
1112 %sign = ashr <8 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
1113 %not = xor <8 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1117 define <16 x i8> @cmgez16xi8_alt(<16 x i8> %A) {
1118 ; CHECK-SD-LABEL: cmgez16xi8_alt:
1119 ; CHECK-SD: // %bb.0:
1120 ; CHECK-SD-NEXT: cmge v0.16b, v0.16b, #0
1121 ; CHECK-SD-NEXT: ret
1123 ; CHECK-GI-LABEL: cmgez16xi8_alt:
1124 ; CHECK-GI: // %bb.0:
1125 ; CHECK-GI-NEXT: sshr v0.16b, v0.16b, #7
1126 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1127 ; CHECK-GI-NEXT: ret
1128 %sign = ashr <16 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
1129 %not = xor <16 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1133 define <4 x i16> @cmgez4xi16_alt(<4 x i16> %A) {
1134 ; CHECK-SD-LABEL: cmgez4xi16_alt:
1135 ; CHECK-SD: // %bb.0:
1136 ; CHECK-SD-NEXT: cmge v0.4h, v0.4h, #0
1137 ; CHECK-SD-NEXT: ret
1139 ; CHECK-GI-LABEL: cmgez4xi16_alt:
1140 ; CHECK-GI: // %bb.0:
1141 ; CHECK-GI-NEXT: sshr v0.4h, v0.4h, #15
1142 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1143 ; CHECK-GI-NEXT: ret
1144 %sign = ashr <4 x i16> %A, <i16 15, i16 15, i16 15, i16 15>
1145 %not = xor <4 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1>
1149 define <8 x i16> @cmgez8xi16_alt(<8 x i16> %A) {
1150 ; CHECK-SD-LABEL: cmgez8xi16_alt:
1151 ; CHECK-SD: // %bb.0:
1152 ; CHECK-SD-NEXT: cmge v0.8h, v0.8h, #0
1153 ; CHECK-SD-NEXT: ret
1155 ; CHECK-GI-LABEL: cmgez8xi16_alt:
1156 ; CHECK-GI: // %bb.0:
1157 ; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #15
1158 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1159 ; CHECK-GI-NEXT: ret
1160 %sign = ashr <8 x i16> %A, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
1161 %not = xor <8 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1165 define <2 x i32> @cmgez2xi32_alt(<2 x i32> %A) {
1166 ; CHECK-SD-LABEL: cmgez2xi32_alt:
1167 ; CHECK-SD: // %bb.0:
1168 ; CHECK-SD-NEXT: cmge v0.2s, v0.2s, #0
1169 ; CHECK-SD-NEXT: ret
1171 ; CHECK-GI-LABEL: cmgez2xi32_alt:
1172 ; CHECK-GI: // %bb.0:
1173 ; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #31
1174 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1175 ; CHECK-GI-NEXT: ret
1176 %sign = ashr <2 x i32> %A, <i32 31, i32 31>
1177 %not = xor <2 x i32> %sign, <i32 -1, i32 -1>
1181 define <4 x i32> @cmgez4xi32_alt(<4 x i32> %A) {
1182 ; CHECK-SD-LABEL: cmgez4xi32_alt:
1183 ; CHECK-SD: // %bb.0:
1184 ; CHECK-SD-NEXT: cmge v0.4s, v0.4s, #0
1185 ; CHECK-SD-NEXT: ret
1187 ; CHECK-GI-LABEL: cmgez4xi32_alt:
1188 ; CHECK-GI: // %bb.0:
1189 ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
1190 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1191 ; CHECK-GI-NEXT: ret
1192 %sign = ashr <4 x i32> %A, <i32 31, i32 31, i32 31, i32 31>
1193 %not = xor <4 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1>
1197 define <2 x i64> @cmgez2xi64_alt(<2 x i64> %A) {
1198 ; CHECK-SD-LABEL: cmgez2xi64_alt:
1199 ; CHECK-SD: // %bb.0:
1200 ; CHECK-SD-NEXT: cmge v0.2d, v0.2d, #0
1201 ; CHECK-SD-NEXT: ret
1203 ; CHECK-GI-LABEL: cmgez2xi64_alt:
1204 ; CHECK-GI: // %bb.0:
1205 ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
1206 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1207 ; CHECK-GI-NEXT: ret
1208 %sign = ashr <2 x i64> %A, <i64 63, i64 63>
1209 %not = xor <2 x i64> %sign, <i64 -1, i64 -1>
1214 define <8 x i8> @cmgtz8xi8(<8 x i8> %A) {
1215 ; CHECK-SD-LABEL: cmgtz8xi8:
1216 ; CHECK-SD: // %bb.0:
1217 ; CHECK-SD-NEXT: cmgt v0.8b, v0.8b, #0
1218 ; CHECK-SD-NEXT: ret
1220 ; CHECK-GI-LABEL: cmgtz8xi8:
1221 ; CHECK-GI: // %bb.0:
1222 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1223 ; CHECK-GI-NEXT: cmgt v0.8b, v0.8b, v1.8b
1224 ; CHECK-GI-NEXT: ret
1225 %tmp3 = icmp sgt <8 x i8> %A, zeroinitializer;
1226 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1230 define <16 x i8> @cmgtz16xi8(<16 x i8> %A) {
1231 ; CHECK-SD-LABEL: cmgtz16xi8:
1232 ; CHECK-SD: // %bb.0:
1233 ; CHECK-SD-NEXT: cmgt v0.16b, v0.16b, #0
1234 ; CHECK-SD-NEXT: ret
1236 ; CHECK-GI-LABEL: cmgtz16xi8:
1237 ; CHECK-GI: // %bb.0:
1238 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1239 ; CHECK-GI-NEXT: cmgt v0.16b, v0.16b, v1.16b
1240 ; CHECK-GI-NEXT: ret
1241 %tmp3 = icmp sgt <16 x i8> %A, zeroinitializer;
1242 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1246 define <4 x i16> @cmgtz4xi16(<4 x i16> %A) {
1247 ; CHECK-SD-LABEL: cmgtz4xi16:
1248 ; CHECK-SD: // %bb.0:
1249 ; CHECK-SD-NEXT: cmgt v0.4h, v0.4h, #0
1250 ; CHECK-SD-NEXT: ret
1252 ; CHECK-GI-LABEL: cmgtz4xi16:
1253 ; CHECK-GI: // %bb.0:
1254 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1255 ; CHECK-GI-NEXT: cmgt v0.4h, v0.4h, v1.4h
1256 ; CHECK-GI-NEXT: ret
1257 %tmp3 = icmp sgt <4 x i16> %A, zeroinitializer;
1258 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1262 define <8 x i16> @cmgtz8xi16(<8 x i16> %A) {
1263 ; CHECK-SD-LABEL: cmgtz8xi16:
1264 ; CHECK-SD: // %bb.0:
1265 ; CHECK-SD-NEXT: cmgt v0.8h, v0.8h, #0
1266 ; CHECK-SD-NEXT: ret
1268 ; CHECK-GI-LABEL: cmgtz8xi16:
1269 ; CHECK-GI: // %bb.0:
1270 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1271 ; CHECK-GI-NEXT: cmgt v0.8h, v0.8h, v1.8h
1272 ; CHECK-GI-NEXT: ret
1273 %tmp3 = icmp sgt <8 x i16> %A, zeroinitializer;
1274 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1278 define <2 x i32> @cmgtz2xi32(<2 x i32> %A) {
1279 ; CHECK-SD-LABEL: cmgtz2xi32:
1280 ; CHECK-SD: // %bb.0:
1281 ; CHECK-SD-NEXT: cmgt v0.2s, v0.2s, #0
1282 ; CHECK-SD-NEXT: ret
1284 ; CHECK-GI-LABEL: cmgtz2xi32:
1285 ; CHECK-GI: // %bb.0:
1286 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1287 ; CHECK-GI-NEXT: cmgt v0.2s, v0.2s, v1.2s
1288 ; CHECK-GI-NEXT: ret
1289 %tmp3 = icmp sgt <2 x i32> %A, zeroinitializer;
1290 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1294 define <4 x i32> @cmgtz4xi32(<4 x i32> %A) {
1295 ; CHECK-SD-LABEL: cmgtz4xi32:
1296 ; CHECK-SD: // %bb.0:
1297 ; CHECK-SD-NEXT: cmgt v0.4s, v0.4s, #0
1298 ; CHECK-SD-NEXT: ret
1300 ; CHECK-GI-LABEL: cmgtz4xi32:
1301 ; CHECK-GI: // %bb.0:
1302 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1303 ; CHECK-GI-NEXT: cmgt v0.4s, v0.4s, v1.4s
1304 ; CHECK-GI-NEXT: ret
1305 %tmp3 = icmp sgt <4 x i32> %A, zeroinitializer;
1306 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1310 define <2 x i64> @cmgtz2xi64(<2 x i64> %A) {
1311 ; CHECK-SD-LABEL: cmgtz2xi64:
1312 ; CHECK-SD: // %bb.0:
1313 ; CHECK-SD-NEXT: cmgt v0.2d, v0.2d, #0
1314 ; CHECK-SD-NEXT: ret
1316 ; CHECK-GI-LABEL: cmgtz2xi64:
1317 ; CHECK-GI: // %bb.0:
1318 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1319 ; CHECK-GI-NEXT: cmgt v0.2d, v0.2d, v1.2d
1320 ; CHECK-GI-NEXT: ret
1321 %tmp3 = icmp sgt <2 x i64> %A, zeroinitializer;
1322 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1326 define <8 x i8> @cmlez8xi8(<8 x i8> %A) {
1327 ; CHECK-SD-LABEL: cmlez8xi8:
1328 ; CHECK-SD: // %bb.0:
1329 ; CHECK-SD-NEXT: cmle v0.8b, v0.8b, #0
1330 ; CHECK-SD-NEXT: ret
1332 ; CHECK-GI-LABEL: cmlez8xi8:
1333 ; CHECK-GI: // %bb.0:
1334 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1335 ; CHECK-GI-NEXT: cmge v0.8b, v1.8b, v0.8b
1336 ; CHECK-GI-NEXT: ret
1337 %tmp3 = icmp sle <8 x i8> %A, zeroinitializer;
1338 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1342 define <16 x i8> @cmlez16xi8(<16 x i8> %A) {
1343 ; CHECK-SD-LABEL: cmlez16xi8:
1344 ; CHECK-SD: // %bb.0:
1345 ; CHECK-SD-NEXT: cmle v0.16b, v0.16b, #0
1346 ; CHECK-SD-NEXT: ret
1348 ; CHECK-GI-LABEL: cmlez16xi8:
1349 ; CHECK-GI: // %bb.0:
1350 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1351 ; CHECK-GI-NEXT: cmge v0.16b, v1.16b, v0.16b
1352 ; CHECK-GI-NEXT: ret
1353 %tmp3 = icmp sle <16 x i8> %A, zeroinitializer;
1354 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1358 define <4 x i16> @cmlez4xi16(<4 x i16> %A) {
1359 ; CHECK-SD-LABEL: cmlez4xi16:
1360 ; CHECK-SD: // %bb.0:
1361 ; CHECK-SD-NEXT: cmle v0.4h, v0.4h, #0
1362 ; CHECK-SD-NEXT: ret
1364 ; CHECK-GI-LABEL: cmlez4xi16:
1365 ; CHECK-GI: // %bb.0:
1366 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1367 ; CHECK-GI-NEXT: cmge v0.4h, v1.4h, v0.4h
1368 ; CHECK-GI-NEXT: ret
1369 %tmp3 = icmp sle <4 x i16> %A, zeroinitializer;
1370 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1374 define <8 x i16> @cmlez8xi16(<8 x i16> %A) {
1375 ; CHECK-SD-LABEL: cmlez8xi16:
1376 ; CHECK-SD: // %bb.0:
1377 ; CHECK-SD-NEXT: cmle v0.8h, v0.8h, #0
1378 ; CHECK-SD-NEXT: ret
1380 ; CHECK-GI-LABEL: cmlez8xi16:
1381 ; CHECK-GI: // %bb.0:
1382 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1383 ; CHECK-GI-NEXT: cmge v0.8h, v1.8h, v0.8h
1384 ; CHECK-GI-NEXT: ret
1385 %tmp3 = icmp sle <8 x i16> %A, zeroinitializer;
1386 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1390 define <2 x i32> @cmlez2xi32(<2 x i32> %A) {
1391 ; CHECK-SD-LABEL: cmlez2xi32:
1392 ; CHECK-SD: // %bb.0:
1393 ; CHECK-SD-NEXT: cmle v0.2s, v0.2s, #0
1394 ; CHECK-SD-NEXT: ret
1396 ; CHECK-GI-LABEL: cmlez2xi32:
1397 ; CHECK-GI: // %bb.0:
1398 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1399 ; CHECK-GI-NEXT: cmge v0.2s, v1.2s, v0.2s
1400 ; CHECK-GI-NEXT: ret
1401 %tmp3 = icmp sle <2 x i32> %A, zeroinitializer;
1402 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1406 define <4 x i32> @cmlez4xi32(<4 x i32> %A) {
1407 ; CHECK-SD-LABEL: cmlez4xi32:
1408 ; CHECK-SD: // %bb.0:
1409 ; CHECK-SD-NEXT: cmle v0.4s, v0.4s, #0
1410 ; CHECK-SD-NEXT: ret
1412 ; CHECK-GI-LABEL: cmlez4xi32:
1413 ; CHECK-GI: // %bb.0:
1414 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1415 ; CHECK-GI-NEXT: cmge v0.4s, v1.4s, v0.4s
1416 ; CHECK-GI-NEXT: ret
1417 %tmp3 = icmp sle <4 x i32> %A, zeroinitializer;
1418 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1422 define <2 x i64> @cmlez2xi64(<2 x i64> %A) {
1423 ; CHECK-SD-LABEL: cmlez2xi64:
1424 ; CHECK-SD: // %bb.0:
1425 ; CHECK-SD-NEXT: cmle v0.2d, v0.2d, #0
1426 ; CHECK-SD-NEXT: ret
1428 ; CHECK-GI-LABEL: cmlez2xi64:
1429 ; CHECK-GI: // %bb.0:
1430 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1431 ; CHECK-GI-NEXT: cmge v0.2d, v1.2d, v0.2d
1432 ; CHECK-GI-NEXT: ret
1433 %tmp3 = icmp sle <2 x i64> %A, zeroinitializer;
1434 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1438 define <8 x i8> @cmltz8xi8(<8 x i8> %A) {
1439 ; CHECK-SD-LABEL: cmltz8xi8:
1440 ; CHECK-SD: // %bb.0:
1441 ; CHECK-SD-NEXT: cmlt v0.8b, v0.8b, #0
1442 ; CHECK-SD-NEXT: ret
1444 ; CHECK-GI-LABEL: cmltz8xi8:
1445 ; CHECK-GI: // %bb.0:
1446 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1447 ; CHECK-GI-NEXT: cmgt v0.8b, v1.8b, v0.8b
1448 ; CHECK-GI-NEXT: ret
1449 %tmp3 = icmp slt <8 x i8> %A, zeroinitializer;
1450 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1454 define <16 x i8> @cmltz16xi8(<16 x i8> %A) {
1455 ; CHECK-SD-LABEL: cmltz16xi8:
1456 ; CHECK-SD: // %bb.0:
1457 ; CHECK-SD-NEXT: cmlt v0.16b, v0.16b, #0
1458 ; CHECK-SD-NEXT: ret
1460 ; CHECK-GI-LABEL: cmltz16xi8:
1461 ; CHECK-GI: // %bb.0:
1462 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1463 ; CHECK-GI-NEXT: cmgt v0.16b, v1.16b, v0.16b
1464 ; CHECK-GI-NEXT: ret
1465 %tmp3 = icmp slt <16 x i8> %A, zeroinitializer;
1466 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1470 define <4 x i16> @cmltz4xi16(<4 x i16> %A) {
1471 ; CHECK-SD-LABEL: cmltz4xi16:
1472 ; CHECK-SD: // %bb.0:
1473 ; CHECK-SD-NEXT: cmlt v0.4h, v0.4h, #0
1474 ; CHECK-SD-NEXT: ret
1476 ; CHECK-GI-LABEL: cmltz4xi16:
1477 ; CHECK-GI: // %bb.0:
1478 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1479 ; CHECK-GI-NEXT: cmgt v0.4h, v1.4h, v0.4h
1480 ; CHECK-GI-NEXT: ret
1481 %tmp3 = icmp slt <4 x i16> %A, zeroinitializer;
1482 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1486 define <8 x i16> @cmltz8xi16(<8 x i16> %A) {
1487 ; CHECK-SD-LABEL: cmltz8xi16:
1488 ; CHECK-SD: // %bb.0:
1489 ; CHECK-SD-NEXT: cmlt v0.8h, v0.8h, #0
1490 ; CHECK-SD-NEXT: ret
1492 ; CHECK-GI-LABEL: cmltz8xi16:
1493 ; CHECK-GI: // %bb.0:
1494 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1495 ; CHECK-GI-NEXT: cmgt v0.8h, v1.8h, v0.8h
1496 ; CHECK-GI-NEXT: ret
1497 %tmp3 = icmp slt <8 x i16> %A, zeroinitializer;
1498 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1502 define <2 x i32> @cmltz2xi32(<2 x i32> %A) {
1503 ; CHECK-SD-LABEL: cmltz2xi32:
1504 ; CHECK-SD: // %bb.0:
1505 ; CHECK-SD-NEXT: cmlt v0.2s, v0.2s, #0
1506 ; CHECK-SD-NEXT: ret
1508 ; CHECK-GI-LABEL: cmltz2xi32:
1509 ; CHECK-GI: // %bb.0:
1510 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1511 ; CHECK-GI-NEXT: cmgt v0.2s, v1.2s, v0.2s
1512 ; CHECK-GI-NEXT: ret
1513 %tmp3 = icmp slt <2 x i32> %A, zeroinitializer;
1514 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1518 define <4 x i32> @cmltz4xi32(<4 x i32> %A) {
1519 ; CHECK-SD-LABEL: cmltz4xi32:
1520 ; CHECK-SD: // %bb.0:
1521 ; CHECK-SD-NEXT: cmlt v0.4s, v0.4s, #0
1522 ; CHECK-SD-NEXT: ret
1524 ; CHECK-GI-LABEL: cmltz4xi32:
1525 ; CHECK-GI: // %bb.0:
1526 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1527 ; CHECK-GI-NEXT: cmgt v0.4s, v1.4s, v0.4s
1528 ; CHECK-GI-NEXT: ret
1529 %tmp3 = icmp slt <4 x i32> %A, zeroinitializer;
1530 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1534 define <2 x i64> @cmltz2xi64(<2 x i64> %A) {
1535 ; CHECK-SD-LABEL: cmltz2xi64:
1536 ; CHECK-SD: // %bb.0:
1537 ; CHECK-SD-NEXT: cmlt v0.2d, v0.2d, #0
1538 ; CHECK-SD-NEXT: ret
1540 ; CHECK-GI-LABEL: cmltz2xi64:
1541 ; CHECK-GI: // %bb.0:
1542 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1543 ; CHECK-GI-NEXT: cmgt v0.2d, v1.2d, v0.2d
1544 ; CHECK-GI-NEXT: ret
1545 %tmp3 = icmp slt <2 x i64> %A, zeroinitializer;
1546 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1550 define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
1551 ; CHECK-SD-LABEL: cmneqz8xi8:
1552 ; CHECK-SD: // %bb.0:
1553 ; CHECK-SD-NEXT: cmtst v0.8b, v0.8b, v0.8b
1554 ; CHECK-SD-NEXT: ret
1556 ; CHECK-GI-LABEL: cmneqz8xi8:
1557 ; CHECK-GI: // %bb.0:
1558 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1559 ; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v1.8b
1560 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1561 ; CHECK-GI-NEXT: ret
1562 %tmp3 = icmp ne <8 x i8> %A, zeroinitializer;
1563 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1567 define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
1568 ; CHECK-SD-LABEL: cmneqz16xi8:
1569 ; CHECK-SD: // %bb.0:
1570 ; CHECK-SD-NEXT: cmtst v0.16b, v0.16b, v0.16b
1571 ; CHECK-SD-NEXT: ret
1573 ; CHECK-GI-LABEL: cmneqz16xi8:
1574 ; CHECK-GI: // %bb.0:
1575 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1576 ; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v1.16b
1577 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1578 ; CHECK-GI-NEXT: ret
1579 %tmp3 = icmp ne <16 x i8> %A, zeroinitializer;
1580 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1584 define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
1585 ; CHECK-SD-LABEL: cmneqz4xi16:
1586 ; CHECK-SD: // %bb.0:
1587 ; CHECK-SD-NEXT: cmtst v0.4h, v0.4h, v0.4h
1588 ; CHECK-SD-NEXT: ret
1590 ; CHECK-GI-LABEL: cmneqz4xi16:
1591 ; CHECK-GI: // %bb.0:
1592 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1593 ; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v1.4h
1594 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1595 ; CHECK-GI-NEXT: ret
1596 %tmp3 = icmp ne <4 x i16> %A, zeroinitializer;
1597 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1601 define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
1602 ; CHECK-SD-LABEL: cmneqz8xi16:
1603 ; CHECK-SD: // %bb.0:
1604 ; CHECK-SD-NEXT: cmtst v0.8h, v0.8h, v0.8h
1605 ; CHECK-SD-NEXT: ret
1607 ; CHECK-GI-LABEL: cmneqz8xi16:
1608 ; CHECK-GI: // %bb.0:
1609 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1610 ; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v1.8h
1611 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1612 ; CHECK-GI-NEXT: ret
1613 %tmp3 = icmp ne <8 x i16> %A, zeroinitializer;
1614 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1618 define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
1619 ; CHECK-SD-LABEL: cmneqz2xi32:
1620 ; CHECK-SD: // %bb.0:
1621 ; CHECK-SD-NEXT: cmtst v0.2s, v0.2s, v0.2s
1622 ; CHECK-SD-NEXT: ret
1624 ; CHECK-GI-LABEL: cmneqz2xi32:
1625 ; CHECK-GI: // %bb.0:
1626 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1627 ; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v1.2s
1628 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1629 ; CHECK-GI-NEXT: ret
1630 %tmp3 = icmp ne <2 x i32> %A, zeroinitializer;
1631 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1635 define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
1636 ; CHECK-SD-LABEL: cmneqz4xi32:
1637 ; CHECK-SD: // %bb.0:
1638 ; CHECK-SD-NEXT: cmtst v0.4s, v0.4s, v0.4s
1639 ; CHECK-SD-NEXT: ret
1641 ; CHECK-GI-LABEL: cmneqz4xi32:
1642 ; CHECK-GI: // %bb.0:
1643 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1644 ; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v1.4s
1645 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1646 ; CHECK-GI-NEXT: ret
1647 %tmp3 = icmp ne <4 x i32> %A, zeroinitializer;
1648 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1652 define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
1653 ; CHECK-SD-LABEL: cmneqz2xi64:
1654 ; CHECK-SD: // %bb.0:
1655 ; CHECK-SD-NEXT: cmtst v0.2d, v0.2d, v0.2d
1656 ; CHECK-SD-NEXT: ret
1658 ; CHECK-GI-LABEL: cmneqz2xi64:
1659 ; CHECK-GI: // %bb.0:
1660 ; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1661 ; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v1.2d
1662 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1663 ; CHECK-GI-NEXT: ret
1664 %tmp3 = icmp ne <2 x i64> %A, zeroinitializer;
1665 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1669 define <8 x i8> @cmhsz8xi8(<8 x i8> %A) {
1670 ; CHECK-LABEL: cmhsz8xi8:
1672 ; CHECK-NEXT: movi v1.8b, #2
1673 ; CHECK-NEXT: cmhs v0.8b, v0.8b, v1.8b
1675 %tmp3 = icmp uge <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1676 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1680 define <16 x i8> @cmhsz16xi8(<16 x i8> %A) {
1681 ; CHECK-LABEL: cmhsz16xi8:
1683 ; CHECK-NEXT: movi v1.16b, #2
1684 ; CHECK-NEXT: cmhs v0.16b, v0.16b, v1.16b
1686 %tmp3 = icmp uge <16 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1687 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1691 define <4 x i16> @cmhsz4xi16(<4 x i16> %A) {
1692 ; CHECK-LABEL: cmhsz4xi16:
1694 ; CHECK-NEXT: movi v1.4h, #2
1695 ; CHECK-NEXT: cmhs v0.4h, v0.4h, v1.4h
1697 %tmp3 = icmp uge <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
1698 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1702 define <8 x i16> @cmhsz8xi16(<8 x i16> %A) {
1703 ; CHECK-LABEL: cmhsz8xi16:
1705 ; CHECK-NEXT: movi v1.8h, #2
1706 ; CHECK-NEXT: cmhs v0.8h, v0.8h, v1.8h
1708 %tmp3 = icmp uge <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1709 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1713 define <2 x i32> @cmhsz2xi32(<2 x i32> %A) {
1714 ; CHECK-LABEL: cmhsz2xi32:
1716 ; CHECK-NEXT: movi v1.2s, #2
1717 ; CHECK-NEXT: cmhs v0.2s, v0.2s, v1.2s
1719 %tmp3 = icmp uge <2 x i32> %A, <i32 2, i32 2>
1720 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1724 define <4 x i32> @cmhsz4xi32(<4 x i32> %A) {
1725 ; CHECK-LABEL: cmhsz4xi32:
1727 ; CHECK-NEXT: movi v1.4s, #2
1728 ; CHECK-NEXT: cmhs v0.4s, v0.4s, v1.4s
1730 %tmp3 = icmp uge <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
1731 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1735 define <2 x i64> @cmhsz2xi64(<2 x i64> %A) {
1736 ; CHECK-SD-LABEL: cmhsz2xi64:
1737 ; CHECK-SD: // %bb.0:
1738 ; CHECK-SD-NEXT: mov w8, #2 // =0x2
1739 ; CHECK-SD-NEXT: dup v1.2d, x8
1740 ; CHECK-SD-NEXT: cmhs v0.2d, v0.2d, v1.2d
1741 ; CHECK-SD-NEXT: ret
1743 ; CHECK-GI-LABEL: cmhsz2xi64:
1744 ; CHECK-GI: // %bb.0:
1745 ; CHECK-GI-NEXT: adrp x8, .LCPI132_0
1746 ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI132_0]
1747 ; CHECK-GI-NEXT: cmhs v0.2d, v0.2d, v1.2d
1748 ; CHECK-GI-NEXT: ret
1749 ; GISEL-LABEL: cmhsz2xi64:
1751 ; GISEL-NEXT: adrp x8, .LCPI132_0
1752 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI132_0]
1753 ; GISEL-NEXT: cmhs v0.2d, v0.2d, v1.2d
1755 %tmp3 = icmp uge <2 x i64> %A, <i64 2, i64 2>
1756 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1761 define <8 x i8> @cmhiz8xi8(<8 x i8> %A) {
1762 ; CHECK-LABEL: cmhiz8xi8:
1764 ; CHECK-NEXT: movi v1.8b, #1
1765 ; CHECK-NEXT: cmhi v0.8b, v0.8b, v1.8b
1767 %tmp3 = icmp ugt <8 x i8> %A, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1768 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1772 define <16 x i8> @cmhiz16xi8(<16 x i8> %A) {
1773 ; CHECK-LABEL: cmhiz16xi8:
1775 ; CHECK-NEXT: movi v1.16b, #1
1776 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
1778 %tmp3 = icmp ugt <16 x i8> %A, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1779 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1783 define <4 x i16> @cmhiz4xi16(<4 x i16> %A) {
1784 ; CHECK-LABEL: cmhiz4xi16:
1786 ; CHECK-NEXT: movi v1.4h, #1
1787 ; CHECK-NEXT: cmhi v0.4h, v0.4h, v1.4h
1789 %tmp3 = icmp ugt <4 x i16> %A, <i16 1, i16 1, i16 1, i16 1>
1790 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1794 define <8 x i16> @cmhiz8xi16(<8 x i16> %A) {
1795 ; CHECK-LABEL: cmhiz8xi16:
1797 ; CHECK-NEXT: movi v1.8h, #1
1798 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
1800 %tmp3 = icmp ugt <8 x i16> %A, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1801 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1805 define <2 x i32> @cmhiz2xi32(<2 x i32> %A) {
1806 ; CHECK-LABEL: cmhiz2xi32:
1808 ; CHECK-NEXT: movi v1.2s, #1
1809 ; CHECK-NEXT: cmhi v0.2s, v0.2s, v1.2s
1811 %tmp3 = icmp ugt <2 x i32> %A, <i32 1, i32 1>
1812 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1816 define <4 x i32> @cmhiz4xi32(<4 x i32> %A) {
1817 ; CHECK-LABEL: cmhiz4xi32:
1819 ; CHECK-NEXT: movi v1.4s, #1
1820 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
1822 %tmp3 = icmp ugt <4 x i32> %A, <i32 1, i32 1, i32 1, i32 1>
1823 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1827 define <2 x i64> @cmhiz2xi64(<2 x i64> %A) {
1828 ; CHECK-SD-LABEL: cmhiz2xi64:
1829 ; CHECK-SD: // %bb.0:
1830 ; CHECK-SD-NEXT: mov w8, #1 // =0x1
1831 ; CHECK-SD-NEXT: dup v1.2d, x8
1832 ; CHECK-SD-NEXT: cmhi v0.2d, v0.2d, v1.2d
1833 ; CHECK-SD-NEXT: ret
1835 ; CHECK-GI-LABEL: cmhiz2xi64:
1836 ; CHECK-GI: // %bb.0:
1837 ; CHECK-GI-NEXT: adrp x8, .LCPI139_0
1838 ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI139_0]
1839 ; CHECK-GI-NEXT: cmhi v0.2d, v0.2d, v1.2d
1840 ; CHECK-GI-NEXT: ret
1841 ; GISEL-LABEL: cmhiz2xi64:
1843 ; GISEL-NEXT: adrp x8, .LCPI139_0
1844 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI139_0]
1845 ; GISEL-NEXT: cmhi v0.2d, v0.2d, v1.2d
1847 %tmp3 = icmp ugt <2 x i64> %A, <i64 1, i64 1>
1848 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1852 ; LS implemented as HS, so check reversed operands.
1853 define <8 x i8> @cmlsz8xi8(<8 x i8> %A) {
1854 ; CHECK-LABEL: cmlsz8xi8:
1856 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1857 ; CHECK-NEXT: cmhs v0.8b, v1.8b, v0.8b
1859 %tmp3 = icmp ule <8 x i8> %A, zeroinitializer;
1860 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1864 ; LS implemented as HS, so check reversed operands.
1865 define <16 x i8> @cmlsz16xi8(<16 x i8> %A) {
1866 ; CHECK-LABEL: cmlsz16xi8:
1868 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1869 ; CHECK-NEXT: cmhs v0.16b, v1.16b, v0.16b
1871 %tmp3 = icmp ule <16 x i8> %A, zeroinitializer;
1872 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1876 ; LS implemented as HS, so check reversed operands.
1877 define <4 x i16> @cmlsz4xi16(<4 x i16> %A) {
1878 ; CHECK-LABEL: cmlsz4xi16:
1880 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1881 ; CHECK-NEXT: cmhs v0.4h, v1.4h, v0.4h
1883 %tmp3 = icmp ule <4 x i16> %A, zeroinitializer;
1884 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1888 ; LS implemented as HS, so check reversed operands.
1889 define <8 x i16> @cmlsz8xi16(<8 x i16> %A) {
1890 ; CHECK-LABEL: cmlsz8xi16:
1892 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1893 ; CHECK-NEXT: cmhs v0.8h, v1.8h, v0.8h
1895 %tmp3 = icmp ule <8 x i16> %A, zeroinitializer;
1896 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1900 ; LS implemented as HS, so check reversed operands.
1901 define <2 x i32> @cmlsz2xi32(<2 x i32> %A) {
1902 ; CHECK-LABEL: cmlsz2xi32:
1904 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1905 ; CHECK-NEXT: cmhs v0.2s, v1.2s, v0.2s
1907 %tmp3 = icmp ule <2 x i32> %A, zeroinitializer;
1908 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1912 ; LS implemented as HS, so check reversed operands.
1913 define <4 x i32> @cmlsz4xi32(<4 x i32> %A) {
1914 ; CHECK-LABEL: cmlsz4xi32:
1916 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1917 ; CHECK-NEXT: cmhs v0.4s, v1.4s, v0.4s
1919 %tmp3 = icmp ule <4 x i32> %A, zeroinitializer;
1920 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1924 ; LS implemented as HS, so check reversed operands.
1925 define <2 x i64> @cmlsz2xi64(<2 x i64> %A) {
1926 ; CHECK-LABEL: cmlsz2xi64:
1928 ; CHECK-NEXT: movi v1.2d, #0000000000000000
1929 ; CHECK-NEXT: cmhs v0.2d, v1.2d, v0.2d
1931 %tmp3 = icmp ule <2 x i64> %A, zeroinitializer;
1932 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1936 ; LO implemented as HI, so check reversed operands.
1937 define <8 x i8> @cmloz8xi8(<8 x i8> %A) {
1938 ; CHECK-LABEL: cmloz8xi8:
1940 ; CHECK-NEXT: movi v1.8b, #2
1941 ; CHECK-NEXT: cmhi v0.8b, v1.8b, v0.8b
1943 %tmp3 = icmp ult <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1944 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1948 ; LO implemented as HI, so check reversed operands.
1949 define <16 x i8> @cmloz16xi8(<16 x i8> %A) {
1950 ; CHECK-LABEL: cmloz16xi8:
1952 ; CHECK-NEXT: movi v1.16b, #2
1953 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
1955 %tmp3 = icmp ult <16 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1956 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1960 ; LO implemented as HI, so check reversed operands.
1961 define <4 x i16> @cmloz4xi16(<4 x i16> %A) {
1962 ; CHECK-LABEL: cmloz4xi16:
1964 ; CHECK-NEXT: movi v1.4h, #2
1965 ; CHECK-NEXT: cmhi v0.4h, v1.4h, v0.4h
1967 %tmp3 = icmp ult <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
1968 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1972 ; LO implemented as HI, so check reversed operands.
1973 define <8 x i16> @cmloz8xi16(<8 x i16> %A) {
1974 ; CHECK-LABEL: cmloz8xi16:
1976 ; CHECK-NEXT: movi v1.8h, #2
1977 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
1979 %tmp3 = icmp ult <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1980 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1984 ; LO implemented as HI, so check reversed operands.
1985 define <2 x i32> @cmloz2xi32(<2 x i32> %A) {
1986 ; CHECK-LABEL: cmloz2xi32:
1988 ; CHECK-NEXT: movi v1.2s, #2
1989 ; CHECK-NEXT: cmhi v0.2s, v1.2s, v0.2s
1991 %tmp3 = icmp ult <2 x i32> %A, <i32 2, i32 2>
1992 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1996 ; LO implemented as HI, so check reversed operands.
1997 define <4 x i32> @cmloz4xi32(<4 x i32> %A) {
1998 ; CHECK-LABEL: cmloz4xi32:
2000 ; CHECK-NEXT: movi v1.4s, #2
2001 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
2003 %tmp3 = icmp ult <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
2004 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2008 ; LO implemented as HI, so check reversed operands.
2009 define <2 x i64> @cmloz2xi64(<2 x i64> %A) {
2010 ; CHECK-SD-LABEL: cmloz2xi64:
2011 ; CHECK-SD: // %bb.0:
2012 ; CHECK-SD-NEXT: mov w8, #2 // =0x2
2013 ; CHECK-SD-NEXT: dup v1.2d, x8
2014 ; CHECK-SD-NEXT: cmhi v0.2d, v1.2d, v0.2d
2015 ; CHECK-SD-NEXT: ret
2017 ; CHECK-GI-LABEL: cmloz2xi64:
2018 ; CHECK-GI: // %bb.0:
2019 ; CHECK-GI-NEXT: adrp x8, .LCPI153_0
2020 ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI153_0]
2021 ; CHECK-GI-NEXT: cmhi v0.2d, v1.2d, v0.2d
2022 ; CHECK-GI-NEXT: ret
2023 ; GISEL-LABEL: cmloz2xi64:
2025 ; GISEL-NEXT: adrp x8, .LCPI153_0
2026 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI153_0]
2027 ; GISEL-NEXT: cmhi v0.2d, v1.2d, v0.2d
2029 %tmp3 = icmp ult <2 x i64> %A, <i64 2, i64 2>
2030 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2034 define <2 x i32> @fcmoeq2xfloat(<2 x float> %A, <2 x float> %B) {
2035 ; CHECK-LABEL: fcmoeq2xfloat:
2037 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
2039 %tmp3 = fcmp oeq <2 x float> %A, %B
2040 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2044 define <4 x i32> @fcmoeq4xfloat(<4 x float> %A, <4 x float> %B) {
2045 ; CHECK-LABEL: fcmoeq4xfloat:
2047 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
2049 %tmp3 = fcmp oeq <4 x float> %A, %B
2050 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2053 define <2 x i64> @fcmoeq2xdouble(<2 x double> %A, <2 x double> %B) {
2054 ; CHECK-LABEL: fcmoeq2xdouble:
2056 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
2058 %tmp3 = fcmp oeq <2 x double> %A, %B
2059 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2063 define <2 x i32> @fcmoge2xfloat(<2 x float> %A, <2 x float> %B) {
2064 ; CHECK-LABEL: fcmoge2xfloat:
2066 ; CHECK-NEXT: fcmge v0.2s, v0.2s, v1.2s
2068 %tmp3 = fcmp oge <2 x float> %A, %B
2069 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2073 define <4 x i32> @fcmoge4xfloat(<4 x float> %A, <4 x float> %B) {
2074 ; CHECK-LABEL: fcmoge4xfloat:
2076 ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
2078 %tmp3 = fcmp oge <4 x float> %A, %B
2079 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2082 define <2 x i64> @fcmoge2xdouble(<2 x double> %A, <2 x double> %B) {
2083 ; CHECK-LABEL: fcmoge2xdouble:
2085 ; CHECK-NEXT: fcmge v0.2d, v0.2d, v1.2d
2087 %tmp3 = fcmp oge <2 x double> %A, %B
2088 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2092 define <2 x i32> @fcmogt2xfloat(<2 x float> %A, <2 x float> %B) {
2093 ; CHECK-LABEL: fcmogt2xfloat:
2095 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, v1.2s
2097 %tmp3 = fcmp ogt <2 x float> %A, %B
2098 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2102 define <4 x i32> @fcmogt4xfloat(<4 x float> %A, <4 x float> %B) {
2103 ; CHECK-LABEL: fcmogt4xfloat:
2105 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, v1.4s
2107 %tmp3 = fcmp ogt <4 x float> %A, %B
2108 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2111 define <2 x i64> @fcmogt2xdouble(<2 x double> %A, <2 x double> %B) {
2112 ; CHECK-LABEL: fcmogt2xdouble:
2114 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, v1.2d
2116 %tmp3 = fcmp ogt <2 x double> %A, %B
2117 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2121 ; OLE implemented as OGE, so check reversed operands.
2122 define <2 x i32> @fcmole2xfloat(<2 x float> %A, <2 x float> %B) {
2123 ; CHECK-LABEL: fcmole2xfloat:
2125 ; CHECK-NEXT: fcmge v0.2s, v1.2s, v0.2s
2127 %tmp3 = fcmp ole <2 x float> %A, %B
2128 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2132 ; OLE implemented as OGE, so check reversed operands.
2133 define <4 x i32> @fcmole4xfloat(<4 x float> %A, <4 x float> %B) {
2134 ; CHECK-LABEL: fcmole4xfloat:
2136 ; CHECK-NEXT: fcmge v0.4s, v1.4s, v0.4s
2138 %tmp3 = fcmp ole <4 x float> %A, %B
2139 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2143 ; OLE implemented as OGE, so check reversed operands.
2144 define <2 x i64> @fcmole2xdouble(<2 x double> %A, <2 x double> %B) {
2145 ; CHECK-LABEL: fcmole2xdouble:
2147 ; CHECK-NEXT: fcmge v0.2d, v1.2d, v0.2d
2149 %tmp3 = fcmp ole <2 x double> %A, %B
2150 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2154 ; OLE implemented as OGE, so check reversed operands.
2155 define <2 x i32> @fcmolt2xfloat(<2 x float> %A, <2 x float> %B) {
2156 ; CHECK-LABEL: fcmolt2xfloat:
2158 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2160 %tmp3 = fcmp olt <2 x float> %A, %B
2161 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2165 ; OLE implemented as OGE, so check reversed operands.
2166 define <4 x i32> @fcmolt4xfloat(<4 x float> %A, <4 x float> %B) {
2167 ; CHECK-LABEL: fcmolt4xfloat:
2169 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2171 %tmp3 = fcmp olt <4 x float> %A, %B
2172 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2176 ; OLE implemented as OGE, so check reversed operands.
2177 define <2 x i64> @fcmolt2xdouble(<2 x double> %A, <2 x double> %B) {
2178 ; CHECK-LABEL: fcmolt2xdouble:
2180 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2182 %tmp3 = fcmp olt <2 x double> %A, %B
2183 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2187 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
2188 define <2 x i32> @fcmone2xfloat(<2 x float> %A, <2 x float> %B) {
2189 ; CHECK-LABEL: fcmone2xfloat:
2191 ; CHECK-NEXT: fcmgt v2.2s, v0.2s, v1.2s
2192 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2193 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
2195 %tmp3 = fcmp one <2 x float> %A, %B
2196 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2200 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
2201 define <4 x i32> @fcmone4xfloat(<4 x float> %A, <4 x float> %B) {
2202 ; CHECK-LABEL: fcmone4xfloat:
2204 ; CHECK-NEXT: fcmgt v2.4s, v0.4s, v1.4s
2205 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2206 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2208 %tmp3 = fcmp one <4 x float> %A, %B
2209 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2213 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
2214 ; todo check reversed operands
2215 define <2 x i64> @fcmone2xdouble(<2 x double> %A, <2 x double> %B) {
2216 ; CHECK-LABEL: fcmone2xdouble:
2218 ; CHECK-NEXT: fcmgt v2.2d, v0.2d, v1.2d
2219 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2220 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2222 %tmp3 = fcmp one <2 x double> %A, %B
2223 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2227 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
2228 define <2 x i32> @fcmord2xfloat(<2 x float> %A, <2 x float> %B) {
2229 ; CHECK-LABEL: fcmord2xfloat:
2231 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
2232 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2233 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
2235 %tmp3 = fcmp ord <2 x float> %A, %B
2236 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2240 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
2241 define <4 x i32> @fcmord4xfloat(<4 x float> %A, <4 x float> %B) {
2242 ; CHECK-LABEL: fcmord4xfloat:
2244 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
2245 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2246 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2248 %tmp3 = fcmp ord <4 x float> %A, %B
2249 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2253 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
2254 define <2 x i64> @fcmord2xdouble(<2 x double> %A, <2 x double> %B) {
2255 ; CHECK-LABEL: fcmord2xdouble:
2257 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
2258 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2259 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2261 %tmp3 = fcmp ord <2 x double> %A, %B
2262 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2267 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
2268 define <2 x i32> @fcmuno2xfloat(<2 x float> %A, <2 x float> %B) {
2269 ; CHECK-LABEL: fcmuno2xfloat:
2271 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
2272 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2273 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
2274 ; CHECK-NEXT: mvn v0.8b, v0.8b
2276 %tmp3 = fcmp uno <2 x float> %A, %B
2277 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2281 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
2282 define <4 x i32> @fcmuno4xfloat(<4 x float> %A, <4 x float> %B) {
2283 ; CHECK-LABEL: fcmuno4xfloat:
2285 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
2286 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2287 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2288 ; CHECK-NEXT: mvn v0.16b, v0.16b
2290 %tmp3 = fcmp uno <4 x float> %A, %B
2291 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2295 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
2296 define <2 x i64> @fcmuno2xdouble(<2 x double> %A, <2 x double> %B) {
2297 ; CHECK-LABEL: fcmuno2xdouble:
2299 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
2300 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2301 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2302 ; CHECK-NEXT: mvn v0.16b, v0.16b
2304 %tmp3 = fcmp uno <2 x double> %A, %B
2305 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2309 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
2310 define <2 x i32> @fcmueq2xfloat(<2 x float> %A, <2 x float> %B) {
2311 ; CHECK-LABEL: fcmueq2xfloat:
2313 ; CHECK-NEXT: fcmgt v2.2s, v0.2s, v1.2s
2314 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2315 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
2316 ; CHECK-NEXT: mvn v0.8b, v0.8b
2318 %tmp3 = fcmp ueq <2 x float> %A, %B
2319 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2323 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
2324 define <4 x i32> @fcmueq4xfloat(<4 x float> %A, <4 x float> %B) {
2325 ; CHECK-LABEL: fcmueq4xfloat:
2327 ; CHECK-NEXT: fcmgt v2.4s, v0.4s, v1.4s
2328 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2329 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2330 ; CHECK-NEXT: mvn v0.16b, v0.16b
2332 %tmp3 = fcmp ueq <4 x float> %A, %B
2333 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2337 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
2338 define <2 x i64> @fcmueq2xdouble(<2 x double> %A, <2 x double> %B) {
2339 ; CHECK-LABEL: fcmueq2xdouble:
2341 ; CHECK-NEXT: fcmgt v2.2d, v0.2d, v1.2d
2342 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2343 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
2344 ; CHECK-NEXT: mvn v0.16b, v0.16b
2346 %tmp3 = fcmp ueq <2 x double> %A, %B
2347 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2351 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
2352 define <2 x i32> @fcmuge2xfloat(<2 x float> %A, <2 x float> %B) {
2353 ; CHECK-LABEL: fcmuge2xfloat:
2355 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
2356 ; CHECK-NEXT: mvn v0.8b, v0.8b
2358 %tmp3 = fcmp uge <2 x float> %A, %B
2359 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2363 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
2364 define <4 x i32> @fcmuge4xfloat(<4 x float> %A, <4 x float> %B) {
2365 ; CHECK-LABEL: fcmuge4xfloat:
2367 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
2368 ; CHECK-NEXT: mvn v0.16b, v0.16b
2370 %tmp3 = fcmp uge <4 x float> %A, %B
2371 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2375 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
2376 define <2 x i64> @fcmuge2xdouble(<2 x double> %A, <2 x double> %B) {
2377 ; CHECK-LABEL: fcmuge2xdouble:
2379 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
2380 ; CHECK-NEXT: mvn v0.16b, v0.16b
2382 %tmp3 = fcmp uge <2 x double> %A, %B
2383 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2387 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
2388 define <2 x i32> @fcmugt2xfloat(<2 x float> %A, <2 x float> %B) {
2389 ; CHECK-LABEL: fcmugt2xfloat:
2391 ; CHECK-NEXT: fcmge v0.2s, v1.2s, v0.2s
2392 ; CHECK-NEXT: mvn v0.8b, v0.8b
2394 %tmp3 = fcmp ugt <2 x float> %A, %B
2395 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2399 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
2400 define <4 x i32> @fcmugt4xfloat(<4 x float> %A, <4 x float> %B) {
2401 ; CHECK-LABEL: fcmugt4xfloat:
2403 ; CHECK-NEXT: fcmge v0.4s, v1.4s, v0.4s
2404 ; CHECK-NEXT: mvn v0.16b, v0.16b
2406 %tmp3 = fcmp ugt <4 x float> %A, %B
2407 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2411 define <2 x i64> @fcmugt2xdouble(<2 x double> %A, <2 x double> %B) {
2412 ; CHECK-LABEL: fcmugt2xdouble:
2414 ; CHECK-NEXT: fcmge v0.2d, v1.2d, v0.2d
2415 ; CHECK-NEXT: mvn v0.16b, v0.16b
2417 %tmp3 = fcmp ugt <2 x double> %A, %B
2418 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2422 ; ULE implemented as !OGT.
2423 define <2 x i32> @fcmule2xfloat(<2 x float> %A, <2 x float> %B) {
2424 ; CHECK-LABEL: fcmule2xfloat:
2426 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, v1.2s
2427 ; CHECK-NEXT: mvn v0.8b, v0.8b
2429 %tmp3 = fcmp ule <2 x float> %A, %B
2430 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2434 ; ULE implemented as !OGT.
2435 define <4 x i32> @fcmule4xfloat(<4 x float> %A, <4 x float> %B) {
2436 ; CHECK-LABEL: fcmule4xfloat:
2438 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, v1.4s
2439 ; CHECK-NEXT: mvn v0.16b, v0.16b
2441 %tmp3 = fcmp ule <4 x float> %A, %B
2442 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2446 ; ULE implemented as !OGT.
2447 define <2 x i64> @fcmule2xdouble(<2 x double> %A, <2 x double> %B) {
2448 ; CHECK-LABEL: fcmule2xdouble:
2450 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, v1.2d
2451 ; CHECK-NEXT: mvn v0.16b, v0.16b
2453 %tmp3 = fcmp ule <2 x double> %A, %B
2454 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2458 ; ULT implemented as !OGE.
2459 define <2 x i32> @fcmult2xfloat(<2 x float> %A, <2 x float> %B) {
2460 ; CHECK-LABEL: fcmult2xfloat:
2462 ; CHECK-NEXT: fcmge v0.2s, v0.2s, v1.2s
2463 ; CHECK-NEXT: mvn v0.8b, v0.8b
2465 %tmp3 = fcmp ult <2 x float> %A, %B
2466 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2470 ; ULT implemented as !OGE.
2471 define <4 x i32> @fcmult4xfloat(<4 x float> %A, <4 x float> %B) {
2472 ; CHECK-LABEL: fcmult4xfloat:
2474 ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
2475 ; CHECK-NEXT: mvn v0.16b, v0.16b
2477 %tmp3 = fcmp ult <4 x float> %A, %B
2478 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2482 ; ULT implemented as !OGE.
2483 define <2 x i64> @fcmult2xdouble(<2 x double> %A, <2 x double> %B) {
2484 ; CHECK-LABEL: fcmult2xdouble:
2486 ; CHECK-NEXT: fcmge v0.2d, v0.2d, v1.2d
2487 ; CHECK-NEXT: mvn v0.16b, v0.16b
2489 %tmp3 = fcmp ult <2 x double> %A, %B
2490 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2495 define <2 x i32> @fcmune2xfloat(<2 x float> %A, <2 x float> %B) {
2496 ; CHECK-LABEL: fcmune2xfloat:
2498 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
2499 ; CHECK-NEXT: mvn v0.8b, v0.8b
2501 %tmp3 = fcmp une <2 x float> %A, %B
2502 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2507 define <4 x i32> @fcmune4xfloat(<4 x float> %A, <4 x float> %B) {
2508 ; CHECK-LABEL: fcmune4xfloat:
2510 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
2511 ; CHECK-NEXT: mvn v0.16b, v0.16b
2513 %tmp3 = fcmp une <4 x float> %A, %B
2514 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2519 define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
2520 ; CHECK-LABEL: fcmune2xdouble:
2522 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
2523 ; CHECK-NEXT: mvn v0.16b, v0.16b
2525 %tmp3 = fcmp une <2 x double> %A, %B
2526 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2530 define <2 x i32> @fcmoeqz2xfloat(<2 x float> %A) {
2531 ; CHECK-LABEL: fcmoeqz2xfloat:
2533 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
2535 %tmp3 = fcmp oeq <2 x float> %A, zeroinitializer
2536 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2540 define <4 x i32> @fcmoeqz4xfloat(<4 x float> %A) {
2541 ; CHECK-LABEL: fcmoeqz4xfloat:
2543 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
2545 %tmp3 = fcmp oeq <4 x float> %A, zeroinitializer
2546 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2549 define <2 x i64> @fcmoeqz2xdouble(<2 x double> %A) {
2550 ; CHECK-LABEL: fcmoeqz2xdouble:
2552 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
2554 %tmp3 = fcmp oeq <2 x double> %A, zeroinitializer
2555 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2560 define <2 x i32> @fcmogez2xfloat(<2 x float> %A) {
2561 ; CHECK-LABEL: fcmogez2xfloat:
2563 ; CHECK-NEXT: fcmge v0.2s, v0.2s, #0.0
2565 %tmp3 = fcmp oge <2 x float> %A, zeroinitializer
2566 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2570 define <4 x i32> @fcmogez4xfloat(<4 x float> %A) {
2571 ; CHECK-LABEL: fcmogez4xfloat:
2573 ; CHECK-NEXT: fcmge v0.4s, v0.4s, #0.0
2575 %tmp3 = fcmp oge <4 x float> %A, zeroinitializer
2576 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2579 define <2 x i64> @fcmogez2xdouble(<2 x double> %A) {
2580 ; CHECK-LABEL: fcmogez2xdouble:
2582 ; CHECK-NEXT: fcmge v0.2d, v0.2d, #0.0
2584 %tmp3 = fcmp oge <2 x double> %A, zeroinitializer
2585 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2589 define <2 x i32> @fcmogtz2xfloat(<2 x float> %A) {
2590 ; CHECK-LABEL: fcmogtz2xfloat:
2592 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, #0.0
2594 %tmp3 = fcmp ogt <2 x float> %A, zeroinitializer
2595 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2599 define <4 x i32> @fcmogtz4xfloat(<4 x float> %A) {
2600 ; CHECK-LABEL: fcmogtz4xfloat:
2602 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, #0.0
2604 %tmp3 = fcmp ogt <4 x float> %A, zeroinitializer
2605 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2608 define <2 x i64> @fcmogtz2xdouble(<2 x double> %A) {
2609 ; CHECK-LABEL: fcmogtz2xdouble:
2611 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, #0.0
2613 %tmp3 = fcmp ogt <2 x double> %A, zeroinitializer
2614 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2618 define <2 x i32> @fcmoltz2xfloat(<2 x float> %A) {
2619 ; CHECK-LABEL: fcmoltz2xfloat:
2621 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
2623 %tmp3 = fcmp olt <2 x float> %A, zeroinitializer
2624 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2628 define <4 x i32> @fcmoltz4xfloat(<4 x float> %A) {
2629 ; CHECK-LABEL: fcmoltz4xfloat:
2631 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
2633 %tmp3 = fcmp olt <4 x float> %A, zeroinitializer
2634 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2638 define <2 x i64> @fcmoltz2xdouble(<2 x double> %A) {
2639 ; CHECK-LABEL: fcmoltz2xdouble:
2641 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
2643 %tmp3 = fcmp olt <2 x double> %A, zeroinitializer
2644 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2648 define <2 x i32> @fcmolez2xfloat(<2 x float> %A) {
2649 ; CHECK-LABEL: fcmolez2xfloat:
2651 ; CHECK-NEXT: fcmle v0.2s, v0.2s, #0.0
2653 %tmp3 = fcmp ole <2 x float> %A, zeroinitializer
2654 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2658 define <4 x i32> @fcmolez4xfloat(<4 x float> %A) {
2659 ; CHECK-LABEL: fcmolez4xfloat:
2661 ; CHECK-NEXT: fcmle v0.4s, v0.4s, #0.0
2663 %tmp3 = fcmp ole <4 x float> %A, zeroinitializer
2664 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2668 define <2 x i64> @fcmolez2xdouble(<2 x double> %A) {
2669 ; CHECK-LABEL: fcmolez2xdouble:
2671 ; CHECK-NEXT: fcmle v0.2d, v0.2d, #0.0
2673 %tmp3 = fcmp ole <2 x double> %A, zeroinitializer
2674 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2678 ; ONE with zero = OLT | OGT
2679 define <2 x i32> @fcmonez2xfloat(<2 x float> %A) {
2680 ; CHECK-LABEL: fcmonez2xfloat:
2682 ; CHECK-NEXT: fcmgt v1.2s, v0.2s, #0.0
2683 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
2684 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
2686 %tmp3 = fcmp one <2 x float> %A, zeroinitializer
2687 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2691 ; ONE with zero = OLT | OGT
2692 define <4 x i32> @fcmonez4xfloat(<4 x float> %A) {
2693 ; CHECK-LABEL: fcmonez4xfloat:
2695 ; CHECK-NEXT: fcmgt v1.4s, v0.4s, #0.0
2696 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
2697 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
2699 %tmp3 = fcmp one <4 x float> %A, zeroinitializer
2700 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2704 ; ONE with zero = OLT | OGT
2705 define <2 x i64> @fcmonez2xdouble(<2 x double> %A) {
2706 ; CHECK-LABEL: fcmonez2xdouble:
2708 ; CHECK-NEXT: fcmgt v1.2d, v0.2d, #0.0
2709 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
2710 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
2712 %tmp3 = fcmp one <2 x double> %A, zeroinitializer
2713 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2717 ; ORD with zero = OLT | OGE
2718 define <2 x i32> @fcmordz2xfloat(<2 x float> %A) {
2719 ; CHECK-SD-LABEL: fcmordz2xfloat:
2720 ; CHECK-SD: // %bb.0:
2721 ; CHECK-SD-NEXT: fcmge v1.2s, v0.2s, #0.0
2722 ; CHECK-SD-NEXT: fcmlt v0.2s, v0.2s, #0.0
2723 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
2724 ; CHECK-SD-NEXT: ret
2726 ; CHECK-GI-LABEL: fcmordz2xfloat:
2727 ; CHECK-GI: // %bb.0:
2728 ; CHECK-GI-NEXT: fcmeq v0.2s, v0.2s, v0.2s
2729 ; CHECK-GI-NEXT: ret
2730 %tmp3 = fcmp ord <2 x float> %A, zeroinitializer
2731 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2735 ; ORD with zero = OLT | OGE
2736 define <4 x i32> @fcmordz4xfloat(<4 x float> %A) {
2737 ; CHECK-SD-LABEL: fcmordz4xfloat:
2738 ; CHECK-SD: // %bb.0:
2739 ; CHECK-SD-NEXT: fcmge v1.4s, v0.4s, #0.0
2740 ; CHECK-SD-NEXT: fcmlt v0.4s, v0.4s, #0.0
2741 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
2742 ; CHECK-SD-NEXT: ret
2744 ; CHECK-GI-LABEL: fcmordz4xfloat:
2745 ; CHECK-GI: // %bb.0:
2746 ; CHECK-GI-NEXT: fcmeq v0.4s, v0.4s, v0.4s
2747 ; CHECK-GI-NEXT: ret
2748 %tmp3 = fcmp ord <4 x float> %A, zeroinitializer
2749 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2753 ; ORD with zero = OLT | OGE
2754 define <2 x i64> @fcmordz2xdouble(<2 x double> %A) {
2755 ; CHECK-SD-LABEL: fcmordz2xdouble:
2756 ; CHECK-SD: // %bb.0:
2757 ; CHECK-SD-NEXT: fcmge v1.2d, v0.2d, #0.0
2758 ; CHECK-SD-NEXT: fcmlt v0.2d, v0.2d, #0.0
2759 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
2760 ; CHECK-SD-NEXT: ret
2762 ; CHECK-GI-LABEL: fcmordz2xdouble:
2763 ; CHECK-GI: // %bb.0:
2764 ; CHECK-GI-NEXT: fcmeq v0.2d, v0.2d, v0.2d
2765 ; CHECK-GI-NEXT: ret
2766 %tmp3 = fcmp ord <2 x double> %A, zeroinitializer
2767 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2771 ; UEQ with zero = !ONE = !(OLT |OGT)
2772 define <2 x i32> @fcmueqz2xfloat(<2 x float> %A) {
2773 ; CHECK-LABEL: fcmueqz2xfloat:
2775 ; CHECK-NEXT: fcmgt v1.2s, v0.2s, #0.0
2776 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
2777 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
2778 ; CHECK-NEXT: mvn v0.8b, v0.8b
2780 %tmp3 = fcmp ueq <2 x float> %A, zeroinitializer
2781 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2785 ; UEQ with zero = !ONE = !(OLT |OGT)
2786 define <4 x i32> @fcmueqz4xfloat(<4 x float> %A) {
2787 ; CHECK-LABEL: fcmueqz4xfloat:
2789 ; CHECK-NEXT: fcmgt v1.4s, v0.4s, #0.0
2790 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
2791 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
2792 ; CHECK-NEXT: mvn v0.16b, v0.16b
2794 %tmp3 = fcmp ueq <4 x float> %A, zeroinitializer
2795 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2799 ; UEQ with zero = !ONE = !(OLT |OGT)
2800 define <2 x i64> @fcmueqz2xdouble(<2 x double> %A) {
2801 ; CHECK-LABEL: fcmueqz2xdouble:
2803 ; CHECK-NEXT: fcmgt v1.2d, v0.2d, #0.0
2804 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
2805 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
2806 ; CHECK-NEXT: mvn v0.16b, v0.16b
2808 %tmp3 = fcmp ueq <2 x double> %A, zeroinitializer
2809 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2813 ; UGE with zero = !OLT
2814 define <2 x i32> @fcmugez2xfloat(<2 x float> %A) {
2815 ; CHECK-LABEL: fcmugez2xfloat:
2817 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
2818 ; CHECK-NEXT: mvn v0.8b, v0.8b
2820 %tmp3 = fcmp uge <2 x float> %A, zeroinitializer
2821 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2825 ; UGE with zero = !OLT
2826 define <4 x i32> @fcmugez4xfloat(<4 x float> %A) {
2827 ; CHECK-LABEL: fcmugez4xfloat:
2829 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
2830 ; CHECK-NEXT: mvn v0.16b, v0.16b
2832 %tmp3 = fcmp uge <4 x float> %A, zeroinitializer
2833 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2837 ; UGE with zero = !OLT
2838 define <2 x i64> @fcmugez2xdouble(<2 x double> %A) {
2839 ; CHECK-LABEL: fcmugez2xdouble:
2841 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
2842 ; CHECK-NEXT: mvn v0.16b, v0.16b
2844 %tmp3 = fcmp uge <2 x double> %A, zeroinitializer
2845 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2849 ; UGT with zero = !OLE
2850 define <2 x i32> @fcmugtz2xfloat(<2 x float> %A) {
2851 ; CHECK-LABEL: fcmugtz2xfloat:
2853 ; CHECK-NEXT: fcmle v0.2s, v0.2s, #0.0
2854 ; CHECK-NEXT: mvn v0.8b, v0.8b
2856 %tmp3 = fcmp ugt <2 x float> %A, zeroinitializer
2857 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2861 ; UGT with zero = !OLE
2862 define <4 x i32> @fcmugtz4xfloat(<4 x float> %A) {
2863 ; CHECK-LABEL: fcmugtz4xfloat:
2865 ; CHECK-NEXT: fcmle v0.4s, v0.4s, #0.0
2866 ; CHECK-NEXT: mvn v0.16b, v0.16b
2868 %tmp3 = fcmp ugt <4 x float> %A, zeroinitializer
2869 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2873 ; UGT with zero = !OLE
2874 define <2 x i64> @fcmugtz2xdouble(<2 x double> %A) {
2875 ; CHECK-LABEL: fcmugtz2xdouble:
2877 ; CHECK-NEXT: fcmle v0.2d, v0.2d, #0.0
2878 ; CHECK-NEXT: mvn v0.16b, v0.16b
2880 %tmp3 = fcmp ugt <2 x double> %A, zeroinitializer
2881 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2885 ; ULT with zero = !OGE
2886 define <2 x i32> @fcmultz2xfloat(<2 x float> %A) {
2887 ; CHECK-LABEL: fcmultz2xfloat:
2889 ; CHECK-NEXT: fcmge v0.2s, v0.2s, #0.0
2890 ; CHECK-NEXT: mvn v0.8b, v0.8b
2892 %tmp3 = fcmp ult <2 x float> %A, zeroinitializer
2893 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2897 define <4 x i32> @fcmultz4xfloat(<4 x float> %A) {
2898 ; CHECK-LABEL: fcmultz4xfloat:
2900 ; CHECK-NEXT: fcmge v0.4s, v0.4s, #0.0
2901 ; CHECK-NEXT: mvn v0.16b, v0.16b
2903 %tmp3 = fcmp ult <4 x float> %A, zeroinitializer
2904 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2908 define <2 x i64> @fcmultz2xdouble(<2 x double> %A) {
2909 ; CHECK-LABEL: fcmultz2xdouble:
2911 ; CHECK-NEXT: fcmge v0.2d, v0.2d, #0.0
2912 ; CHECK-NEXT: mvn v0.16b, v0.16b
2914 %tmp3 = fcmp ult <2 x double> %A, zeroinitializer
2915 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2919 ; ULE with zero = !OGT
2920 define <2 x i32> @fcmulez2xfloat(<2 x float> %A) {
2921 ; CHECK-LABEL: fcmulez2xfloat:
2923 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, #0.0
2924 ; CHECK-NEXT: mvn v0.8b, v0.8b
2926 %tmp3 = fcmp ule <2 x float> %A, zeroinitializer
2927 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2931 ; ULE with zero = !OGT
2932 define <4 x i32> @fcmulez4xfloat(<4 x float> %A) {
2933 ; CHECK-LABEL: fcmulez4xfloat:
2935 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, #0.0
2936 ; CHECK-NEXT: mvn v0.16b, v0.16b
2938 %tmp3 = fcmp ule <4 x float> %A, zeroinitializer
2939 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2943 ; ULE with zero = !OGT
2944 define <2 x i64> @fcmulez2xdouble(<2 x double> %A) {
2945 ; CHECK-LABEL: fcmulez2xdouble:
2947 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, #0.0
2948 ; CHECK-NEXT: mvn v0.16b, v0.16b
2950 %tmp3 = fcmp ule <2 x double> %A, zeroinitializer
2951 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2955 ; UNE with zero = !OEQ with zero
2956 define <2 x i32> @fcmunez2xfloat(<2 x float> %A) {
2957 ; CHECK-LABEL: fcmunez2xfloat:
2959 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
2960 ; CHECK-NEXT: mvn v0.8b, v0.8b
2962 %tmp3 = fcmp une <2 x float> %A, zeroinitializer
2963 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2967 ; UNE with zero = !OEQ with zero
2968 define <4 x i32> @fcmunez4xfloat(<4 x float> %A) {
2969 ; CHECK-LABEL: fcmunez4xfloat:
2971 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
2972 ; CHECK-NEXT: mvn v0.16b, v0.16b
2974 %tmp3 = fcmp une <4 x float> %A, zeroinitializer
2975 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2979 ; UNE with zero = !OEQ with zero
2980 define <2 x i64> @fcmunez2xdouble(<2 x double> %A) {
2981 ; CHECK-LABEL: fcmunez2xdouble:
2983 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
2984 ; CHECK-NEXT: mvn v0.16b, v0.16b
2986 %tmp3 = fcmp une <2 x double> %A, zeroinitializer
2987 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2991 ; UNO with zero = !ORD = !(OLT | OGE)
2992 define <2 x i32> @fcmunoz2xfloat(<2 x float> %A) {
2993 ; CHECK-LABEL: fcmunoz2xfloat:
2995 ; CHECK-NEXT: fcmge v1.2s, v0.2s, #0.0
2996 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
2997 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
2998 ; CHECK-NEXT: mvn v0.8b, v0.8b
3000 %tmp3 = fcmp uno <2 x float> %A, zeroinitializer
3001 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3005 ; UNO with zero = !ORD = !(OLT | OGE)
3006 define <4 x i32> @fcmunoz4xfloat(<4 x float> %A) {
3007 ; CHECK-LABEL: fcmunoz4xfloat:
3009 ; CHECK-NEXT: fcmge v1.4s, v0.4s, #0.0
3010 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
3011 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
3012 ; CHECK-NEXT: mvn v0.16b, v0.16b
3014 %tmp3 = fcmp uno <4 x float> %A, zeroinitializer
3015 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3019 ; UNO with zero = !ORD = !(OLT | OGE)
3020 define <2 x i64> @fcmunoz2xdouble(<2 x double> %A) {
3021 ; CHECK-LABEL: fcmunoz2xdouble:
3023 ; CHECK-NEXT: fcmge v1.2d, v0.2d, #0.0
3024 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
3025 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
3026 ; CHECK-NEXT: mvn v0.16b, v0.16b
3028 %tmp3 = fcmp uno <2 x double> %A, zeroinitializer
3029 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3034 define <2 x i32> @fcmoeq2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3035 ; CHECK-LABEL: fcmoeq2xfloat_fast:
3037 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3039 %tmp3 = fcmp fast oeq <2 x float> %A, %B
3040 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3044 define <4 x i32> @fcmoeq4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3045 ; CHECK-LABEL: fcmoeq4xfloat_fast:
3047 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3049 %tmp3 = fcmp fast oeq <4 x float> %A, %B
3050 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3053 define <2 x i64> @fcmoeq2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3054 ; CHECK-LABEL: fcmoeq2xdouble_fast:
3056 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3058 %tmp3 = fcmp fast oeq <2 x double> %A, %B
3059 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3063 define <2 x i32> @fcmoge2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3064 ; CHECK-LABEL: fcmoge2xfloat_fast:
3066 ; CHECK-NEXT: fcmge v0.2s, v0.2s, v1.2s
3068 %tmp3 = fcmp fast oge <2 x float> %A, %B
3069 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3073 define <4 x i32> @fcmoge4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3074 ; CHECK-LABEL: fcmoge4xfloat_fast:
3076 ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
3078 %tmp3 = fcmp fast oge <4 x float> %A, %B
3079 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3082 define <2 x i64> @fcmoge2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3083 ; CHECK-LABEL: fcmoge2xdouble_fast:
3085 ; CHECK-NEXT: fcmge v0.2d, v0.2d, v1.2d
3087 %tmp3 = fcmp fast oge <2 x double> %A, %B
3088 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3092 define <2 x i32> @fcmogt2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3093 ; CHECK-LABEL: fcmogt2xfloat_fast:
3095 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, v1.2s
3097 %tmp3 = fcmp fast ogt <2 x float> %A, %B
3098 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3102 define <4 x i32> @fcmogt4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3103 ; CHECK-LABEL: fcmogt4xfloat_fast:
3105 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, v1.4s
3107 %tmp3 = fcmp fast ogt <4 x float> %A, %B
3108 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3111 define <2 x i64> @fcmogt2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3112 ; CHECK-LABEL: fcmogt2xdouble_fast:
3114 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, v1.2d
3116 %tmp3 = fcmp fast ogt <2 x double> %A, %B
3117 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3121 define <2 x i32> @fcmole2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3122 ; CHECK-LABEL: fcmole2xfloat_fast:
3124 ; CHECK-NEXT: fcmge v0.2s, v1.2s, v0.2s
3126 %tmp3 = fcmp fast ole <2 x float> %A, %B
3127 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3131 define <4 x i32> @fcmole4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3132 ; CHECK-LABEL: fcmole4xfloat_fast:
3134 ; CHECK-NEXT: fcmge v0.4s, v1.4s, v0.4s
3136 %tmp3 = fcmp fast ole <4 x float> %A, %B
3137 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3141 define <2 x i64> @fcmole2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3142 ; CHECK-LABEL: fcmole2xdouble_fast:
3144 ; CHECK-NEXT: fcmge v0.2d, v1.2d, v0.2d
3146 %tmp3 = fcmp fast ole <2 x double> %A, %B
3147 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3151 define <2 x i32> @fcmolt2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3152 ; CHECK-LABEL: fcmolt2xfloat_fast:
3154 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3156 %tmp3 = fcmp fast olt <2 x float> %A, %B
3157 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3161 define <4 x i32> @fcmolt4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3162 ; CHECK-LABEL: fcmolt4xfloat_fast:
3164 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3166 %tmp3 = fcmp fast olt <4 x float> %A, %B
3167 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3171 define <2 x i64> @fcmolt2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3172 ; CHECK-LABEL: fcmolt2xdouble_fast:
3174 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3176 %tmp3 = fcmp fast olt <2 x double> %A, %B
3177 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3181 define <2 x i32> @fcmone2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3182 ; CHECK-SD-LABEL: fcmone2xfloat_fast:
3183 ; CHECK-SD: // %bb.0:
3184 ; CHECK-SD-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3185 ; CHECK-SD-NEXT: mvn v0.8b, v0.8b
3186 ; CHECK-SD-NEXT: ret
3188 ; CHECK-GI-LABEL: fcmone2xfloat_fast:
3189 ; CHECK-GI: // %bb.0:
3190 ; CHECK-GI-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3191 ; CHECK-GI-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3192 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v2.8b
3193 ; CHECK-GI-NEXT: ret
3194 %tmp3 = fcmp fast one <2 x float> %A, %B
3195 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3199 define <4 x i32> @fcmone4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3200 ; CHECK-SD-LABEL: fcmone4xfloat_fast:
3201 ; CHECK-SD: // %bb.0:
3202 ; CHECK-SD-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3203 ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
3204 ; CHECK-SD-NEXT: ret
3206 ; CHECK-GI-LABEL: fcmone4xfloat_fast:
3207 ; CHECK-GI: // %bb.0:
3208 ; CHECK-GI-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3209 ; CHECK-GI-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3210 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
3211 ; CHECK-GI-NEXT: ret
3212 %tmp3 = fcmp fast one <4 x float> %A, %B
3213 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3217 define <2 x i64> @fcmone2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3218 ; CHECK-SD-LABEL: fcmone2xdouble_fast:
3219 ; CHECK-SD: // %bb.0:
3220 ; CHECK-SD-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3221 ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
3222 ; CHECK-SD-NEXT: ret
3224 ; CHECK-GI-LABEL: fcmone2xdouble_fast:
3225 ; CHECK-GI: // %bb.0:
3226 ; CHECK-GI-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3227 ; CHECK-GI-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3228 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
3229 ; CHECK-GI-NEXT: ret
3230 %tmp3 = fcmp fast one <2 x double> %A, %B
3231 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3235 define <2 x i32> @fcmord2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3236 ; CHECK-LABEL: fcmord2xfloat_fast:
3238 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
3239 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3240 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3242 %tmp3 = fcmp fast ord <2 x float> %A, %B
3243 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3247 define <4 x i32> @fcmord4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3248 ; CHECK-LABEL: fcmord4xfloat_fast:
3250 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
3251 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3252 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3254 %tmp3 = fcmp fast ord <4 x float> %A, %B
3255 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3259 define <2 x i64> @fcmord2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3260 ; CHECK-LABEL: fcmord2xdouble_fast:
3262 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
3263 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3264 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3266 %tmp3 = fcmp fast ord <2 x double> %A, %B
3267 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3272 define <2 x i32> @fcmuno2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3273 ; CHECK-LABEL: fcmuno2xfloat_fast:
3275 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
3276 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3277 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3278 ; CHECK-NEXT: mvn v0.8b, v0.8b
3280 %tmp3 = fcmp fast uno <2 x float> %A, %B
3281 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3285 define <4 x i32> @fcmuno4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3286 ; CHECK-LABEL: fcmuno4xfloat_fast:
3288 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
3289 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3290 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3291 ; CHECK-NEXT: mvn v0.16b, v0.16b
3293 %tmp3 = fcmp fast uno <4 x float> %A, %B
3294 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3298 define <2 x i64> @fcmuno2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3299 ; CHECK-LABEL: fcmuno2xdouble_fast:
3301 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
3302 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3303 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3304 ; CHECK-NEXT: mvn v0.16b, v0.16b
3306 %tmp3 = fcmp fast uno <2 x double> %A, %B
3307 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3311 define <2 x i32> @fcmueq2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3312 ; CHECK-SD-LABEL: fcmueq2xfloat_fast:
3313 ; CHECK-SD: // %bb.0:
3314 ; CHECK-SD-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3315 ; CHECK-SD-NEXT: ret
3317 ; CHECK-GI-LABEL: fcmueq2xfloat_fast:
3318 ; CHECK-GI: // %bb.0:
3319 ; CHECK-GI-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3320 ; CHECK-GI-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3321 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v2.8b
3322 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3323 ; CHECK-GI-NEXT: ret
3324 %tmp3 = fcmp fast ueq <2 x float> %A, %B
3325 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3329 define <4 x i32> @fcmueq4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3330 ; CHECK-SD-LABEL: fcmueq4xfloat_fast:
3331 ; CHECK-SD: // %bb.0:
3332 ; CHECK-SD-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3333 ; CHECK-SD-NEXT: ret
3335 ; CHECK-GI-LABEL: fcmueq4xfloat_fast:
3336 ; CHECK-GI: // %bb.0:
3337 ; CHECK-GI-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3338 ; CHECK-GI-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3339 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
3340 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3341 ; CHECK-GI-NEXT: ret
3342 %tmp3 = fcmp fast ueq <4 x float> %A, %B
3343 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3347 define <2 x i64> @fcmueq2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3348 ; CHECK-SD-LABEL: fcmueq2xdouble_fast:
3349 ; CHECK-SD: // %bb.0:
3350 ; CHECK-SD-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3351 ; CHECK-SD-NEXT: ret
3353 ; CHECK-GI-LABEL: fcmueq2xdouble_fast:
3354 ; CHECK-GI: // %bb.0:
3355 ; CHECK-GI-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3356 ; CHECK-GI-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3357 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
3358 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3359 ; CHECK-GI-NEXT: ret
3360 %tmp3 = fcmp fast ueq <2 x double> %A, %B
3361 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3365 define <2 x i32> @fcmuge2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3366 ; CHECK-SD-LABEL: fcmuge2xfloat_fast:
3367 ; CHECK-SD: // %bb.0:
3368 ; CHECK-SD-NEXT: fcmge v0.2s, v0.2s, v1.2s
3369 ; CHECK-SD-NEXT: ret
3371 ; CHECK-GI-LABEL: fcmuge2xfloat_fast:
3372 ; CHECK-GI: // %bb.0:
3373 ; CHECK-GI-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3374 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3375 ; CHECK-GI-NEXT: ret
3376 %tmp3 = fcmp fast uge <2 x float> %A, %B
3377 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3381 define <4 x i32> @fcmuge4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3382 ; CHECK-SD-LABEL: fcmuge4xfloat_fast:
3383 ; CHECK-SD: // %bb.0:
3384 ; CHECK-SD-NEXT: fcmge v0.4s, v0.4s, v1.4s
3385 ; CHECK-SD-NEXT: ret
3387 ; CHECK-GI-LABEL: fcmuge4xfloat_fast:
3388 ; CHECK-GI: // %bb.0:
3389 ; CHECK-GI-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3390 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3391 ; CHECK-GI-NEXT: ret
3392 %tmp3 = fcmp fast uge <4 x float> %A, %B
3393 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3397 define <2 x i64> @fcmuge2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3398 ; CHECK-SD-LABEL: fcmuge2xdouble_fast:
3399 ; CHECK-SD: // %bb.0:
3400 ; CHECK-SD-NEXT: fcmge v0.2d, v0.2d, v1.2d
3401 ; CHECK-SD-NEXT: ret
3403 ; CHECK-GI-LABEL: fcmuge2xdouble_fast:
3404 ; CHECK-GI: // %bb.0:
3405 ; CHECK-GI-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3406 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3407 ; CHECK-GI-NEXT: ret
3408 %tmp3 = fcmp fast uge <2 x double> %A, %B
3409 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3413 define <2 x i32> @fcmugt2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3414 ; CHECK-SD-LABEL: fcmugt2xfloat_fast:
3415 ; CHECK-SD: // %bb.0:
3416 ; CHECK-SD-NEXT: fcmgt v0.2s, v0.2s, v1.2s
3417 ; CHECK-SD-NEXT: ret
3419 ; CHECK-GI-LABEL: fcmugt2xfloat_fast:
3420 ; CHECK-GI: // %bb.0:
3421 ; CHECK-GI-NEXT: fcmge v0.2s, v1.2s, v0.2s
3422 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3423 ; CHECK-GI-NEXT: ret
3424 %tmp3 = fcmp fast ugt <2 x float> %A, %B
3425 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3429 define <4 x i32> @fcmugt4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3430 ; CHECK-SD-LABEL: fcmugt4xfloat_fast:
3431 ; CHECK-SD: // %bb.0:
3432 ; CHECK-SD-NEXT: fcmgt v0.4s, v0.4s, v1.4s
3433 ; CHECK-SD-NEXT: ret
3435 ; CHECK-GI-LABEL: fcmugt4xfloat_fast:
3436 ; CHECK-GI: // %bb.0:
3437 ; CHECK-GI-NEXT: fcmge v0.4s, v1.4s, v0.4s
3438 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3439 ; CHECK-GI-NEXT: ret
3440 %tmp3 = fcmp fast ugt <4 x float> %A, %B
3441 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3445 define <2 x i64> @fcmugt2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3446 ; CHECK-SD-LABEL: fcmugt2xdouble_fast:
3447 ; CHECK-SD: // %bb.0:
3448 ; CHECK-SD-NEXT: fcmgt v0.2d, v0.2d, v1.2d
3449 ; CHECK-SD-NEXT: ret
3451 ; CHECK-GI-LABEL: fcmugt2xdouble_fast:
3452 ; CHECK-GI: // %bb.0:
3453 ; CHECK-GI-NEXT: fcmge v0.2d, v1.2d, v0.2d
3454 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3455 ; CHECK-GI-NEXT: ret
3456 %tmp3 = fcmp fast ugt <2 x double> %A, %B
3457 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3461 define <2 x i32> @fcmule2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3462 ; CHECK-SD-LABEL: fcmule2xfloat_fast:
3463 ; CHECK-SD: // %bb.0:
3464 ; CHECK-SD-NEXT: fcmge v0.2s, v1.2s, v0.2s
3465 ; CHECK-SD-NEXT: ret
3467 ; CHECK-GI-LABEL: fcmule2xfloat_fast:
3468 ; CHECK-GI: // %bb.0:
3469 ; CHECK-GI-NEXT: fcmgt v0.2s, v0.2s, v1.2s
3470 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3471 ; CHECK-GI-NEXT: ret
3472 %tmp3 = fcmp fast ule <2 x float> %A, %B
3473 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3477 define <4 x i32> @fcmule4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3478 ; CHECK-SD-LABEL: fcmule4xfloat_fast:
3479 ; CHECK-SD: // %bb.0:
3480 ; CHECK-SD-NEXT: fcmge v0.4s, v1.4s, v0.4s
3481 ; CHECK-SD-NEXT: ret
3483 ; CHECK-GI-LABEL: fcmule4xfloat_fast:
3484 ; CHECK-GI: // %bb.0:
3485 ; CHECK-GI-NEXT: fcmgt v0.4s, v0.4s, v1.4s
3486 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3487 ; CHECK-GI-NEXT: ret
3488 %tmp3 = fcmp fast ule <4 x float> %A, %B
3489 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3493 define <2 x i64> @fcmule2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3494 ; CHECK-SD-LABEL: fcmule2xdouble_fast:
3495 ; CHECK-SD: // %bb.0:
3496 ; CHECK-SD-NEXT: fcmge v0.2d, v1.2d, v0.2d
3497 ; CHECK-SD-NEXT: ret
3499 ; CHECK-GI-LABEL: fcmule2xdouble_fast:
3500 ; CHECK-GI: // %bb.0:
3501 ; CHECK-GI-NEXT: fcmgt v0.2d, v0.2d, v1.2d
3502 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3503 ; CHECK-GI-NEXT: ret
3504 %tmp3 = fcmp fast ule <2 x double> %A, %B
3505 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3509 define <2 x i32> @fcmult2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3510 ; CHECK-SD-LABEL: fcmult2xfloat_fast:
3511 ; CHECK-SD: // %bb.0:
3512 ; CHECK-SD-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3513 ; CHECK-SD-NEXT: ret
3515 ; CHECK-GI-LABEL: fcmult2xfloat_fast:
3516 ; CHECK-GI: // %bb.0:
3517 ; CHECK-GI-NEXT: fcmge v0.2s, v0.2s, v1.2s
3518 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3519 ; CHECK-GI-NEXT: ret
3520 %tmp3 = fcmp fast ult <2 x float> %A, %B
3521 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3525 define <4 x i32> @fcmult4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3526 ; CHECK-SD-LABEL: fcmult4xfloat_fast:
3527 ; CHECK-SD: // %bb.0:
3528 ; CHECK-SD-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3529 ; CHECK-SD-NEXT: ret
3531 ; CHECK-GI-LABEL: fcmult4xfloat_fast:
3532 ; CHECK-GI: // %bb.0:
3533 ; CHECK-GI-NEXT: fcmge v0.4s, v0.4s, v1.4s
3534 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3535 ; CHECK-GI-NEXT: ret
3536 %tmp3 = fcmp fast ult <4 x float> %A, %B
3537 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3541 define <2 x i64> @fcmult2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3542 ; CHECK-SD-LABEL: fcmult2xdouble_fast:
3543 ; CHECK-SD: // %bb.0:
3544 ; CHECK-SD-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3545 ; CHECK-SD-NEXT: ret
3547 ; CHECK-GI-LABEL: fcmult2xdouble_fast:
3548 ; CHECK-GI: // %bb.0:
3549 ; CHECK-GI-NEXT: fcmge v0.2d, v0.2d, v1.2d
3550 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3551 ; CHECK-GI-NEXT: ret
3552 %tmp3 = fcmp fast ult <2 x double> %A, %B
3553 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3557 define <2 x i32> @fcmune2xfloat_fast(<2 x float> %A, <2 x float> %B) {
3558 ; CHECK-LABEL: fcmune2xfloat_fast:
3560 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3561 ; CHECK-NEXT: mvn v0.8b, v0.8b
3563 %tmp3 = fcmp fast une <2 x float> %A, %B
3564 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3568 define <4 x i32> @fcmune4xfloat_fast(<4 x float> %A, <4 x float> %B) {
3569 ; CHECK-LABEL: fcmune4xfloat_fast:
3571 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3572 ; CHECK-NEXT: mvn v0.16b, v0.16b
3574 %tmp3 = fcmp fast une <4 x float> %A, %B
3575 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3579 define <2 x i64> @fcmune2xdouble_fast(<2 x double> %A, <2 x double> %B) {
3580 ; CHECK-LABEL: fcmune2xdouble_fast:
3582 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3583 ; CHECK-NEXT: mvn v0.16b, v0.16b
3585 %tmp3 = fcmp fast une <2 x double> %A, %B
3586 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3590 define <2 x i32> @fcmoeqz2xfloat_fast(<2 x float> %A) {
3591 ; CHECK-LABEL: fcmoeqz2xfloat_fast:
3593 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
3595 %tmp3 = fcmp fast oeq <2 x float> %A, zeroinitializer
3596 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3600 define <4 x i32> @fcmoeqz4xfloat_fast(<4 x float> %A) {
3601 ; CHECK-LABEL: fcmoeqz4xfloat_fast:
3603 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
3605 %tmp3 = fcmp fast oeq <4 x float> %A, zeroinitializer
3606 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3609 define <2 x i64> @fcmoeqz2xdouble_fast(<2 x double> %A) {
3610 ; CHECK-LABEL: fcmoeqz2xdouble_fast:
3612 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
3614 %tmp3 = fcmp fast oeq <2 x double> %A, zeroinitializer
3615 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3620 define <2 x i32> @fcmogez2xfloat_fast(<2 x float> %A) {
3621 ; CHECK-LABEL: fcmogez2xfloat_fast:
3623 ; CHECK-NEXT: fcmge v0.2s, v0.2s, #0.0
3625 %tmp3 = fcmp fast oge <2 x float> %A, zeroinitializer
3626 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3630 define <4 x i32> @fcmogez4xfloat_fast(<4 x float> %A) {
3631 ; CHECK-LABEL: fcmogez4xfloat_fast:
3633 ; CHECK-NEXT: fcmge v0.4s, v0.4s, #0.0
3635 %tmp3 = fcmp fast oge <4 x float> %A, zeroinitializer
3636 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3639 define <2 x i64> @fcmogez2xdouble_fast(<2 x double> %A) {
3640 ; CHECK-LABEL: fcmogez2xdouble_fast:
3642 ; CHECK-NEXT: fcmge v0.2d, v0.2d, #0.0
3644 %tmp3 = fcmp fast oge <2 x double> %A, zeroinitializer
3645 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3649 define <2 x i32> @fcmogtz2xfloat_fast(<2 x float> %A) {
3650 ; CHECK-LABEL: fcmogtz2xfloat_fast:
3652 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, #0.0
3654 %tmp3 = fcmp fast ogt <2 x float> %A, zeroinitializer
3655 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3659 define <4 x i32> @fcmogtz4xfloat_fast(<4 x float> %A) {
3660 ; CHECK-LABEL: fcmogtz4xfloat_fast:
3662 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, #0.0
3664 %tmp3 = fcmp fast ogt <4 x float> %A, zeroinitializer
3665 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3668 define <2 x i64> @fcmogtz2xdouble_fast(<2 x double> %A) {
3669 ; CHECK-LABEL: fcmogtz2xdouble_fast:
3671 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, #0.0
3673 %tmp3 = fcmp fast ogt <2 x double> %A, zeroinitializer
3674 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3678 define <2 x i32> @fcmoltz2xfloat_fast(<2 x float> %A) {
3679 ; CHECK-LABEL: fcmoltz2xfloat_fast:
3681 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
3683 %tmp3 = fcmp fast olt <2 x float> %A, zeroinitializer
3684 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3688 define <4 x i32> @fcmoltz4xfloat_fast(<4 x float> %A) {
3689 ; CHECK-LABEL: fcmoltz4xfloat_fast:
3691 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
3693 %tmp3 = fcmp fast olt <4 x float> %A, zeroinitializer
3694 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3698 define <2 x i64> @fcmoltz2xdouble_fast(<2 x double> %A) {
3699 ; CHECK-LABEL: fcmoltz2xdouble_fast:
3701 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
3703 %tmp3 = fcmp fast olt <2 x double> %A, zeroinitializer
3704 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3708 define <2 x i32> @fcmolez2xfloat_fast(<2 x float> %A) {
3709 ; CHECK-LABEL: fcmolez2xfloat_fast:
3711 ; CHECK-NEXT: fcmle v0.2s, v0.2s, #0.0
3713 %tmp3 = fcmp fast ole <2 x float> %A, zeroinitializer
3714 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3718 define <4 x i32> @fcmolez4xfloat_fast(<4 x float> %A) {
3719 ; CHECK-LABEL: fcmolez4xfloat_fast:
3721 ; CHECK-NEXT: fcmle v0.4s, v0.4s, #0.0
3723 %tmp3 = fcmp fast ole <4 x float> %A, zeroinitializer
3724 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3728 define <2 x i64> @fcmolez2xdouble_fast(<2 x double> %A) {
3729 ; CHECK-LABEL: fcmolez2xdouble_fast:
3731 ; CHECK-NEXT: fcmle v0.2d, v0.2d, #0.0
3733 %tmp3 = fcmp fast ole <2 x double> %A, zeroinitializer
3734 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3738 define <2 x i32> @fcmonez2xfloat_fast(<2 x float> %A) {
3739 ; CHECK-SD-LABEL: fcmonez2xfloat_fast:
3740 ; CHECK-SD: // %bb.0:
3741 ; CHECK-SD-NEXT: fcmeq v0.2s, v0.2s, #0.0
3742 ; CHECK-SD-NEXT: mvn v0.8b, v0.8b
3743 ; CHECK-SD-NEXT: ret
3745 ; CHECK-GI-LABEL: fcmonez2xfloat_fast:
3746 ; CHECK-GI: // %bb.0:
3747 ; CHECK-GI-NEXT: fcmgt v1.2s, v0.2s, #0.0
3748 ; CHECK-GI-NEXT: fcmlt v0.2s, v0.2s, #0.0
3749 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
3750 ; CHECK-GI-NEXT: ret
3751 %tmp3 = fcmp fast one <2 x float> %A, zeroinitializer
3752 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3756 define <4 x i32> @fcmonez4xfloat_fast(<4 x float> %A) {
3757 ; CHECK-SD-LABEL: fcmonez4xfloat_fast:
3758 ; CHECK-SD: // %bb.0:
3759 ; CHECK-SD-NEXT: fcmeq v0.4s, v0.4s, #0.0
3760 ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
3761 ; CHECK-SD-NEXT: ret
3763 ; CHECK-GI-LABEL: fcmonez4xfloat_fast:
3764 ; CHECK-GI: // %bb.0:
3765 ; CHECK-GI-NEXT: fcmgt v1.4s, v0.4s, #0.0
3766 ; CHECK-GI-NEXT: fcmlt v0.4s, v0.4s, #0.0
3767 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v1.16b
3768 ; CHECK-GI-NEXT: ret
3769 %tmp3 = fcmp fast one <4 x float> %A, zeroinitializer
3770 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3774 define <2 x i64> @fcmonez2xdouble_fast(<2 x double> %A) {
3775 ; CHECK-SD-LABEL: fcmonez2xdouble_fast:
3776 ; CHECK-SD: // %bb.0:
3777 ; CHECK-SD-NEXT: fcmeq v0.2d, v0.2d, #0.0
3778 ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
3779 ; CHECK-SD-NEXT: ret
3781 ; CHECK-GI-LABEL: fcmonez2xdouble_fast:
3782 ; CHECK-GI: // %bb.0:
3783 ; CHECK-GI-NEXT: fcmgt v1.2d, v0.2d, #0.0
3784 ; CHECK-GI-NEXT: fcmlt v0.2d, v0.2d, #0.0
3785 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v1.16b
3786 ; CHECK-GI-NEXT: ret
3787 %tmp3 = fcmp fast one <2 x double> %A, zeroinitializer
3788 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3792 define <2 x i32> @fcmordz2xfloat_fast(<2 x float> %A) {
3793 ; CHECK-SD-LABEL: fcmordz2xfloat_fast:
3794 ; CHECK-SD: // %bb.0:
3795 ; CHECK-SD-NEXT: fcmge v1.2s, v0.2s, #0.0
3796 ; CHECK-SD-NEXT: fcmlt v0.2s, v0.2s, #0.0
3797 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
3798 ; CHECK-SD-NEXT: ret
3800 ; CHECK-GI-LABEL: fcmordz2xfloat_fast:
3801 ; CHECK-GI: // %bb.0:
3802 ; CHECK-GI-NEXT: fcmeq v0.2s, v0.2s, v0.2s
3803 ; CHECK-GI-NEXT: ret
3804 %tmp3 = fcmp fast ord <2 x float> %A, zeroinitializer
3805 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3809 define <4 x i32> @fcmordz4xfloat_fast(<4 x float> %A) {
3810 ; CHECK-SD-LABEL: fcmordz4xfloat_fast:
3811 ; CHECK-SD: // %bb.0:
3812 ; CHECK-SD-NEXT: fcmge v1.4s, v0.4s, #0.0
3813 ; CHECK-SD-NEXT: fcmlt v0.4s, v0.4s, #0.0
3814 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
3815 ; CHECK-SD-NEXT: ret
3817 ; CHECK-GI-LABEL: fcmordz4xfloat_fast:
3818 ; CHECK-GI: // %bb.0:
3819 ; CHECK-GI-NEXT: fcmeq v0.4s, v0.4s, v0.4s
3820 ; CHECK-GI-NEXT: ret
3821 %tmp3 = fcmp fast ord <4 x float> %A, zeroinitializer
3822 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3826 define <2 x i64> @fcmordz2xdouble_fast(<2 x double> %A) {
3827 ; CHECK-SD-LABEL: fcmordz2xdouble_fast:
3828 ; CHECK-SD: // %bb.0:
3829 ; CHECK-SD-NEXT: fcmge v1.2d, v0.2d, #0.0
3830 ; CHECK-SD-NEXT: fcmlt v0.2d, v0.2d, #0.0
3831 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
3832 ; CHECK-SD-NEXT: ret
3834 ; CHECK-GI-LABEL: fcmordz2xdouble_fast:
3835 ; CHECK-GI: // %bb.0:
3836 ; CHECK-GI-NEXT: fcmeq v0.2d, v0.2d, v0.2d
3837 ; CHECK-GI-NEXT: ret
3838 %tmp3 = fcmp fast ord <2 x double> %A, zeroinitializer
3839 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3843 define <2 x i32> @fcmueqz2xfloat_fast(<2 x float> %A) {
3844 ; CHECK-SD-LABEL: fcmueqz2xfloat_fast:
3845 ; CHECK-SD: // %bb.0:
3846 ; CHECK-SD-NEXT: fcmeq v0.2s, v0.2s, #0.0
3847 ; CHECK-SD-NEXT: ret
3849 ; CHECK-GI-LABEL: fcmueqz2xfloat_fast:
3850 ; CHECK-GI: // %bb.0:
3851 ; CHECK-GI-NEXT: fcmgt v1.2s, v0.2s, #0.0
3852 ; CHECK-GI-NEXT: fcmlt v0.2s, v0.2s, #0.0
3853 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
3854 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3855 ; CHECK-GI-NEXT: ret
3856 %tmp3 = fcmp fast ueq <2 x float> %A, zeroinitializer
3857 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3861 define <4 x i32> @fcmueqz4xfloat_fast(<4 x float> %A) {
3862 ; CHECK-SD-LABEL: fcmueqz4xfloat_fast:
3863 ; CHECK-SD: // %bb.0:
3864 ; CHECK-SD-NEXT: fcmeq v0.4s, v0.4s, #0.0
3865 ; CHECK-SD-NEXT: ret
3867 ; CHECK-GI-LABEL: fcmueqz4xfloat_fast:
3868 ; CHECK-GI: // %bb.0:
3869 ; CHECK-GI-NEXT: fcmgt v1.4s, v0.4s, #0.0
3870 ; CHECK-GI-NEXT: fcmlt v0.4s, v0.4s, #0.0
3871 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v1.16b
3872 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3873 ; CHECK-GI-NEXT: ret
3874 %tmp3 = fcmp fast ueq <4 x float> %A, zeroinitializer
3875 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3879 define <2 x i64> @fcmueqz2xdouble_fast(<2 x double> %A) {
3880 ; CHECK-SD-LABEL: fcmueqz2xdouble_fast:
3881 ; CHECK-SD: // %bb.0:
3882 ; CHECK-SD-NEXT: fcmeq v0.2d, v0.2d, #0.0
3883 ; CHECK-SD-NEXT: ret
3885 ; CHECK-GI-LABEL: fcmueqz2xdouble_fast:
3886 ; CHECK-GI: // %bb.0:
3887 ; CHECK-GI-NEXT: fcmgt v1.2d, v0.2d, #0.0
3888 ; CHECK-GI-NEXT: fcmlt v0.2d, v0.2d, #0.0
3889 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v1.16b
3890 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3891 ; CHECK-GI-NEXT: ret
3892 %tmp3 = fcmp fast ueq <2 x double> %A, zeroinitializer
3893 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3897 define <2 x i32> @fcmugez2xfloat_fast(<2 x float> %A) {
3898 ; CHECK-SD-LABEL: fcmugez2xfloat_fast:
3899 ; CHECK-SD: // %bb.0:
3900 ; CHECK-SD-NEXT: fcmge v0.2s, v0.2s, #0.0
3901 ; CHECK-SD-NEXT: ret
3903 ; CHECK-GI-LABEL: fcmugez2xfloat_fast:
3904 ; CHECK-GI: // %bb.0:
3905 ; CHECK-GI-NEXT: fcmlt v0.2s, v0.2s, #0.0
3906 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3907 ; CHECK-GI-NEXT: ret
3908 %tmp3 = fcmp fast uge <2 x float> %A, zeroinitializer
3909 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3913 define <4 x i32> @fcmugez4xfloat_fast(<4 x float> %A) {
3914 ; CHECK-SD-LABEL: fcmugez4xfloat_fast:
3915 ; CHECK-SD: // %bb.0:
3916 ; CHECK-SD-NEXT: fcmge v0.4s, v0.4s, #0.0
3917 ; CHECK-SD-NEXT: ret
3919 ; CHECK-GI-LABEL: fcmugez4xfloat_fast:
3920 ; CHECK-GI: // %bb.0:
3921 ; CHECK-GI-NEXT: fcmlt v0.4s, v0.4s, #0.0
3922 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3923 ; CHECK-GI-NEXT: ret
3924 %tmp3 = fcmp fast uge <4 x float> %A, zeroinitializer
3925 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3929 define <2 x i64> @fcmugez2xdouble_fast(<2 x double> %A) {
3930 ; CHECK-SD-LABEL: fcmugez2xdouble_fast:
3931 ; CHECK-SD: // %bb.0:
3932 ; CHECK-SD-NEXT: fcmge v0.2d, v0.2d, #0.0
3933 ; CHECK-SD-NEXT: ret
3935 ; CHECK-GI-LABEL: fcmugez2xdouble_fast:
3936 ; CHECK-GI: // %bb.0:
3937 ; CHECK-GI-NEXT: fcmlt v0.2d, v0.2d, #0.0
3938 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3939 ; CHECK-GI-NEXT: ret
3940 %tmp3 = fcmp fast uge <2 x double> %A, zeroinitializer
3941 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3945 define <2 x i32> @fcmugtz2xfloat_fast(<2 x float> %A) {
3946 ; CHECK-SD-LABEL: fcmugtz2xfloat_fast:
3947 ; CHECK-SD: // %bb.0:
3948 ; CHECK-SD-NEXT: fcmgt v0.2s, v0.2s, #0.0
3949 ; CHECK-SD-NEXT: ret
3951 ; CHECK-GI-LABEL: fcmugtz2xfloat_fast:
3952 ; CHECK-GI: // %bb.0:
3953 ; CHECK-GI-NEXT: fcmle v0.2s, v0.2s, #0.0
3954 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
3955 ; CHECK-GI-NEXT: ret
3956 %tmp3 = fcmp fast ugt <2 x float> %A, zeroinitializer
3957 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3961 define <4 x i32> @fcmugtz4xfloat_fast(<4 x float> %A) {
3962 ; CHECK-SD-LABEL: fcmugtz4xfloat_fast:
3963 ; CHECK-SD: // %bb.0:
3964 ; CHECK-SD-NEXT: fcmgt v0.4s, v0.4s, #0.0
3965 ; CHECK-SD-NEXT: ret
3967 ; CHECK-GI-LABEL: fcmugtz4xfloat_fast:
3968 ; CHECK-GI: // %bb.0:
3969 ; CHECK-GI-NEXT: fcmle v0.4s, v0.4s, #0.0
3970 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3971 ; CHECK-GI-NEXT: ret
3972 %tmp3 = fcmp fast ugt <4 x float> %A, zeroinitializer
3973 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3977 define <2 x i64> @fcmugtz2xdouble_fast(<2 x double> %A) {
3978 ; CHECK-SD-LABEL: fcmugtz2xdouble_fast:
3979 ; CHECK-SD: // %bb.0:
3980 ; CHECK-SD-NEXT: fcmgt v0.2d, v0.2d, #0.0
3981 ; CHECK-SD-NEXT: ret
3983 ; CHECK-GI-LABEL: fcmugtz2xdouble_fast:
3984 ; CHECK-GI: // %bb.0:
3985 ; CHECK-GI-NEXT: fcmle v0.2d, v0.2d, #0.0
3986 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
3987 ; CHECK-GI-NEXT: ret
3988 %tmp3 = fcmp fast ugt <2 x double> %A, zeroinitializer
3989 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3993 define <2 x i32> @fcmultz2xfloat_fast(<2 x float> %A) {
3994 ; CHECK-SD-LABEL: fcmultz2xfloat_fast:
3995 ; CHECK-SD: // %bb.0:
3996 ; CHECK-SD-NEXT: fcmlt v0.2s, v0.2s, #0.0
3997 ; CHECK-SD-NEXT: ret
3999 ; CHECK-GI-LABEL: fcmultz2xfloat_fast:
4000 ; CHECK-GI: // %bb.0:
4001 ; CHECK-GI-NEXT: fcmge v0.2s, v0.2s, #0.0
4002 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
4003 ; CHECK-GI-NEXT: ret
4004 %tmp3 = fcmp fast ult <2 x float> %A, zeroinitializer
4005 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4009 define <4 x i32> @fcmultz4xfloat_fast(<4 x float> %A) {
4010 ; CHECK-SD-LABEL: fcmultz4xfloat_fast:
4011 ; CHECK-SD: // %bb.0:
4012 ; CHECK-SD-NEXT: fcmlt v0.4s, v0.4s, #0.0
4013 ; CHECK-SD-NEXT: ret
4015 ; CHECK-GI-LABEL: fcmultz4xfloat_fast:
4016 ; CHECK-GI: // %bb.0:
4017 ; CHECK-GI-NEXT: fcmge v0.4s, v0.4s, #0.0
4018 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
4019 ; CHECK-GI-NEXT: ret
4020 %tmp3 = fcmp fast ult <4 x float> %A, zeroinitializer
4021 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4025 define <2 x i64> @fcmultz2xdouble_fast(<2 x double> %A) {
4026 ; CHECK-SD-LABEL: fcmultz2xdouble_fast:
4027 ; CHECK-SD: // %bb.0:
4028 ; CHECK-SD-NEXT: fcmlt v0.2d, v0.2d, #0.0
4029 ; CHECK-SD-NEXT: ret
4031 ; CHECK-GI-LABEL: fcmultz2xdouble_fast:
4032 ; CHECK-GI: // %bb.0:
4033 ; CHECK-GI-NEXT: fcmge v0.2d, v0.2d, #0.0
4034 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
4035 ; CHECK-GI-NEXT: ret
4036 %tmp3 = fcmp fast ult <2 x double> %A, zeroinitializer
4037 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4041 ; ULE with zero = !OGT
4042 define <2 x i32> @fcmulez2xfloat_fast(<2 x float> %A) {
4043 ; CHECK-SD-LABEL: fcmulez2xfloat_fast:
4044 ; CHECK-SD: // %bb.0:
4045 ; CHECK-SD-NEXT: fcmle v0.2s, v0.2s, #0.0
4046 ; CHECK-SD-NEXT: ret
4048 ; CHECK-GI-LABEL: fcmulez2xfloat_fast:
4049 ; CHECK-GI: // %bb.0:
4050 ; CHECK-GI-NEXT: fcmgt v0.2s, v0.2s, #0.0
4051 ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
4052 ; CHECK-GI-NEXT: ret
4053 %tmp3 = fcmp fast ule <2 x float> %A, zeroinitializer
4054 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4058 define <4 x i32> @fcmulez4xfloat_fast(<4 x float> %A) {
4059 ; CHECK-SD-LABEL: fcmulez4xfloat_fast:
4060 ; CHECK-SD: // %bb.0:
4061 ; CHECK-SD-NEXT: fcmle v0.4s, v0.4s, #0.0
4062 ; CHECK-SD-NEXT: ret
4064 ; CHECK-GI-LABEL: fcmulez4xfloat_fast:
4065 ; CHECK-GI: // %bb.0:
4066 ; CHECK-GI-NEXT: fcmgt v0.4s, v0.4s, #0.0
4067 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
4068 ; CHECK-GI-NEXT: ret
4069 %tmp3 = fcmp fast ule <4 x float> %A, zeroinitializer
4070 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4074 define <2 x i64> @fcmulez2xdouble_fast(<2 x double> %A) {
4075 ; CHECK-SD-LABEL: fcmulez2xdouble_fast:
4076 ; CHECK-SD: // %bb.0:
4077 ; CHECK-SD-NEXT: fcmle v0.2d, v0.2d, #0.0
4078 ; CHECK-SD-NEXT: ret
4080 ; CHECK-GI-LABEL: fcmulez2xdouble_fast:
4081 ; CHECK-GI: // %bb.0:
4082 ; CHECK-GI-NEXT: fcmgt v0.2d, v0.2d, #0.0
4083 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
4084 ; CHECK-GI-NEXT: ret
4085 %tmp3 = fcmp fast ule <2 x double> %A, zeroinitializer
4086 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4090 define <2 x i32> @fcmunez2xfloat_fast(<2 x float> %A) {
4091 ; CHECK-LABEL: fcmunez2xfloat_fast:
4093 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
4094 ; CHECK-NEXT: mvn v0.8b, v0.8b
4096 %tmp3 = fcmp fast une <2 x float> %A, zeroinitializer
4097 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4101 define <4 x i32> @fcmunez4xfloat_fast(<4 x float> %A) {
4102 ; CHECK-LABEL: fcmunez4xfloat_fast:
4104 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
4105 ; CHECK-NEXT: mvn v0.16b, v0.16b
4107 %tmp3 = fcmp fast une <4 x float> %A, zeroinitializer
4108 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4112 define <2 x i64> @fcmunez2xdouble_fast(<2 x double> %A) {
4113 ; CHECK-LABEL: fcmunez2xdouble_fast:
4115 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
4116 ; CHECK-NEXT: mvn v0.16b, v0.16b
4118 %tmp3 = fcmp fast une <2 x double> %A, zeroinitializer
4119 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4123 define <2 x i32> @fcmunoz2xfloat_fast(<2 x float> %A) {
4124 ; CHECK-LABEL: fcmunoz2xfloat_fast:
4126 ; CHECK-NEXT: fcmge v1.2s, v0.2s, #0.0
4127 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
4128 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
4129 ; CHECK-NEXT: mvn v0.8b, v0.8b
4131 %tmp3 = fcmp fast uno <2 x float> %A, zeroinitializer
4132 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4136 define <4 x i32> @fcmunoz4xfloat_fast(<4 x float> %A) {
4137 ; CHECK-LABEL: fcmunoz4xfloat_fast:
4139 ; CHECK-NEXT: fcmge v1.4s, v0.4s, #0.0
4140 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
4141 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4142 ; CHECK-NEXT: mvn v0.16b, v0.16b
4144 %tmp3 = fcmp fast uno <4 x float> %A, zeroinitializer
4145 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4149 define <2 x i64> @fcmunoz2xdouble_fast(<2 x double> %A) {
4150 ; CHECK-LABEL: fcmunoz2xdouble_fast:
4152 ; CHECK-NEXT: fcmge v1.2d, v0.2d, #0.0
4153 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
4154 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4155 ; CHECK-NEXT: mvn v0.16b, v0.16b
4157 %tmp3 = fcmp fast uno <2 x double> %A, zeroinitializer
4158 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4163 ; Test SETCC fast-math flags are propagated when combining zext(setcc).
4164 define <4 x i32> @fcmule4xfloat_fast_zext(<4 x float> %A, <4 x float> %B) {
4165 ; CHECK-SD-LABEL: fcmule4xfloat_fast_zext:
4166 ; CHECK-SD: // %bb.0:
4167 ; CHECK-SD-NEXT: movi v2.4s, #1
4168 ; CHECK-SD-NEXT: fcmge v0.4s, v1.4s, v0.4s
4169 ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
4170 ; CHECK-SD-NEXT: ret
4172 ; CHECK-GI-LABEL: fcmule4xfloat_fast_zext:
4173 ; CHECK-GI: // %bb.0:
4174 ; CHECK-GI-NEXT: movi v2.4s, #1
4175 ; CHECK-GI-NEXT: fcmgt v0.4s, v0.4s, v1.4s
4176 ; CHECK-GI-NEXT: bic v0.16b, v2.16b, v0.16b
4177 ; CHECK-GI-NEXT: ret
4178 ; GISEL-LABEL: fcmule4xfloat_fast_zext:
4180 ; GISEL-NEXT: fcmgt v0.4s, v0.4s, v1.4s
4181 ; GISEL-NEXT: adrp x8, .LCPI322_0
4182 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI322_0]
4183 ; GISEL-NEXT: bic v0.16b, v1.16b, v0.16b
4185 %tmp3 = fcmp fast ule <4 x float> %A, %B
4186 %tmp4 = zext <4 x i1> %tmp3 to <4 x i32>
4190 ; Test SETCC fast-math flags are propagated when combining aext(setcc).
4191 define <4 x i1> @fcmule4xfloat_fast_aext(<4 x float> %A, <4 x float> %B) {
4192 ; CHECK-SD-LABEL: fcmule4xfloat_fast_aext:
4193 ; CHECK-SD: // %bb.0:
4194 ; CHECK-SD-NEXT: fcmge v0.4s, v1.4s, v0.4s
4195 ; CHECK-SD-NEXT: xtn v0.4h, v0.4s
4196 ; CHECK-SD-NEXT: ret
4198 ; CHECK-GI-LABEL: fcmule4xfloat_fast_aext:
4199 ; CHECK-GI: // %bb.0:
4200 ; CHECK-GI-NEXT: fcmgt v0.4s, v0.4s, v1.4s
4201 ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
4202 ; CHECK-GI-NEXT: xtn v0.4h, v0.4s
4203 ; CHECK-GI-NEXT: ret
4204 %tmp3 = fcmp fast ule <4 x float> %A, %B
4208 define <4 x i64> @fcmoeq4xdouble(<4 x double> %A, <4 x double> %B) {
4209 ; CHECK-SD-LABEL: fcmoeq4xdouble:
4210 ; CHECK-SD: // %bb.0:
4211 ; CHECK-SD-NEXT: fcmeq v1.2d, v1.2d, v3.2d
4212 ; CHECK-SD-NEXT: fcmeq v0.2d, v0.2d, v2.2d
4213 ; CHECK-SD-NEXT: ret
4215 ; CHECK-GI-LABEL: fcmoeq4xdouble:
4216 ; CHECK-GI: // %bb.0:
4217 ; CHECK-GI-NEXT: fcmeq v0.2d, v0.2d, v2.2d
4218 ; CHECK-GI-NEXT: fcmeq v1.2d, v1.2d, v3.2d
4219 ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #63
4220 ; CHECK-GI-NEXT: shl v1.2d, v1.2d, #63
4221 ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
4222 ; CHECK-GI-NEXT: sshr v1.2d, v1.2d, #63
4223 ; CHECK-GI-NEXT: ret
4224 %tmp3 = fcmp oeq <4 x double> %A, %B
4225 %tmp4 = sext <4 x i1> %tmp3 to <4 x i64>
4229 define <8 x i32> @fcmoeq8xfloat(<8 x float> %A, <8 x float> %B) {
4230 ; CHECK-SD-LABEL: fcmoeq8xfloat:
4231 ; CHECK-SD: // %bb.0:
4232 ; CHECK-SD-NEXT: fcmeq v1.4s, v1.4s, v3.4s
4233 ; CHECK-SD-NEXT: fcmeq v0.4s, v0.4s, v2.4s
4234 ; CHECK-SD-NEXT: ret
4236 ; CHECK-GI-LABEL: fcmoeq8xfloat:
4237 ; CHECK-GI: // %bb.0:
4238 ; CHECK-GI-NEXT: fcmeq v0.4s, v0.4s, v2.4s
4239 ; CHECK-GI-NEXT: fcmeq v1.4s, v1.4s, v3.4s
4240 ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #31
4241 ; CHECK-GI-NEXT: shl v1.4s, v1.4s, #31
4242 ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
4243 ; CHECK-GI-NEXT: sshr v1.4s, v1.4s, #31
4244 ; CHECK-GI-NEXT: ret
4245 %tmp3 = fcmp oeq <8 x float> %A, %B
4246 %tmp4 = sext <8 x i1> %tmp3 to <8 x i32>