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
3 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel -global-isel-abort=2 %s -o - | FileCheck %s --check-prefix=GISEL
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
11 ; GISEL-LABEL: cmeq8xi8:
13 ; GISEL-NEXT: cmeq v0.8b, v0.8b, v1.8b
14 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
15 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
17 %tmp3 = icmp eq <8 x i8> %A, %B;
18 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
22 define <16 x i8> @cmeq16xi8(<16 x i8> %A, <16 x i8> %B) {
23 ; CHECK-LABEL: cmeq16xi8:
25 ; CHECK-NEXT: cmeq v0.16b, v0.16b, v1.16b
28 ; GISEL-LABEL: cmeq16xi8:
30 ; GISEL-NEXT: cmeq v0.16b, v0.16b, v1.16b
31 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
32 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
34 %tmp3 = icmp eq <16 x i8> %A, %B;
35 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
39 define <4 x i16> @cmeq4xi16(<4 x i16> %A, <4 x i16> %B) {
40 ; CHECK-LABEL: cmeq4xi16:
42 ; CHECK-NEXT: cmeq v0.4h, v0.4h, v1.4h
45 ; GISEL-LABEL: cmeq4xi16:
47 ; GISEL-NEXT: cmeq v0.4h, v0.4h, v1.4h
48 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
49 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
51 %tmp3 = icmp eq <4 x i16> %A, %B;
52 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
56 define <8 x i16> @cmeq8xi16(<8 x i16> %A, <8 x i16> %B) {
57 ; CHECK-LABEL: cmeq8xi16:
59 ; CHECK-NEXT: cmeq v0.8h, v0.8h, v1.8h
62 ; GISEL-LABEL: cmeq8xi16:
64 ; GISEL-NEXT: cmeq v0.8h, v0.8h, v1.8h
65 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
66 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
68 %tmp3 = icmp eq <8 x i16> %A, %B;
69 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
73 define <2 x i32> @cmeq2xi32(<2 x i32> %A, <2 x i32> %B) {
74 ; CHECK-LABEL: cmeq2xi32:
76 ; CHECK-NEXT: cmeq v0.2s, v0.2s, v1.2s
79 ; GISEL-LABEL: cmeq2xi32:
81 ; GISEL-NEXT: cmeq v0.2s, v0.2s, v1.2s
82 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
83 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
85 %tmp3 = icmp eq <2 x i32> %A, %B;
86 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
90 define <4 x i32> @cmeq4xi32(<4 x i32> %A, <4 x i32> %B) {
91 ; CHECK-LABEL: cmeq4xi32:
93 ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
96 ; GISEL-LABEL: cmeq4xi32:
98 ; GISEL-NEXT: cmeq v0.4s, v0.4s, v1.4s
99 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
100 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
102 %tmp3 = icmp eq <4 x i32> %A, %B;
103 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
107 define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
108 ; CHECK-LABEL: cmeq2xi64:
110 ; CHECK-NEXT: cmeq v0.2d, v0.2d, v1.2d
113 ; GISEL-LABEL: cmeq2xi64:
115 ; GISEL-NEXT: cmeq v0.2d, v0.2d, v1.2d
116 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
117 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
119 %tmp3 = icmp eq <2 x i64> %A, %B;
120 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
124 define <8 x i8> @cmne8xi8(<8 x i8> %A, <8 x i8> %B) {
125 ; CHECK-LABEL: cmne8xi8:
127 ; CHECK-NEXT: cmeq v0.8b, v0.8b, v1.8b
128 ; CHECK-NEXT: mvn v0.8b, v0.8b
131 ; GISEL-LABEL: cmne8xi8:
133 ; GISEL-NEXT: cmeq v0.8b, v0.8b, v1.8b
134 ; GISEL-NEXT: mvn v0.8b, v0.8b
135 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
136 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
138 %tmp3 = icmp ne <8 x i8> %A, %B;
139 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
143 define <16 x i8> @cmne16xi8(<16 x i8> %A, <16 x i8> %B) {
144 ; CHECK-LABEL: cmne16xi8:
146 ; CHECK-NEXT: cmeq v0.16b, v0.16b, v1.16b
147 ; CHECK-NEXT: mvn v0.16b, v0.16b
150 ; GISEL-LABEL: cmne16xi8:
152 ; GISEL-NEXT: cmeq v0.16b, v0.16b, v1.16b
153 ; GISEL-NEXT: mvn v0.16b, v0.16b
154 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
155 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
157 %tmp3 = icmp ne <16 x i8> %A, %B;
158 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
162 define <4 x i16> @cmne4xi16(<4 x i16> %A, <4 x i16> %B) {
163 ; CHECK-LABEL: cmne4xi16:
165 ; CHECK-NEXT: cmeq v0.4h, v0.4h, v1.4h
166 ; CHECK-NEXT: mvn v0.8b, v0.8b
169 ; GISEL-LABEL: cmne4xi16:
171 ; GISEL-NEXT: cmeq v0.4h, v0.4h, v1.4h
172 ; GISEL-NEXT: mvn v0.8b, v0.8b
173 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
174 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
176 %tmp3 = icmp ne <4 x i16> %A, %B;
177 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
181 define <8 x i16> @cmne8xi16(<8 x i16> %A, <8 x i16> %B) {
182 ; CHECK-LABEL: cmne8xi16:
184 ; CHECK-NEXT: cmeq v0.8h, v0.8h, v1.8h
185 ; CHECK-NEXT: mvn v0.16b, v0.16b
188 ; GISEL-LABEL: cmne8xi16:
190 ; GISEL-NEXT: cmeq v0.8h, v0.8h, v1.8h
191 ; GISEL-NEXT: mvn v0.16b, v0.16b
192 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
193 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
195 %tmp3 = icmp ne <8 x i16> %A, %B;
196 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
200 define <2 x i32> @cmne2xi32(<2 x i32> %A, <2 x i32> %B) {
201 ; CHECK-LABEL: cmne2xi32:
203 ; CHECK-NEXT: cmeq v0.2s, v0.2s, v1.2s
204 ; CHECK-NEXT: mvn v0.8b, v0.8b
207 ; GISEL-LABEL: cmne2xi32:
209 ; GISEL-NEXT: cmeq v0.2s, v0.2s, v1.2s
210 ; GISEL-NEXT: mvn v0.8b, v0.8b
211 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
212 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
214 %tmp3 = icmp ne <2 x i32> %A, %B;
215 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
219 define <4 x i32> @cmne4xi32(<4 x i32> %A, <4 x i32> %B) {
220 ; CHECK-LABEL: cmne4xi32:
222 ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
223 ; CHECK-NEXT: mvn v0.16b, v0.16b
226 ; GISEL-LABEL: cmne4xi32:
228 ; GISEL-NEXT: cmeq v0.4s, v0.4s, v1.4s
229 ; GISEL-NEXT: mvn v0.16b, v0.16b
230 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
231 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
233 %tmp3 = icmp ne <4 x i32> %A, %B;
234 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
238 define <2 x i64> @cmne2xi64(<2 x i64> %A, <2 x i64> %B) {
239 ; CHECK-LABEL: cmne2xi64:
241 ; CHECK-NEXT: cmeq v0.2d, v0.2d, v1.2d
242 ; CHECK-NEXT: mvn v0.16b, v0.16b
245 ; GISEL-LABEL: cmne2xi64:
247 ; GISEL-NEXT: cmeq v0.2d, v0.2d, v1.2d
248 ; GISEL-NEXT: mvn v0.16b, v0.16b
249 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
250 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
252 %tmp3 = icmp ne <2 x i64> %A, %B;
253 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
257 define <8 x i8> @cmgt8xi8(<8 x i8> %A, <8 x i8> %B) {
258 ; CHECK-LABEL: cmgt8xi8:
260 ; CHECK-NEXT: cmgt v0.8b, v0.8b, v1.8b
263 ; GISEL-LABEL: cmgt8xi8:
265 ; GISEL-NEXT: cmgt v0.8b, v0.8b, v1.8b
266 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
267 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
269 %tmp3 = icmp sgt <8 x i8> %A, %B;
270 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
274 define <16 x i8> @cmgt16xi8(<16 x i8> %A, <16 x i8> %B) {
275 ; CHECK-LABEL: cmgt16xi8:
277 ; CHECK-NEXT: cmgt v0.16b, v0.16b, v1.16b
280 ; GISEL-LABEL: cmgt16xi8:
282 ; GISEL-NEXT: cmgt v0.16b, v0.16b, v1.16b
283 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
284 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
286 %tmp3 = icmp sgt <16 x i8> %A, %B;
287 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
291 define <4 x i16> @cmgt4xi16(<4 x i16> %A, <4 x i16> %B) {
292 ; CHECK-LABEL: cmgt4xi16:
294 ; CHECK-NEXT: cmgt v0.4h, v0.4h, v1.4h
297 ; GISEL-LABEL: cmgt4xi16:
299 ; GISEL-NEXT: cmgt v0.4h, v0.4h, v1.4h
300 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
301 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
303 %tmp3 = icmp sgt <4 x i16> %A, %B;
304 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
308 define <8 x i16> @cmgt8xi16(<8 x i16> %A, <8 x i16> %B) {
309 ; CHECK-LABEL: cmgt8xi16:
311 ; CHECK-NEXT: cmgt v0.8h, v0.8h, v1.8h
314 ; GISEL-LABEL: cmgt8xi16:
316 ; GISEL-NEXT: cmgt v0.8h, v0.8h, v1.8h
317 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
318 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
320 %tmp3 = icmp sgt <8 x i16> %A, %B;
321 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
325 define <2 x i32> @cmgt2xi32(<2 x i32> %A, <2 x i32> %B) {
326 ; CHECK-LABEL: cmgt2xi32:
328 ; CHECK-NEXT: cmgt v0.2s, v0.2s, v1.2s
331 ; GISEL-LABEL: cmgt2xi32:
333 ; GISEL-NEXT: cmgt v0.2s, v0.2s, v1.2s
334 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
335 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
337 %tmp3 = icmp sgt <2 x i32> %A, %B;
338 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
342 define <4 x i32> @cmgt4xi32(<4 x i32> %A, <4 x i32> %B) {
343 ; CHECK-LABEL: cmgt4xi32:
345 ; CHECK-NEXT: cmgt v0.4s, v0.4s, v1.4s
348 ; GISEL-LABEL: cmgt4xi32:
350 ; GISEL-NEXT: cmgt v0.4s, v0.4s, v1.4s
351 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
352 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
354 %tmp3 = icmp sgt <4 x i32> %A, %B;
355 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
359 define <2 x i64> @cmgt2xi64(<2 x i64> %A, <2 x i64> %B) {
360 ; CHECK-LABEL: cmgt2xi64:
362 ; CHECK-NEXT: cmgt v0.2d, v0.2d, v1.2d
365 ; GISEL-LABEL: cmgt2xi64:
367 ; GISEL-NEXT: cmgt v0.2d, v0.2d, v1.2d
368 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
369 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
371 %tmp3 = icmp sgt <2 x i64> %A, %B;
372 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
376 ; LT implemented as GT, so check reversed operands.
377 define <8 x i8> @cmlt8xi8(<8 x i8> %A, <8 x i8> %B) {
378 ; CHECK-LABEL: cmlt8xi8:
380 ; CHECK-NEXT: cmgt v0.8b, v1.8b, v0.8b
383 ; GISEL-LABEL: cmlt8xi8:
385 ; GISEL-NEXT: cmgt v0.8b, v1.8b, v0.8b
386 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
387 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
389 %tmp3 = icmp slt <8 x i8> %A, %B;
390 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
394 ; LT implemented as GT, so check reversed operands.
395 define <16 x i8> @cmlt16xi8(<16 x i8> %A, <16 x i8> %B) {
396 ; CHECK-LABEL: cmlt16xi8:
398 ; CHECK-NEXT: cmgt v0.16b, v1.16b, v0.16b
401 ; GISEL-LABEL: cmlt16xi8:
403 ; GISEL-NEXT: cmgt v0.16b, v1.16b, v0.16b
404 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
405 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
407 %tmp3 = icmp slt <16 x i8> %A, %B;
408 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
412 ; LT implemented as GT, so check reversed operands.
413 define <4 x i16> @cmlt4xi16(<4 x i16> %A, <4 x i16> %B) {
414 ; CHECK-LABEL: cmlt4xi16:
416 ; CHECK-NEXT: cmgt v0.4h, v1.4h, v0.4h
419 ; GISEL-LABEL: cmlt4xi16:
421 ; GISEL-NEXT: cmgt v0.4h, v1.4h, v0.4h
422 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
423 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
425 %tmp3 = icmp slt <4 x i16> %A, %B;
426 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
430 ; LT implemented as GT, so check reversed operands.
431 define <8 x i16> @cmlt8xi16(<8 x i16> %A, <8 x i16> %B) {
432 ; CHECK-LABEL: cmlt8xi16:
434 ; CHECK-NEXT: cmgt v0.8h, v1.8h, v0.8h
437 ; GISEL-LABEL: cmlt8xi16:
439 ; GISEL-NEXT: cmgt v0.8h, v1.8h, v0.8h
440 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
441 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
443 %tmp3 = icmp slt <8 x i16> %A, %B;
444 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
448 ; LT implemented as GT, so check reversed operands.
449 define <2 x i32> @cmlt2xi32(<2 x i32> %A, <2 x i32> %B) {
450 ; CHECK-LABEL: cmlt2xi32:
452 ; CHECK-NEXT: cmgt v0.2s, v1.2s, v0.2s
455 ; GISEL-LABEL: cmlt2xi32:
457 ; GISEL-NEXT: cmgt v0.2s, v1.2s, v0.2s
458 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
459 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
461 %tmp3 = icmp slt <2 x i32> %A, %B;
462 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
466 ; LT implemented as GT, so check reversed operands.
467 define <4 x i32> @cmlt4xi32(<4 x i32> %A, <4 x i32> %B) {
468 ; CHECK-LABEL: cmlt4xi32:
470 ; CHECK-NEXT: cmgt v0.4s, v1.4s, v0.4s
473 ; GISEL-LABEL: cmlt4xi32:
475 ; GISEL-NEXT: cmgt v0.4s, v1.4s, v0.4s
476 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
477 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
479 %tmp3 = icmp slt <4 x i32> %A, %B;
480 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
484 ; LT implemented as GT, so check reversed operands.
485 define <2 x i64> @cmlt2xi64(<2 x i64> %A, <2 x i64> %B) {
486 ; CHECK-LABEL: cmlt2xi64:
488 ; CHECK-NEXT: cmgt v0.2d, v1.2d, v0.2d
491 ; GISEL-LABEL: cmlt2xi64:
493 ; GISEL-NEXT: cmgt v0.2d, v1.2d, v0.2d
494 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
495 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
497 %tmp3 = icmp slt <2 x i64> %A, %B;
498 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
502 define <8 x i8> @cmge8xi8(<8 x i8> %A, <8 x i8> %B) {
503 ; CHECK-LABEL: cmge8xi8:
505 ; CHECK-NEXT: cmge v0.8b, v0.8b, v1.8b
508 ; GISEL-LABEL: cmge8xi8:
510 ; GISEL-NEXT: cmge v0.8b, v0.8b, v1.8b
511 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
512 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
514 %tmp3 = icmp sge <8 x i8> %A, %B;
515 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
519 define <16 x i8> @cmge16xi8(<16 x i8> %A, <16 x i8> %B) {
520 ; CHECK-LABEL: cmge16xi8:
522 ; CHECK-NEXT: cmge v0.16b, v0.16b, v1.16b
525 ; GISEL-LABEL: cmge16xi8:
527 ; GISEL-NEXT: cmge v0.16b, v0.16b, v1.16b
528 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
529 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
531 %tmp3 = icmp sge <16 x i8> %A, %B;
532 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
536 define <4 x i16> @cmge4xi16(<4 x i16> %A, <4 x i16> %B) {
537 ; CHECK-LABEL: cmge4xi16:
539 ; CHECK-NEXT: cmge v0.4h, v0.4h, v1.4h
542 ; GISEL-LABEL: cmge4xi16:
544 ; GISEL-NEXT: cmge v0.4h, v0.4h, v1.4h
545 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
546 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
548 %tmp3 = icmp sge <4 x i16> %A, %B;
549 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
553 define <8 x i16> @cmge8xi16(<8 x i16> %A, <8 x i16> %B) {
554 ; CHECK-LABEL: cmge8xi16:
556 ; CHECK-NEXT: cmge v0.8h, v0.8h, v1.8h
559 ; GISEL-LABEL: cmge8xi16:
561 ; GISEL-NEXT: cmge v0.8h, v0.8h, v1.8h
562 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
563 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
565 %tmp3 = icmp sge <8 x i16> %A, %B;
566 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
570 define <2 x i32> @cmge2xi32(<2 x i32> %A, <2 x i32> %B) {
571 ; CHECK-LABEL: cmge2xi32:
573 ; CHECK-NEXT: cmge v0.2s, v0.2s, v1.2s
576 ; GISEL-LABEL: cmge2xi32:
578 ; GISEL-NEXT: cmge v0.2s, v0.2s, v1.2s
579 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
580 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
582 %tmp3 = icmp sge <2 x i32> %A, %B;
583 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
587 define <4 x i32> @cmge4xi32(<4 x i32> %A, <4 x i32> %B) {
588 ; CHECK-LABEL: cmge4xi32:
590 ; CHECK-NEXT: cmge v0.4s, v0.4s, v1.4s
593 ; GISEL-LABEL: cmge4xi32:
595 ; GISEL-NEXT: cmge v0.4s, v0.4s, v1.4s
596 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
597 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
599 %tmp3 = icmp sge <4 x i32> %A, %B;
600 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
604 define <2 x i64> @cmge2xi64(<2 x i64> %A, <2 x i64> %B) {
605 ; CHECK-LABEL: cmge2xi64:
607 ; CHECK-NEXT: cmge v0.2d, v0.2d, v1.2d
610 ; GISEL-LABEL: cmge2xi64:
612 ; GISEL-NEXT: cmge v0.2d, v0.2d, v1.2d
613 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
614 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
616 %tmp3 = icmp sge <2 x i64> %A, %B;
617 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
621 ; LE implemented as GE, so check reversed operands.
622 define <8 x i8> @cmle8xi8(<8 x i8> %A, <8 x i8> %B) {
623 ; CHECK-LABEL: cmle8xi8:
625 ; CHECK-NEXT: cmge v0.8b, v1.8b, v0.8b
628 ; GISEL-LABEL: cmle8xi8:
630 ; GISEL-NEXT: cmge v0.8b, v1.8b, v0.8b
631 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
632 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
634 %tmp3 = icmp sle <8 x i8> %A, %B;
635 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
639 ; LE implemented as GE, so check reversed operands.
640 define <16 x i8> @cmle16xi8(<16 x i8> %A, <16 x i8> %B) {
641 ; CHECK-LABEL: cmle16xi8:
643 ; CHECK-NEXT: cmge v0.16b, v1.16b, v0.16b
646 ; GISEL-LABEL: cmle16xi8:
648 ; GISEL-NEXT: cmge v0.16b, v1.16b, v0.16b
649 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
650 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
652 %tmp3 = icmp sle <16 x i8> %A, %B;
653 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
657 ; LE implemented as GE, so check reversed operands.
658 define <4 x i16> @cmle4xi16(<4 x i16> %A, <4 x i16> %B) {
659 ; CHECK-LABEL: cmle4xi16:
661 ; CHECK-NEXT: cmge v0.4h, v1.4h, v0.4h
664 ; GISEL-LABEL: cmle4xi16:
666 ; GISEL-NEXT: cmge v0.4h, v1.4h, v0.4h
667 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
668 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
670 %tmp3 = icmp sle <4 x i16> %A, %B;
671 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
675 ; LE implemented as GE, so check reversed operands.
676 define <8 x i16> @cmle8xi16(<8 x i16> %A, <8 x i16> %B) {
677 ; CHECK-LABEL: cmle8xi16:
679 ; CHECK-NEXT: cmge v0.8h, v1.8h, v0.8h
682 ; GISEL-LABEL: cmle8xi16:
684 ; GISEL-NEXT: cmge v0.8h, v1.8h, v0.8h
685 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
686 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
688 %tmp3 = icmp sle <8 x i16> %A, %B;
689 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
693 ; LE implemented as GE, so check reversed operands.
694 define <2 x i32> @cmle2xi32(<2 x i32> %A, <2 x i32> %B) {
695 ; CHECK-LABEL: cmle2xi32:
697 ; CHECK-NEXT: cmge v0.2s, v1.2s, v0.2s
700 ; GISEL-LABEL: cmle2xi32:
702 ; GISEL-NEXT: cmge v0.2s, v1.2s, v0.2s
703 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
704 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
706 %tmp3 = icmp sle <2 x i32> %A, %B;
707 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
711 ; LE implemented as GE, so check reversed operands.
712 define <4 x i32> @cmle4xi32(<4 x i32> %A, <4 x i32> %B) {
713 ; CHECK-LABEL: cmle4xi32:
715 ; CHECK-NEXT: cmge v0.4s, v1.4s, v0.4s
718 ; GISEL-LABEL: cmle4xi32:
720 ; GISEL-NEXT: cmge v0.4s, v1.4s, v0.4s
721 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
722 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
724 %tmp3 = icmp sle <4 x i32> %A, %B;
725 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
729 ; LE implemented as GE, so check reversed operands.
730 define <2 x i64> @cmle2xi64(<2 x i64> %A, <2 x i64> %B) {
731 ; CHECK-LABEL: cmle2xi64:
733 ; CHECK-NEXT: cmge v0.2d, v1.2d, v0.2d
736 ; GISEL-LABEL: cmle2xi64:
738 ; GISEL-NEXT: cmge v0.2d, v1.2d, v0.2d
739 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
740 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
742 %tmp3 = icmp sle <2 x i64> %A, %B;
743 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
747 define <8 x i8> @cmhi8xi8(<8 x i8> %A, <8 x i8> %B) {
748 ; CHECK-LABEL: cmhi8xi8:
750 ; CHECK-NEXT: cmhi v0.8b, v0.8b, v1.8b
753 ; GISEL-LABEL: cmhi8xi8:
755 ; GISEL-NEXT: cmhi v0.8b, v0.8b, v1.8b
756 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
757 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
759 %tmp3 = icmp ugt <8 x i8> %A, %B;
760 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
764 define <16 x i8> @cmhi16xi8(<16 x i8> %A, <16 x i8> %B) {
765 ; CHECK-LABEL: cmhi16xi8:
767 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
770 ; GISEL-LABEL: cmhi16xi8:
772 ; GISEL-NEXT: cmhi v0.16b, v0.16b, v1.16b
773 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
774 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
776 %tmp3 = icmp ugt <16 x i8> %A, %B;
777 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
781 define <4 x i16> @cmhi4xi16(<4 x i16> %A, <4 x i16> %B) {
782 ; CHECK-LABEL: cmhi4xi16:
784 ; CHECK-NEXT: cmhi v0.4h, v0.4h, v1.4h
787 ; GISEL-LABEL: cmhi4xi16:
789 ; GISEL-NEXT: cmhi v0.4h, v0.4h, v1.4h
790 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
791 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
793 %tmp3 = icmp ugt <4 x i16> %A, %B;
794 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
798 define <8 x i16> @cmhi8xi16(<8 x i16> %A, <8 x i16> %B) {
799 ; CHECK-LABEL: cmhi8xi16:
801 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
804 ; GISEL-LABEL: cmhi8xi16:
806 ; GISEL-NEXT: cmhi v0.8h, v0.8h, v1.8h
807 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
808 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
810 %tmp3 = icmp ugt <8 x i16> %A, %B;
811 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
815 define <2 x i32> @cmhi2xi32(<2 x i32> %A, <2 x i32> %B) {
816 ; CHECK-LABEL: cmhi2xi32:
818 ; CHECK-NEXT: cmhi v0.2s, v0.2s, v1.2s
821 ; GISEL-LABEL: cmhi2xi32:
823 ; GISEL-NEXT: cmhi v0.2s, v0.2s, v1.2s
824 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
825 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
827 %tmp3 = icmp ugt <2 x i32> %A, %B;
828 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
832 define <4 x i32> @cmhi4xi32(<4 x i32> %A, <4 x i32> %B) {
833 ; CHECK-LABEL: cmhi4xi32:
835 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
838 ; GISEL-LABEL: cmhi4xi32:
840 ; GISEL-NEXT: cmhi v0.4s, v0.4s, v1.4s
841 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
842 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
844 %tmp3 = icmp ugt <4 x i32> %A, %B;
845 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
849 define <2 x i64> @cmhi2xi64(<2 x i64> %A, <2 x i64> %B) {
850 ; CHECK-LABEL: cmhi2xi64:
852 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
855 ; GISEL-LABEL: cmhi2xi64:
857 ; GISEL-NEXT: cmhi v0.2d, v0.2d, v1.2d
858 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
859 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
861 %tmp3 = icmp ugt <2 x i64> %A, %B;
862 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
866 ; LO implemented as HI, so check reversed operands.
867 define <8 x i8> @cmlo8xi8(<8 x i8> %A, <8 x i8> %B) {
868 ; CHECK-LABEL: cmlo8xi8:
870 ; CHECK-NEXT: cmhi v0.8b, v1.8b, v0.8b
873 ; GISEL-LABEL: cmlo8xi8:
875 ; GISEL-NEXT: cmhi v0.8b, v1.8b, v0.8b
876 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
877 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
879 %tmp3 = icmp ult <8 x i8> %A, %B;
880 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
884 ; LO implemented as HI, so check reversed operands.
885 define <16 x i8> @cmlo16xi8(<16 x i8> %A, <16 x i8> %B) {
886 ; CHECK-LABEL: cmlo16xi8:
888 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
891 ; GISEL-LABEL: cmlo16xi8:
893 ; GISEL-NEXT: cmhi v0.16b, v1.16b, v0.16b
894 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
895 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
897 %tmp3 = icmp ult <16 x i8> %A, %B;
898 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
902 ; LO implemented as HI, so check reversed operands.
903 define <4 x i16> @cmlo4xi16(<4 x i16> %A, <4 x i16> %B) {
904 ; CHECK-LABEL: cmlo4xi16:
906 ; CHECK-NEXT: cmhi v0.4h, v1.4h, v0.4h
909 ; GISEL-LABEL: cmlo4xi16:
911 ; GISEL-NEXT: cmhi v0.4h, v1.4h, v0.4h
912 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
913 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
915 %tmp3 = icmp ult <4 x i16> %A, %B;
916 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
920 ; LO implemented as HI, so check reversed operands.
921 define <8 x i16> @cmlo8xi16(<8 x i16> %A, <8 x i16> %B) {
922 ; CHECK-LABEL: cmlo8xi16:
924 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
927 ; GISEL-LABEL: cmlo8xi16:
929 ; GISEL-NEXT: cmhi v0.8h, v1.8h, v0.8h
930 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
931 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
933 %tmp3 = icmp ult <8 x i16> %A, %B;
934 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
938 ; LO implemented as HI, so check reversed operands.
939 define <2 x i32> @cmlo2xi32(<2 x i32> %A, <2 x i32> %B) {
940 ; CHECK-LABEL: cmlo2xi32:
942 ; CHECK-NEXT: cmhi v0.2s, v1.2s, v0.2s
945 ; GISEL-LABEL: cmlo2xi32:
947 ; GISEL-NEXT: cmhi v0.2s, v1.2s, v0.2s
948 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
949 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
951 %tmp3 = icmp ult <2 x i32> %A, %B;
952 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
956 ; LO implemented as HI, so check reversed operands.
957 define <4 x i32> @cmlo4xi32(<4 x i32> %A, <4 x i32> %B) {
958 ; CHECK-LABEL: cmlo4xi32:
960 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
963 ; GISEL-LABEL: cmlo4xi32:
965 ; GISEL-NEXT: cmhi v0.4s, v1.4s, v0.4s
966 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
967 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
969 %tmp3 = icmp ult <4 x i32> %A, %B;
970 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
974 ; LO implemented as HI, so check reversed operands.
975 define <2 x i64> @cmlo2xi64(<2 x i64> %A, <2 x i64> %B) {
976 ; CHECK-LABEL: cmlo2xi64:
978 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
981 ; GISEL-LABEL: cmlo2xi64:
983 ; GISEL-NEXT: cmhi v0.2d, v1.2d, v0.2d
984 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
985 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
987 %tmp3 = icmp ult <2 x i64> %A, %B;
988 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
992 define <8 x i8> @cmhs8xi8(<8 x i8> %A, <8 x i8> %B) {
993 ; CHECK-LABEL: cmhs8xi8:
995 ; CHECK-NEXT: cmhs v0.8b, v0.8b, v1.8b
998 ; GISEL-LABEL: cmhs8xi8:
1000 ; GISEL-NEXT: cmhs v0.8b, v0.8b, v1.8b
1001 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1002 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1004 %tmp3 = icmp uge <8 x i8> %A, %B;
1005 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1009 define <16 x i8> @cmhs16xi8(<16 x i8> %A, <16 x i8> %B) {
1010 ; CHECK-LABEL: cmhs16xi8:
1012 ; CHECK-NEXT: cmhs v0.16b, v0.16b, v1.16b
1015 ; GISEL-LABEL: cmhs16xi8:
1017 ; GISEL-NEXT: cmhs v0.16b, v0.16b, v1.16b
1018 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1019 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1021 %tmp3 = icmp uge <16 x i8> %A, %B;
1022 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1026 define <4 x i16> @cmhs4xi16(<4 x i16> %A, <4 x i16> %B) {
1027 ; CHECK-LABEL: cmhs4xi16:
1029 ; CHECK-NEXT: cmhs v0.4h, v0.4h, v1.4h
1032 ; GISEL-LABEL: cmhs4xi16:
1034 ; GISEL-NEXT: cmhs v0.4h, v0.4h, v1.4h
1035 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1036 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1038 %tmp3 = icmp uge <4 x i16> %A, %B;
1039 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1043 define <8 x i16> @cmhs8xi16(<8 x i16> %A, <8 x i16> %B) {
1044 ; CHECK-LABEL: cmhs8xi16:
1046 ; CHECK-NEXT: cmhs v0.8h, v0.8h, v1.8h
1049 ; GISEL-LABEL: cmhs8xi16:
1051 ; GISEL-NEXT: cmhs v0.8h, v0.8h, v1.8h
1052 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1053 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1055 %tmp3 = icmp uge <8 x i16> %A, %B;
1056 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1060 define <2 x i32> @cmhs2xi32(<2 x i32> %A, <2 x i32> %B) {
1061 ; CHECK-LABEL: cmhs2xi32:
1063 ; CHECK-NEXT: cmhs v0.2s, v0.2s, v1.2s
1066 ; GISEL-LABEL: cmhs2xi32:
1068 ; GISEL-NEXT: cmhs v0.2s, v0.2s, v1.2s
1069 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1070 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1072 %tmp3 = icmp uge <2 x i32> %A, %B;
1073 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1077 define <4 x i32> @cmhs4xi32(<4 x i32> %A, <4 x i32> %B) {
1078 ; CHECK-LABEL: cmhs4xi32:
1080 ; CHECK-NEXT: cmhs v0.4s, v0.4s, v1.4s
1083 ; GISEL-LABEL: cmhs4xi32:
1085 ; GISEL-NEXT: cmhs v0.4s, v0.4s, v1.4s
1086 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1087 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1089 %tmp3 = icmp uge <4 x i32> %A, %B;
1090 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1094 define <2 x i64> @cmhs2xi64(<2 x i64> %A, <2 x i64> %B) {
1095 ; CHECK-LABEL: cmhs2xi64:
1097 ; CHECK-NEXT: cmhs v0.2d, v0.2d, v1.2d
1100 ; GISEL-LABEL: cmhs2xi64:
1102 ; GISEL-NEXT: cmhs v0.2d, v0.2d, v1.2d
1103 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1104 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1106 %tmp3 = icmp uge <2 x i64> %A, %B;
1107 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1111 ; LS implemented as HS, so check reversed operands.
1112 define <8 x i8> @cmls8xi8(<8 x i8> %A, <8 x i8> %B) {
1113 ; CHECK-LABEL: cmls8xi8:
1115 ; CHECK-NEXT: cmhs v0.8b, v1.8b, v0.8b
1118 ; GISEL-LABEL: cmls8xi8:
1120 ; GISEL-NEXT: cmhs v0.8b, v1.8b, v0.8b
1121 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1122 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1124 %tmp3 = icmp ule <8 x i8> %A, %B;
1125 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1129 ; LS implemented as HS, so check reversed operands.
1130 define <16 x i8> @cmls16xi8(<16 x i8> %A, <16 x i8> %B) {
1131 ; CHECK-LABEL: cmls16xi8:
1133 ; CHECK-NEXT: cmhs v0.16b, v1.16b, v0.16b
1136 ; GISEL-LABEL: cmls16xi8:
1138 ; GISEL-NEXT: cmhs v0.16b, v1.16b, v0.16b
1139 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1140 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1142 %tmp3 = icmp ule <16 x i8> %A, %B;
1143 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1147 ; LS implemented as HS, so check reversed operands.
1148 define <4 x i16> @cmls4xi16(<4 x i16> %A, <4 x i16> %B) {
1149 ; CHECK-LABEL: cmls4xi16:
1151 ; CHECK-NEXT: cmhs v0.4h, v1.4h, v0.4h
1154 ; GISEL-LABEL: cmls4xi16:
1156 ; GISEL-NEXT: cmhs v0.4h, v1.4h, v0.4h
1157 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1158 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1160 %tmp3 = icmp ule <4 x i16> %A, %B;
1161 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1165 ; LS implemented as HS, so check reversed operands.
1166 define <8 x i16> @cmls8xi16(<8 x i16> %A, <8 x i16> %B) {
1167 ; CHECK-LABEL: cmls8xi16:
1169 ; CHECK-NEXT: cmhs v0.8h, v1.8h, v0.8h
1172 ; GISEL-LABEL: cmls8xi16:
1174 ; GISEL-NEXT: cmhs v0.8h, v1.8h, v0.8h
1175 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1176 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1178 %tmp3 = icmp ule <8 x i16> %A, %B;
1179 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1183 ; LS implemented as HS, so check reversed operands.
1184 define <2 x i32> @cmls2xi32(<2 x i32> %A, <2 x i32> %B) {
1185 ; CHECK-LABEL: cmls2xi32:
1187 ; CHECK-NEXT: cmhs v0.2s, v1.2s, v0.2s
1190 ; GISEL-LABEL: cmls2xi32:
1192 ; GISEL-NEXT: cmhs v0.2s, v1.2s, v0.2s
1193 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1194 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1196 %tmp3 = icmp ule <2 x i32> %A, %B;
1197 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1201 ; LS implemented as HS, so check reversed operands.
1202 define <4 x i32> @cmls4xi32(<4 x i32> %A, <4 x i32> %B) {
1203 ; CHECK-LABEL: cmls4xi32:
1205 ; CHECK-NEXT: cmhs v0.4s, v1.4s, v0.4s
1208 ; GISEL-LABEL: cmls4xi32:
1210 ; GISEL-NEXT: cmhs v0.4s, v1.4s, v0.4s
1211 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1212 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1214 %tmp3 = icmp ule <4 x i32> %A, %B;
1215 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1219 ; LS implemented as HS, so check reversed operands.
1220 define <2 x i64> @cmls2xi64(<2 x i64> %A, <2 x i64> %B) {
1221 ; CHECK-LABEL: cmls2xi64:
1223 ; CHECK-NEXT: cmhs v0.2d, v1.2d, v0.2d
1226 ; GISEL-LABEL: cmls2xi64:
1228 ; GISEL-NEXT: cmhs v0.2d, v1.2d, v0.2d
1229 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1230 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1232 %tmp3 = icmp ule <2 x i64> %A, %B;
1233 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1237 define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
1238 ; CHECK-LABEL: cmtst8xi8:
1240 ; CHECK-NEXT: cmtst v0.8b, v0.8b, v1.8b
1243 ; GISEL-LABEL: cmtst8xi8:
1245 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1246 ; GISEL-NEXT: and v0.8b, v0.8b, v1.8b
1247 ; GISEL-NEXT: cmeq v0.8b, v0.8b, v2.8b
1248 ; GISEL-NEXT: mvn v0.8b, v0.8b
1249 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1250 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1252 %tmp3 = and <8 x i8> %A, %B
1253 %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
1254 %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
1258 define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
1259 ; CHECK-LABEL: cmtst16xi8:
1261 ; CHECK-NEXT: cmtst v0.16b, v0.16b, v1.16b
1264 ; GISEL-LABEL: cmtst16xi8:
1266 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1267 ; GISEL-NEXT: and v0.16b, v0.16b, v1.16b
1268 ; GISEL-NEXT: cmeq v0.16b, v0.16b, v2.16b
1269 ; GISEL-NEXT: mvn v0.16b, v0.16b
1270 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1271 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1273 %tmp3 = and <16 x i8> %A, %B
1274 %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
1275 %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
1279 define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
1280 ; CHECK-LABEL: cmtst4xi16:
1282 ; CHECK-NEXT: cmtst v0.4h, v0.4h, v1.4h
1285 ; GISEL-LABEL: cmtst4xi16:
1287 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1288 ; GISEL-NEXT: and v0.8b, v0.8b, v1.8b
1289 ; GISEL-NEXT: cmeq v0.4h, v0.4h, v2.4h
1290 ; GISEL-NEXT: mvn v0.8b, v0.8b
1291 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1292 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1294 %tmp3 = and <4 x i16> %A, %B
1295 %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
1296 %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
1300 define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
1301 ; CHECK-LABEL: cmtst8xi16:
1303 ; CHECK-NEXT: cmtst v0.8h, v0.8h, v1.8h
1306 ; GISEL-LABEL: cmtst8xi16:
1308 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1309 ; GISEL-NEXT: and v0.16b, v0.16b, v1.16b
1310 ; GISEL-NEXT: cmeq v0.8h, v0.8h, v2.8h
1311 ; GISEL-NEXT: mvn v0.16b, v0.16b
1312 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1313 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1315 %tmp3 = and <8 x i16> %A, %B
1316 %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
1317 %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
1321 define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
1322 ; CHECK-LABEL: cmtst2xi32:
1324 ; CHECK-NEXT: cmtst v0.2s, v0.2s, v1.2s
1327 ; GISEL-LABEL: cmtst2xi32:
1329 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1330 ; GISEL-NEXT: and v0.8b, v0.8b, v1.8b
1331 ; GISEL-NEXT: cmeq v0.2s, v0.2s, v2.2s
1332 ; GISEL-NEXT: mvn v0.8b, v0.8b
1333 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1334 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1336 %tmp3 = and <2 x i32> %A, %B
1337 %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
1338 %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
1342 define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
1343 ; CHECK-LABEL: cmtst4xi32:
1345 ; CHECK-NEXT: cmtst v0.4s, v0.4s, v1.4s
1348 ; GISEL-LABEL: cmtst4xi32:
1350 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1351 ; GISEL-NEXT: and v0.16b, v0.16b, v1.16b
1352 ; GISEL-NEXT: cmeq v0.4s, v0.4s, v2.4s
1353 ; GISEL-NEXT: mvn v0.16b, v0.16b
1354 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1355 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1357 %tmp3 = and <4 x i32> %A, %B
1358 %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
1359 %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
1363 define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
1364 ; CHECK-LABEL: cmtst2xi64:
1366 ; CHECK-NEXT: cmtst v0.2d, v0.2d, v1.2d
1369 ; GISEL-LABEL: cmtst2xi64:
1371 ; GISEL-NEXT: movi v2.2d, #0000000000000000
1372 ; GISEL-NEXT: and v0.16b, v0.16b, v1.16b
1373 ; GISEL-NEXT: cmeq v0.2d, v0.2d, v2.2d
1374 ; GISEL-NEXT: mvn v0.16b, v0.16b
1375 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1376 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1378 %tmp3 = and <2 x i64> %A, %B
1379 %tmp4 = icmp ne <2 x i64> %tmp3, zeroinitializer
1380 %tmp5 = sext <2 x i1> %tmp4 to <2 x i64>
1386 define <8 x i8> @cmeqz8xi8(<8 x i8> %A) {
1387 ; CHECK-LABEL: cmeqz8xi8:
1389 ; CHECK-NEXT: cmeq v0.8b, v0.8b, #0
1392 ; GISEL-LABEL: cmeqz8xi8:
1394 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1395 ; GISEL-NEXT: cmeq v0.8b, v0.8b, v1.8b
1396 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1397 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1399 %tmp3 = icmp eq <8 x i8> %A, zeroinitializer;
1400 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1404 define <16 x i8> @cmeqz16xi8(<16 x i8> %A) {
1405 ; CHECK-LABEL: cmeqz16xi8:
1407 ; CHECK-NEXT: cmeq v0.16b, v0.16b, #0
1410 ; GISEL-LABEL: cmeqz16xi8:
1412 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1413 ; GISEL-NEXT: cmeq v0.16b, v0.16b, v1.16b
1414 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1415 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1417 %tmp3 = icmp eq <16 x i8> %A, zeroinitializer;
1418 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1422 define <4 x i16> @cmeqz4xi16(<4 x i16> %A) {
1423 ; CHECK-LABEL: cmeqz4xi16:
1425 ; CHECK-NEXT: cmeq v0.4h, v0.4h, #0
1428 ; GISEL-LABEL: cmeqz4xi16:
1430 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1431 ; GISEL-NEXT: cmeq v0.4h, v0.4h, v1.4h
1432 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1433 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1435 %tmp3 = icmp eq <4 x i16> %A, zeroinitializer;
1436 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1440 define <8 x i16> @cmeqz8xi16(<8 x i16> %A) {
1441 ; CHECK-LABEL: cmeqz8xi16:
1443 ; CHECK-NEXT: cmeq v0.8h, v0.8h, #0
1446 ; GISEL-LABEL: cmeqz8xi16:
1448 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1449 ; GISEL-NEXT: cmeq v0.8h, v0.8h, v1.8h
1450 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1451 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1453 %tmp3 = icmp eq <8 x i16> %A, zeroinitializer;
1454 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1458 define <2 x i32> @cmeqz2xi32(<2 x i32> %A) {
1459 ; CHECK-LABEL: cmeqz2xi32:
1461 ; CHECK-NEXT: cmeq v0.2s, v0.2s, #0
1464 ; GISEL-LABEL: cmeqz2xi32:
1466 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1467 ; GISEL-NEXT: cmeq v0.2s, v0.2s, v1.2s
1468 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1469 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1471 %tmp3 = icmp eq <2 x i32> %A, zeroinitializer;
1472 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1476 define <4 x i32> @cmeqz4xi32(<4 x i32> %A) {
1477 ; CHECK-LABEL: cmeqz4xi32:
1479 ; CHECK-NEXT: cmeq v0.4s, v0.4s, #0
1482 ; GISEL-LABEL: cmeqz4xi32:
1484 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1485 ; GISEL-NEXT: cmeq v0.4s, v0.4s, v1.4s
1486 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1487 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1489 %tmp3 = icmp eq <4 x i32> %A, zeroinitializer;
1490 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1494 define <2 x i64> @cmeqz2xi64(<2 x i64> %A) {
1495 ; CHECK-LABEL: cmeqz2xi64:
1497 ; CHECK-NEXT: cmeq v0.2d, v0.2d, #0
1500 ; GISEL-LABEL: cmeqz2xi64:
1502 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1503 ; GISEL-NEXT: cmeq v0.2d, v0.2d, v1.2d
1504 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1505 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1507 %tmp3 = icmp eq <2 x i64> %A, zeroinitializer;
1508 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1513 define <8 x i8> @cmgez8xi8(<8 x i8> %A) {
1514 ; CHECK-LABEL: cmgez8xi8:
1516 ; CHECK-NEXT: cmge v0.8b, v0.8b, #0
1519 ; GISEL-LABEL: cmgez8xi8:
1521 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1522 ; GISEL-NEXT: cmge v0.8b, v0.8b, v1.8b
1523 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1524 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1526 %tmp3 = icmp sge <8 x i8> %A, zeroinitializer;
1527 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1531 define <16 x i8> @cmgez16xi8(<16 x i8> %A) {
1532 ; CHECK-LABEL: cmgez16xi8:
1534 ; CHECK-NEXT: cmge v0.16b, v0.16b, #0
1537 ; GISEL-LABEL: cmgez16xi8:
1539 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1540 ; GISEL-NEXT: cmge v0.16b, v0.16b, v1.16b
1541 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1542 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1544 %tmp3 = icmp sge <16 x i8> %A, zeroinitializer;
1545 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1549 define <4 x i16> @cmgez4xi16(<4 x i16> %A) {
1550 ; CHECK-LABEL: cmgez4xi16:
1552 ; CHECK-NEXT: cmge v0.4h, v0.4h, #0
1555 ; GISEL-LABEL: cmgez4xi16:
1557 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1558 ; GISEL-NEXT: cmge v0.4h, v0.4h, v1.4h
1559 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1560 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1562 %tmp3 = icmp sge <4 x i16> %A, zeroinitializer;
1563 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1567 define <8 x i16> @cmgez8xi16(<8 x i16> %A) {
1568 ; CHECK-LABEL: cmgez8xi16:
1570 ; CHECK-NEXT: cmge v0.8h, v0.8h, #0
1573 ; GISEL-LABEL: cmgez8xi16:
1575 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1576 ; GISEL-NEXT: cmge v0.8h, v0.8h, v1.8h
1577 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1578 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1580 %tmp3 = icmp sge <8 x i16> %A, zeroinitializer;
1581 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1585 define <2 x i32> @cmgez2xi32(<2 x i32> %A) {
1586 ; CHECK-LABEL: cmgez2xi32:
1588 ; CHECK-NEXT: cmge v0.2s, v0.2s, #0
1591 ; GISEL-LABEL: cmgez2xi32:
1593 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1594 ; GISEL-NEXT: cmge v0.2s, v0.2s, v1.2s
1595 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1596 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1598 %tmp3 = icmp sge <2 x i32> %A, zeroinitializer;
1599 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1603 define <4 x i32> @cmgez4xi32(<4 x i32> %A) {
1604 ; CHECK-LABEL: cmgez4xi32:
1606 ; CHECK-NEXT: cmge v0.4s, v0.4s, #0
1609 ; GISEL-LABEL: cmgez4xi32:
1611 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1612 ; GISEL-NEXT: cmge v0.4s, v0.4s, v1.4s
1613 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1614 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1616 %tmp3 = icmp sge <4 x i32> %A, zeroinitializer;
1617 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1621 define <2 x i64> @cmgez2xi64(<2 x i64> %A) {
1622 ; CHECK-LABEL: cmgez2xi64:
1624 ; CHECK-NEXT: cmge v0.2d, v0.2d, #0
1627 ; GISEL-LABEL: cmgez2xi64:
1629 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1630 ; GISEL-NEXT: cmge v0.2d, v0.2d, v1.2d
1631 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1632 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1634 %tmp3 = icmp sge <2 x i64> %A, zeroinitializer;
1635 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1640 define <8 x i8> @cmgez8xi8_alt(<8 x i8> %A) {
1641 ; CHECK-LABEL: cmgez8xi8_alt:
1643 ; CHECK-NEXT: cmge v0.8b, v0.8b, #0
1646 ; GISEL-LABEL: cmgez8xi8_alt:
1648 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1649 ; GISEL-NEXT: mvn v0.8b, v0.8b
1651 %sign = ashr <8 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
1652 %not = xor <8 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
1656 define <16 x i8> @cmgez16xi8_alt(<16 x i8> %A) {
1657 ; CHECK-LABEL: cmgez16xi8_alt:
1659 ; CHECK-NEXT: cmge v0.16b, v0.16b, #0
1662 ; GISEL-LABEL: cmgez16xi8_alt:
1664 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1665 ; GISEL-NEXT: mvn v0.16b, v0.16b
1667 %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>
1668 %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>
1672 define <4 x i16> @cmgez4xi16_alt(<4 x i16> %A) {
1673 ; CHECK-LABEL: cmgez4xi16_alt:
1675 ; CHECK-NEXT: cmge v0.4h, v0.4h, #0
1678 ; GISEL-LABEL: cmgez4xi16_alt:
1680 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1681 ; GISEL-NEXT: mvn v0.8b, v0.8b
1683 %sign = ashr <4 x i16> %A, <i16 15, i16 15, i16 15, i16 15>
1684 %not = xor <4 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1>
1688 define <8 x i16> @cmgez8xi16_alt(<8 x i16> %A) {
1689 ; CHECK-LABEL: cmgez8xi16_alt:
1691 ; CHECK-NEXT: cmge v0.8h, v0.8h, #0
1694 ; GISEL-LABEL: cmgez8xi16_alt:
1696 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1697 ; GISEL-NEXT: mvn v0.16b, v0.16b
1699 %sign = ashr <8 x i16> %A, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
1700 %not = xor <8 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1704 define <2 x i32> @cmgez2xi32_alt(<2 x i32> %A) {
1705 ; CHECK-LABEL: cmgez2xi32_alt:
1707 ; CHECK-NEXT: cmge v0.2s, v0.2s, #0
1710 ; GISEL-LABEL: cmgez2xi32_alt:
1712 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1713 ; GISEL-NEXT: mvn v0.8b, v0.8b
1715 %sign = ashr <2 x i32> %A, <i32 31, i32 31>
1716 %not = xor <2 x i32> %sign, <i32 -1, i32 -1>
1720 define <4 x i32> @cmgez4xi32_alt(<4 x i32> %A) {
1721 ; CHECK-LABEL: cmgez4xi32_alt:
1723 ; CHECK-NEXT: cmge v0.4s, v0.4s, #0
1726 ; GISEL-LABEL: cmgez4xi32_alt:
1728 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1729 ; GISEL-NEXT: mvn v0.16b, v0.16b
1731 %sign = ashr <4 x i32> %A, <i32 31, i32 31, i32 31, i32 31>
1732 %not = xor <4 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1>
1736 define <2 x i64> @cmgez2xi64_alt(<2 x i64> %A) {
1737 ; CHECK-LABEL: cmgez2xi64_alt:
1739 ; CHECK-NEXT: cmge v0.2d, v0.2d, #0
1742 ; GISEL-LABEL: cmgez2xi64_alt:
1744 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1745 ; GISEL-NEXT: mvn v0.16b, v0.16b
1747 %sign = ashr <2 x i64> %A, <i64 63, i64 63>
1748 %not = xor <2 x i64> %sign, <i64 -1, i64 -1>
1753 define <8 x i8> @cmgtz8xi8(<8 x i8> %A) {
1754 ; CHECK-LABEL: cmgtz8xi8:
1756 ; CHECK-NEXT: cmgt v0.8b, v0.8b, #0
1759 ; GISEL-LABEL: cmgtz8xi8:
1761 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1762 ; GISEL-NEXT: cmgt v0.8b, v0.8b, v1.8b
1763 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1764 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1766 %tmp3 = icmp sgt <8 x i8> %A, zeroinitializer;
1767 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1771 define <16 x i8> @cmgtz16xi8(<16 x i8> %A) {
1772 ; CHECK-LABEL: cmgtz16xi8:
1774 ; CHECK-NEXT: cmgt v0.16b, v0.16b, #0
1777 ; GISEL-LABEL: cmgtz16xi8:
1779 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1780 ; GISEL-NEXT: cmgt v0.16b, v0.16b, v1.16b
1781 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1782 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1784 %tmp3 = icmp sgt <16 x i8> %A, zeroinitializer;
1785 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1789 define <4 x i16> @cmgtz4xi16(<4 x i16> %A) {
1790 ; CHECK-LABEL: cmgtz4xi16:
1792 ; CHECK-NEXT: cmgt v0.4h, v0.4h, #0
1795 ; GISEL-LABEL: cmgtz4xi16:
1797 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1798 ; GISEL-NEXT: cmgt v0.4h, v0.4h, v1.4h
1799 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1800 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1802 %tmp3 = icmp sgt <4 x i16> %A, zeroinitializer;
1803 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1807 define <8 x i16> @cmgtz8xi16(<8 x i16> %A) {
1808 ; CHECK-LABEL: cmgtz8xi16:
1810 ; CHECK-NEXT: cmgt v0.8h, v0.8h, #0
1813 ; GISEL-LABEL: cmgtz8xi16:
1815 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1816 ; GISEL-NEXT: cmgt v0.8h, v0.8h, v1.8h
1817 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1818 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1820 %tmp3 = icmp sgt <8 x i16> %A, zeroinitializer;
1821 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1825 define <2 x i32> @cmgtz2xi32(<2 x i32> %A) {
1826 ; CHECK-LABEL: cmgtz2xi32:
1828 ; CHECK-NEXT: cmgt v0.2s, v0.2s, #0
1831 ; GISEL-LABEL: cmgtz2xi32:
1833 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1834 ; GISEL-NEXT: cmgt v0.2s, v0.2s, v1.2s
1835 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1836 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1838 %tmp3 = icmp sgt <2 x i32> %A, zeroinitializer;
1839 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1843 define <4 x i32> @cmgtz4xi32(<4 x i32> %A) {
1844 ; CHECK-LABEL: cmgtz4xi32:
1846 ; CHECK-NEXT: cmgt v0.4s, v0.4s, #0
1849 ; GISEL-LABEL: cmgtz4xi32:
1851 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1852 ; GISEL-NEXT: cmgt v0.4s, v0.4s, v1.4s
1853 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1854 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1856 %tmp3 = icmp sgt <4 x i32> %A, zeroinitializer;
1857 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1861 define <2 x i64> @cmgtz2xi64(<2 x i64> %A) {
1862 ; CHECK-LABEL: cmgtz2xi64:
1864 ; CHECK-NEXT: cmgt v0.2d, v0.2d, #0
1867 ; GISEL-LABEL: cmgtz2xi64:
1869 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1870 ; GISEL-NEXT: cmgt v0.2d, v0.2d, v1.2d
1871 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1872 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
1874 %tmp3 = icmp sgt <2 x i64> %A, zeroinitializer;
1875 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1879 define <8 x i8> @cmlez8xi8(<8 x i8> %A) {
1880 ; CHECK-LABEL: cmlez8xi8:
1882 ; CHECK-NEXT: cmle v0.8b, v0.8b, #0
1885 ; GISEL-LABEL: cmlez8xi8:
1887 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1888 ; GISEL-NEXT: cmge v0.8b, v1.8b, v0.8b
1889 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
1890 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
1892 %tmp3 = icmp sle <8 x i8> %A, zeroinitializer;
1893 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1897 define <16 x i8> @cmlez16xi8(<16 x i8> %A) {
1898 ; CHECK-LABEL: cmlez16xi8:
1900 ; CHECK-NEXT: cmle v0.16b, v0.16b, #0
1903 ; GISEL-LABEL: cmlez16xi8:
1905 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1906 ; GISEL-NEXT: cmge v0.16b, v1.16b, v0.16b
1907 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
1908 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
1910 %tmp3 = icmp sle <16 x i8> %A, zeroinitializer;
1911 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1915 define <4 x i16> @cmlez4xi16(<4 x i16> %A) {
1916 ; CHECK-LABEL: cmlez4xi16:
1918 ; CHECK-NEXT: cmle v0.4h, v0.4h, #0
1921 ; GISEL-LABEL: cmlez4xi16:
1923 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1924 ; GISEL-NEXT: cmge v0.4h, v1.4h, v0.4h
1925 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
1926 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
1928 %tmp3 = icmp sle <4 x i16> %A, zeroinitializer;
1929 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1933 define <8 x i16> @cmlez8xi16(<8 x i16> %A) {
1934 ; CHECK-LABEL: cmlez8xi16:
1936 ; CHECK-NEXT: cmle v0.8h, v0.8h, #0
1939 ; GISEL-LABEL: cmlez8xi16:
1941 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1942 ; GISEL-NEXT: cmge v0.8h, v1.8h, v0.8h
1943 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
1944 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
1946 %tmp3 = icmp sle <8 x i16> %A, zeroinitializer;
1947 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1951 define <2 x i32> @cmlez2xi32(<2 x i32> %A) {
1952 ; CHECK-LABEL: cmlez2xi32:
1954 ; CHECK-NEXT: cmle v0.2s, v0.2s, #0
1957 ; GISEL-LABEL: cmlez2xi32:
1959 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1960 ; GISEL-NEXT: cmge v0.2s, v1.2s, v0.2s
1961 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
1962 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
1964 %tmp3 = icmp sle <2 x i32> %A, zeroinitializer;
1965 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1969 define <4 x i32> @cmlez4xi32(<4 x i32> %A) {
1970 ; CHECK-LABEL: cmlez4xi32:
1972 ; CHECK-NEXT: cmle v0.4s, v0.4s, #0
1975 ; GISEL-LABEL: cmlez4xi32:
1977 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1978 ; GISEL-NEXT: cmge v0.4s, v1.4s, v0.4s
1979 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
1980 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
1982 %tmp3 = icmp sle <4 x i32> %A, zeroinitializer;
1983 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1987 define <2 x i64> @cmlez2xi64(<2 x i64> %A) {
1988 ; CHECK-LABEL: cmlez2xi64:
1990 ; CHECK-NEXT: cmle v0.2d, v0.2d, #0
1993 ; GISEL-LABEL: cmlez2xi64:
1995 ; GISEL-NEXT: movi v1.2d, #0000000000000000
1996 ; GISEL-NEXT: cmge v0.2d, v1.2d, v0.2d
1997 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
1998 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2000 %tmp3 = icmp sle <2 x i64> %A, zeroinitializer;
2001 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2005 define <8 x i8> @cmltz8xi8(<8 x i8> %A) {
2006 ; CHECK-LABEL: cmltz8xi8:
2008 ; CHECK-NEXT: cmlt v0.8b, v0.8b, #0
2011 ; GISEL-LABEL: cmltz8xi8:
2013 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2014 ; GISEL-NEXT: cmgt v0.8b, v1.8b, v0.8b
2015 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2016 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2018 %tmp3 = icmp slt <8 x i8> %A, zeroinitializer;
2019 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2023 define <16 x i8> @cmltz16xi8(<16 x i8> %A) {
2024 ; CHECK-LABEL: cmltz16xi8:
2026 ; CHECK-NEXT: cmlt v0.16b, v0.16b, #0
2029 ; GISEL-LABEL: cmltz16xi8:
2031 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2032 ; GISEL-NEXT: cmgt v0.16b, v1.16b, v0.16b
2033 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2034 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2036 %tmp3 = icmp slt <16 x i8> %A, zeroinitializer;
2037 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2041 define <4 x i16> @cmltz4xi16(<4 x i16> %A) {
2042 ; CHECK-LABEL: cmltz4xi16:
2044 ; CHECK-NEXT: cmlt v0.4h, v0.4h, #0
2047 ; GISEL-LABEL: cmltz4xi16:
2049 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2050 ; GISEL-NEXT: cmgt v0.4h, v1.4h, v0.4h
2051 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2052 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2054 %tmp3 = icmp slt <4 x i16> %A, zeroinitializer;
2055 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2059 define <8 x i16> @cmltz8xi16(<8 x i16> %A) {
2060 ; CHECK-LABEL: cmltz8xi16:
2062 ; CHECK-NEXT: cmlt v0.8h, v0.8h, #0
2065 ; GISEL-LABEL: cmltz8xi16:
2067 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2068 ; GISEL-NEXT: cmgt v0.8h, v1.8h, v0.8h
2069 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2070 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2072 %tmp3 = icmp slt <8 x i16> %A, zeroinitializer;
2073 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2077 define <2 x i32> @cmltz2xi32(<2 x i32> %A) {
2078 ; CHECK-LABEL: cmltz2xi32:
2080 ; CHECK-NEXT: cmlt v0.2s, v0.2s, #0
2083 ; GISEL-LABEL: cmltz2xi32:
2085 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2086 ; GISEL-NEXT: cmgt v0.2s, v1.2s, v0.2s
2087 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2088 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2090 %tmp3 = icmp slt <2 x i32> %A, zeroinitializer;
2091 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2095 define <4 x i32> @cmltz4xi32(<4 x i32> %A) {
2096 ; CHECK-LABEL: cmltz4xi32:
2098 ; CHECK-NEXT: cmlt v0.4s, v0.4s, #0
2101 ; GISEL-LABEL: cmltz4xi32:
2103 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2104 ; GISEL-NEXT: cmgt v0.4s, v1.4s, v0.4s
2105 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2106 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2108 %tmp3 = icmp slt <4 x i32> %A, zeroinitializer;
2109 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2113 define <2 x i64> @cmltz2xi64(<2 x i64> %A) {
2114 ; CHECK-LABEL: cmltz2xi64:
2116 ; CHECK-NEXT: cmlt v0.2d, v0.2d, #0
2119 ; GISEL-LABEL: cmltz2xi64:
2121 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2122 ; GISEL-NEXT: cmgt v0.2d, v1.2d, v0.2d
2123 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2124 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2126 %tmp3 = icmp slt <2 x i64> %A, zeroinitializer;
2127 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2131 define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
2132 ; CHECK-LABEL: cmneqz8xi8:
2134 ; CHECK-NEXT: cmtst v0.8b, v0.8b, v0.8b
2137 ; GISEL-LABEL: cmneqz8xi8:
2139 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2140 ; GISEL-NEXT: cmeq v0.8b, v0.8b, v1.8b
2141 ; GISEL-NEXT: mvn v0.8b, v0.8b
2142 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2143 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2145 %tmp3 = icmp ne <8 x i8> %A, zeroinitializer;
2146 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2150 define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
2151 ; CHECK-LABEL: cmneqz16xi8:
2153 ; CHECK-NEXT: cmtst v0.16b, v0.16b, v0.16b
2156 ; GISEL-LABEL: cmneqz16xi8:
2158 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2159 ; GISEL-NEXT: cmeq v0.16b, v0.16b, v1.16b
2160 ; GISEL-NEXT: mvn v0.16b, v0.16b
2161 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2162 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2164 %tmp3 = icmp ne <16 x i8> %A, zeroinitializer;
2165 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2169 define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
2170 ; CHECK-LABEL: cmneqz4xi16:
2172 ; CHECK-NEXT: cmtst v0.4h, v0.4h, v0.4h
2175 ; GISEL-LABEL: cmneqz4xi16:
2177 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2178 ; GISEL-NEXT: cmeq v0.4h, v0.4h, v1.4h
2179 ; GISEL-NEXT: mvn v0.8b, v0.8b
2180 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2181 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2183 %tmp3 = icmp ne <4 x i16> %A, zeroinitializer;
2184 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2188 define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
2189 ; CHECK-LABEL: cmneqz8xi16:
2191 ; CHECK-NEXT: cmtst v0.8h, v0.8h, v0.8h
2194 ; GISEL-LABEL: cmneqz8xi16:
2196 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2197 ; GISEL-NEXT: cmeq v0.8h, v0.8h, v1.8h
2198 ; GISEL-NEXT: mvn v0.16b, v0.16b
2199 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2200 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2202 %tmp3 = icmp ne <8 x i16> %A, zeroinitializer;
2203 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2207 define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
2208 ; CHECK-LABEL: cmneqz2xi32:
2210 ; CHECK-NEXT: cmtst v0.2s, v0.2s, v0.2s
2213 ; GISEL-LABEL: cmneqz2xi32:
2215 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2216 ; GISEL-NEXT: cmeq v0.2s, v0.2s, v1.2s
2217 ; GISEL-NEXT: mvn v0.8b, v0.8b
2218 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2219 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2221 %tmp3 = icmp ne <2 x i32> %A, zeroinitializer;
2222 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2226 define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
2227 ; CHECK-LABEL: cmneqz4xi32:
2229 ; CHECK-NEXT: cmtst v0.4s, v0.4s, v0.4s
2232 ; GISEL-LABEL: cmneqz4xi32:
2234 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2235 ; GISEL-NEXT: cmeq v0.4s, v0.4s, v1.4s
2236 ; GISEL-NEXT: mvn v0.16b, v0.16b
2237 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2238 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2240 %tmp3 = icmp ne <4 x i32> %A, zeroinitializer;
2241 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2245 define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
2246 ; CHECK-LABEL: cmneqz2xi64:
2248 ; CHECK-NEXT: cmtst v0.2d, v0.2d, v0.2d
2251 ; GISEL-LABEL: cmneqz2xi64:
2253 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2254 ; GISEL-NEXT: cmeq v0.2d, v0.2d, v1.2d
2255 ; GISEL-NEXT: mvn v0.16b, v0.16b
2256 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2257 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2259 %tmp3 = icmp ne <2 x i64> %A, zeroinitializer;
2260 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2264 define <8 x i8> @cmhsz8xi8(<8 x i8> %A) {
2265 ; CHECK-LABEL: cmhsz8xi8:
2267 ; CHECK-NEXT: movi v1.8b, #2
2268 ; CHECK-NEXT: cmhs v0.8b, v0.8b, v1.8b
2271 ; GISEL-LABEL: cmhsz8xi8:
2273 ; GISEL-NEXT: adrp x8, .LCPI126_0
2274 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI126_0]
2275 ; GISEL-NEXT: cmhs v0.8b, v0.8b, v1.8b
2276 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2277 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2279 %tmp3 = icmp uge <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
2280 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2284 define <16 x i8> @cmhsz16xi8(<16 x i8> %A) {
2285 ; CHECK-LABEL: cmhsz16xi8:
2287 ; CHECK-NEXT: movi v1.16b, #2
2288 ; CHECK-NEXT: cmhs v0.16b, v0.16b, v1.16b
2291 ; GISEL-LABEL: cmhsz16xi8:
2293 ; GISEL-NEXT: adrp x8, .LCPI127_0
2294 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI127_0]
2295 ; GISEL-NEXT: cmhs v0.16b, v0.16b, v1.16b
2296 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2297 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2299 %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>
2300 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2304 define <4 x i16> @cmhsz4xi16(<4 x i16> %A) {
2305 ; CHECK-LABEL: cmhsz4xi16:
2307 ; CHECK-NEXT: movi v1.4h, #2
2308 ; CHECK-NEXT: cmhs v0.4h, v0.4h, v1.4h
2311 ; GISEL-LABEL: cmhsz4xi16:
2313 ; GISEL-NEXT: adrp x8, .LCPI128_0
2314 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI128_0]
2315 ; GISEL-NEXT: cmhs v0.4h, v0.4h, v1.4h
2316 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2317 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2319 %tmp3 = icmp uge <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
2320 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2324 define <8 x i16> @cmhsz8xi16(<8 x i16> %A) {
2325 ; CHECK-LABEL: cmhsz8xi16:
2327 ; CHECK-NEXT: movi v1.8h, #2
2328 ; CHECK-NEXT: cmhs v0.8h, v0.8h, v1.8h
2331 ; GISEL-LABEL: cmhsz8xi16:
2333 ; GISEL-NEXT: adrp x8, .LCPI129_0
2334 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI129_0]
2335 ; GISEL-NEXT: cmhs v0.8h, v0.8h, v1.8h
2336 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2337 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2339 %tmp3 = icmp uge <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
2340 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2344 define <2 x i32> @cmhsz2xi32(<2 x i32> %A) {
2345 ; CHECK-LABEL: cmhsz2xi32:
2347 ; CHECK-NEXT: movi v1.2s, #2
2348 ; CHECK-NEXT: cmhs v0.2s, v0.2s, v1.2s
2351 ; GISEL-LABEL: cmhsz2xi32:
2353 ; GISEL-NEXT: adrp x8, .LCPI130_0
2354 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI130_0]
2355 ; GISEL-NEXT: cmhs v0.2s, v0.2s, v1.2s
2356 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2357 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2359 %tmp3 = icmp uge <2 x i32> %A, <i32 2, i32 2>
2360 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2364 define <4 x i32> @cmhsz4xi32(<4 x i32> %A) {
2365 ; CHECK-LABEL: cmhsz4xi32:
2367 ; CHECK-NEXT: movi v1.4s, #2
2368 ; CHECK-NEXT: cmhs v0.4s, v0.4s, v1.4s
2371 ; GISEL-LABEL: cmhsz4xi32:
2373 ; GISEL-NEXT: adrp x8, .LCPI131_0
2374 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI131_0]
2375 ; GISEL-NEXT: cmhs v0.4s, v0.4s, v1.4s
2376 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2377 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2379 %tmp3 = icmp uge <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
2380 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2384 define <2 x i64> @cmhsz2xi64(<2 x i64> %A) {
2385 ; CHECK-LABEL: cmhsz2xi64:
2387 ; CHECK-NEXT: mov w8, #2
2388 ; CHECK-NEXT: dup v1.2d, x8
2389 ; CHECK-NEXT: cmhs v0.2d, v0.2d, v1.2d
2392 ; GISEL-LABEL: cmhsz2xi64:
2394 ; GISEL-NEXT: adrp x8, .LCPI132_0
2395 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI132_0]
2396 ; GISEL-NEXT: cmhs v0.2d, v0.2d, v1.2d
2397 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2398 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2400 %tmp3 = icmp uge <2 x i64> %A, <i64 2, i64 2>
2401 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2406 define <8 x i8> @cmhiz8xi8(<8 x i8> %A) {
2407 ; CHECK-LABEL: cmhiz8xi8:
2409 ; CHECK-NEXT: movi v1.8b, #1
2410 ; CHECK-NEXT: cmhi v0.8b, v0.8b, v1.8b
2413 ; GISEL-LABEL: cmhiz8xi8:
2415 ; GISEL-NEXT: adrp x8, .LCPI133_0
2416 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI133_0]
2417 ; GISEL-NEXT: cmhi v0.8b, v0.8b, v1.8b
2418 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2419 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2421 %tmp3 = icmp ugt <8 x i8> %A, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
2422 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2426 define <16 x i8> @cmhiz16xi8(<16 x i8> %A) {
2427 ; CHECK-LABEL: cmhiz16xi8:
2429 ; CHECK-NEXT: movi v1.16b, #1
2430 ; CHECK-NEXT: cmhi v0.16b, v0.16b, v1.16b
2433 ; GISEL-LABEL: cmhiz16xi8:
2435 ; GISEL-NEXT: adrp x8, .LCPI134_0
2436 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI134_0]
2437 ; GISEL-NEXT: cmhi v0.16b, v0.16b, v1.16b
2438 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2439 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2441 %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>
2442 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2446 define <4 x i16> @cmhiz4xi16(<4 x i16> %A) {
2447 ; CHECK-LABEL: cmhiz4xi16:
2449 ; CHECK-NEXT: movi v1.4h, #1
2450 ; CHECK-NEXT: cmhi v0.4h, v0.4h, v1.4h
2453 ; GISEL-LABEL: cmhiz4xi16:
2455 ; GISEL-NEXT: adrp x8, .LCPI135_0
2456 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI135_0]
2457 ; GISEL-NEXT: cmhi v0.4h, v0.4h, v1.4h
2458 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2459 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2461 %tmp3 = icmp ugt <4 x i16> %A, <i16 1, i16 1, i16 1, i16 1>
2462 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2466 define <8 x i16> @cmhiz8xi16(<8 x i16> %A) {
2467 ; CHECK-LABEL: cmhiz8xi16:
2469 ; CHECK-NEXT: movi v1.8h, #1
2470 ; CHECK-NEXT: cmhi v0.8h, v0.8h, v1.8h
2473 ; GISEL-LABEL: cmhiz8xi16:
2475 ; GISEL-NEXT: adrp x8, .LCPI136_0
2476 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI136_0]
2477 ; GISEL-NEXT: cmhi v0.8h, v0.8h, v1.8h
2478 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2479 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2481 %tmp3 = icmp ugt <8 x i16> %A, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
2482 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2486 define <2 x i32> @cmhiz2xi32(<2 x i32> %A) {
2487 ; CHECK-LABEL: cmhiz2xi32:
2489 ; CHECK-NEXT: movi v1.2s, #1
2490 ; CHECK-NEXT: cmhi v0.2s, v0.2s, v1.2s
2493 ; GISEL-LABEL: cmhiz2xi32:
2495 ; GISEL-NEXT: adrp x8, .LCPI137_0
2496 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI137_0]
2497 ; GISEL-NEXT: cmhi v0.2s, v0.2s, v1.2s
2498 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2499 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2501 %tmp3 = icmp ugt <2 x i32> %A, <i32 1, i32 1>
2502 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2506 define <4 x i32> @cmhiz4xi32(<4 x i32> %A) {
2507 ; CHECK-LABEL: cmhiz4xi32:
2509 ; CHECK-NEXT: movi v1.4s, #1
2510 ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
2513 ; GISEL-LABEL: cmhiz4xi32:
2515 ; GISEL-NEXT: adrp x8, .LCPI138_0
2516 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI138_0]
2517 ; GISEL-NEXT: cmhi v0.4s, v0.4s, v1.4s
2518 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2519 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2521 %tmp3 = icmp ugt <4 x i32> %A, <i32 1, i32 1, i32 1, i32 1>
2522 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2526 define <2 x i64> @cmhiz2xi64(<2 x i64> %A) {
2527 ; CHECK-LABEL: cmhiz2xi64:
2529 ; CHECK-NEXT: mov w8, #1
2530 ; CHECK-NEXT: dup v1.2d, x8
2531 ; CHECK-NEXT: cmhi v0.2d, v0.2d, v1.2d
2534 ; GISEL-LABEL: cmhiz2xi64:
2536 ; GISEL-NEXT: adrp x8, .LCPI139_0
2537 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI139_0]
2538 ; GISEL-NEXT: cmhi v0.2d, v0.2d, v1.2d
2539 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2540 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2542 %tmp3 = icmp ugt <2 x i64> %A, <i64 1, i64 1>
2543 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2547 ; LS implemented as HS, so check reversed operands.
2548 define <8 x i8> @cmlsz8xi8(<8 x i8> %A) {
2549 ; CHECK-LABEL: cmlsz8xi8:
2551 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2552 ; CHECK-NEXT: cmhs v0.8b, v1.8b, v0.8b
2555 ; GISEL-LABEL: cmlsz8xi8:
2557 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2558 ; GISEL-NEXT: cmhs v0.8b, v1.8b, v0.8b
2559 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2560 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2562 %tmp3 = icmp ule <8 x i8> %A, zeroinitializer;
2563 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2567 ; LS implemented as HS, so check reversed operands.
2568 define <16 x i8> @cmlsz16xi8(<16 x i8> %A) {
2569 ; CHECK-LABEL: cmlsz16xi8:
2571 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2572 ; CHECK-NEXT: cmhs v0.16b, v1.16b, v0.16b
2575 ; GISEL-LABEL: cmlsz16xi8:
2577 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2578 ; GISEL-NEXT: cmhs v0.16b, v1.16b, v0.16b
2579 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2580 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2582 %tmp3 = icmp ule <16 x i8> %A, zeroinitializer;
2583 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2587 ; LS implemented as HS, so check reversed operands.
2588 define <4 x i16> @cmlsz4xi16(<4 x i16> %A) {
2589 ; CHECK-LABEL: cmlsz4xi16:
2591 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2592 ; CHECK-NEXT: cmhs v0.4h, v1.4h, v0.4h
2595 ; GISEL-LABEL: cmlsz4xi16:
2597 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2598 ; GISEL-NEXT: cmhs v0.4h, v1.4h, v0.4h
2599 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2600 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2602 %tmp3 = icmp ule <4 x i16> %A, zeroinitializer;
2603 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2607 ; LS implemented as HS, so check reversed operands.
2608 define <8 x i16> @cmlsz8xi16(<8 x i16> %A) {
2609 ; CHECK-LABEL: cmlsz8xi16:
2611 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2612 ; CHECK-NEXT: cmhs v0.8h, v1.8h, v0.8h
2615 ; GISEL-LABEL: cmlsz8xi16:
2617 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2618 ; GISEL-NEXT: cmhs v0.8h, v1.8h, v0.8h
2619 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2620 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2622 %tmp3 = icmp ule <8 x i16> %A, zeroinitializer;
2623 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2627 ; LS implemented as HS, so check reversed operands.
2628 define <2 x i32> @cmlsz2xi32(<2 x i32> %A) {
2629 ; CHECK-LABEL: cmlsz2xi32:
2631 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2632 ; CHECK-NEXT: cmhs v0.2s, v1.2s, v0.2s
2635 ; GISEL-LABEL: cmlsz2xi32:
2637 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2638 ; GISEL-NEXT: cmhs v0.2s, v1.2s, v0.2s
2639 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2640 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2642 %tmp3 = icmp ule <2 x i32> %A, zeroinitializer;
2643 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2647 ; LS implemented as HS, so check reversed operands.
2648 define <4 x i32> @cmlsz4xi32(<4 x i32> %A) {
2649 ; CHECK-LABEL: cmlsz4xi32:
2651 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2652 ; CHECK-NEXT: cmhs v0.4s, v1.4s, v0.4s
2655 ; GISEL-LABEL: cmlsz4xi32:
2657 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2658 ; GISEL-NEXT: cmhs v0.4s, v1.4s, v0.4s
2659 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2660 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2662 %tmp3 = icmp ule <4 x i32> %A, zeroinitializer;
2663 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2667 ; LS implemented as HS, so check reversed operands.
2668 define <2 x i64> @cmlsz2xi64(<2 x i64> %A) {
2669 ; CHECK-LABEL: cmlsz2xi64:
2671 ; CHECK-NEXT: movi v1.2d, #0000000000000000
2672 ; CHECK-NEXT: cmhs v0.2d, v1.2d, v0.2d
2675 ; GISEL-LABEL: cmlsz2xi64:
2677 ; GISEL-NEXT: movi v1.2d, #0000000000000000
2678 ; GISEL-NEXT: cmhs v0.2d, v1.2d, v0.2d
2679 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2680 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2682 %tmp3 = icmp ule <2 x i64> %A, zeroinitializer;
2683 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2687 ; LO implemented as HI, so check reversed operands.
2688 define <8 x i8> @cmloz8xi8(<8 x i8> %A) {
2689 ; CHECK-LABEL: cmloz8xi8:
2691 ; CHECK-NEXT: movi v1.8b, #2
2692 ; CHECK-NEXT: cmhi v0.8b, v1.8b, v0.8b
2695 ; GISEL-LABEL: cmloz8xi8:
2697 ; GISEL-NEXT: adrp x8, .LCPI147_0
2698 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI147_0]
2699 ; GISEL-NEXT: cmhi v0.8b, v1.8b, v0.8b
2700 ; GISEL-NEXT: shl v0.8b, v0.8b, #7
2701 ; GISEL-NEXT: sshr v0.8b, v0.8b, #7
2703 %tmp3 = icmp ult <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
2704 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
2708 ; LO implemented as HI, so check reversed operands.
2709 define <16 x i8> @cmloz16xi8(<16 x i8> %A) {
2710 ; CHECK-LABEL: cmloz16xi8:
2712 ; CHECK-NEXT: movi v1.16b, #2
2713 ; CHECK-NEXT: cmhi v0.16b, v1.16b, v0.16b
2716 ; GISEL-LABEL: cmloz16xi8:
2718 ; GISEL-NEXT: adrp x8, .LCPI148_0
2719 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI148_0]
2720 ; GISEL-NEXT: cmhi v0.16b, v1.16b, v0.16b
2721 ; GISEL-NEXT: shl v0.16b, v0.16b, #7
2722 ; GISEL-NEXT: sshr v0.16b, v0.16b, #7
2724 %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>
2725 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
2729 ; LO implemented as HI, so check reversed operands.
2730 define <4 x i16> @cmloz4xi16(<4 x i16> %A) {
2731 ; CHECK-LABEL: cmloz4xi16:
2733 ; CHECK-NEXT: movi v1.4h, #2
2734 ; CHECK-NEXT: cmhi v0.4h, v1.4h, v0.4h
2737 ; GISEL-LABEL: cmloz4xi16:
2739 ; GISEL-NEXT: adrp x8, .LCPI149_0
2740 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI149_0]
2741 ; GISEL-NEXT: cmhi v0.4h, v1.4h, v0.4h
2742 ; GISEL-NEXT: shl v0.4h, v0.4h, #15
2743 ; GISEL-NEXT: sshr v0.4h, v0.4h, #15
2745 %tmp3 = icmp ult <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
2746 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
2750 ; LO implemented as HI, so check reversed operands.
2751 define <8 x i16> @cmloz8xi16(<8 x i16> %A) {
2752 ; CHECK-LABEL: cmloz8xi16:
2754 ; CHECK-NEXT: movi v1.8h, #2
2755 ; CHECK-NEXT: cmhi v0.8h, v1.8h, v0.8h
2758 ; GISEL-LABEL: cmloz8xi16:
2760 ; GISEL-NEXT: adrp x8, .LCPI150_0
2761 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI150_0]
2762 ; GISEL-NEXT: cmhi v0.8h, v1.8h, v0.8h
2763 ; GISEL-NEXT: shl v0.8h, v0.8h, #15
2764 ; GISEL-NEXT: sshr v0.8h, v0.8h, #15
2766 %tmp3 = icmp ult <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
2767 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
2771 ; LO implemented as HI, so check reversed operands.
2772 define <2 x i32> @cmloz2xi32(<2 x i32> %A) {
2773 ; CHECK-LABEL: cmloz2xi32:
2775 ; CHECK-NEXT: movi v1.2s, #2
2776 ; CHECK-NEXT: cmhi v0.2s, v1.2s, v0.2s
2779 ; GISEL-LABEL: cmloz2xi32:
2781 ; GISEL-NEXT: adrp x8, .LCPI151_0
2782 ; GISEL-NEXT: ldr d1, [x8, :lo12:.LCPI151_0]
2783 ; GISEL-NEXT: cmhi v0.2s, v1.2s, v0.2s
2784 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2785 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2787 %tmp3 = icmp ult <2 x i32> %A, <i32 2, i32 2>
2788 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2792 ; LO implemented as HI, so check reversed operands.
2793 define <4 x i32> @cmloz4xi32(<4 x i32> %A) {
2794 ; CHECK-LABEL: cmloz4xi32:
2796 ; CHECK-NEXT: movi v1.4s, #2
2797 ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
2800 ; GISEL-LABEL: cmloz4xi32:
2802 ; GISEL-NEXT: adrp x8, .LCPI152_0
2803 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI152_0]
2804 ; GISEL-NEXT: cmhi v0.4s, v1.4s, v0.4s
2805 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2806 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2808 %tmp3 = icmp ult <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
2809 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2813 ; LO implemented as HI, so check reversed operands.
2814 define <2 x i64> @cmloz2xi64(<2 x i64> %A) {
2815 ; CHECK-LABEL: cmloz2xi64:
2817 ; CHECK-NEXT: mov w8, #2
2818 ; CHECK-NEXT: dup v1.2d, x8
2819 ; CHECK-NEXT: cmhi v0.2d, v1.2d, v0.2d
2822 ; GISEL-LABEL: cmloz2xi64:
2824 ; GISEL-NEXT: adrp x8, .LCPI153_0
2825 ; GISEL-NEXT: ldr q1, [x8, :lo12:.LCPI153_0]
2826 ; GISEL-NEXT: cmhi v0.2d, v1.2d, v0.2d
2827 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2828 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2830 %tmp3 = icmp ult <2 x i64> %A, <i64 2, i64 2>
2831 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2835 define <2 x i32> @fcmoeq2xfloat(<2 x float> %A, <2 x float> %B) {
2836 ; CHECK-LABEL: fcmoeq2xfloat:
2838 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
2841 ; GISEL-LABEL: fcmoeq2xfloat:
2843 ; GISEL-NEXT: fcmeq v0.2s, v0.2s, v1.2s
2844 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2845 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2847 %tmp3 = fcmp oeq <2 x float> %A, %B
2848 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2852 define <4 x i32> @fcmoeq4xfloat(<4 x float> %A, <4 x float> %B) {
2853 ; CHECK-LABEL: fcmoeq4xfloat:
2855 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
2858 ; GISEL-LABEL: fcmoeq4xfloat:
2860 ; GISEL-NEXT: fcmeq v0.4s, v0.4s, v1.4s
2861 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2862 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2864 %tmp3 = fcmp oeq <4 x float> %A, %B
2865 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2868 define <2 x i64> @fcmoeq2xdouble(<2 x double> %A, <2 x double> %B) {
2869 ; CHECK-LABEL: fcmoeq2xdouble:
2871 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
2874 ; GISEL-LABEL: fcmoeq2xdouble:
2876 ; GISEL-NEXT: fcmeq v0.2d, v0.2d, v1.2d
2877 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2878 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2880 %tmp3 = fcmp oeq <2 x double> %A, %B
2881 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2885 define <2 x i32> @fcmoge2xfloat(<2 x float> %A, <2 x float> %B) {
2886 ; CHECK-LABEL: fcmoge2xfloat:
2888 ; CHECK-NEXT: fcmge v0.2s, v0.2s, v1.2s
2891 ; GISEL-LABEL: fcmoge2xfloat:
2893 ; GISEL-NEXT: fcmge v0.2s, v0.2s, v1.2s
2894 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2895 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2897 %tmp3 = fcmp oge <2 x float> %A, %B
2898 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2902 define <4 x i32> @fcmoge4xfloat(<4 x float> %A, <4 x float> %B) {
2903 ; CHECK-LABEL: fcmoge4xfloat:
2905 ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
2908 ; GISEL-LABEL: fcmoge4xfloat:
2910 ; GISEL-NEXT: fcmge v0.4s, v0.4s, v1.4s
2911 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2912 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2914 %tmp3 = fcmp oge <4 x float> %A, %B
2915 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2918 define <2 x i64> @fcmoge2xdouble(<2 x double> %A, <2 x double> %B) {
2919 ; CHECK-LABEL: fcmoge2xdouble:
2921 ; CHECK-NEXT: fcmge v0.2d, v0.2d, v1.2d
2924 ; GISEL-LABEL: fcmoge2xdouble:
2926 ; GISEL-NEXT: fcmge v0.2d, v0.2d, v1.2d
2927 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2928 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2930 %tmp3 = fcmp oge <2 x double> %A, %B
2931 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2935 define <2 x i32> @fcmogt2xfloat(<2 x float> %A, <2 x float> %B) {
2936 ; CHECK-LABEL: fcmogt2xfloat:
2938 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, v1.2s
2941 ; GISEL-LABEL: fcmogt2xfloat:
2943 ; GISEL-NEXT: fcmgt v0.2s, v0.2s, v1.2s
2944 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2945 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2947 %tmp3 = fcmp ogt <2 x float> %A, %B
2948 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2952 define <4 x i32> @fcmogt4xfloat(<4 x float> %A, <4 x float> %B) {
2953 ; CHECK-LABEL: fcmogt4xfloat:
2955 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, v1.4s
2958 ; GISEL-LABEL: fcmogt4xfloat:
2960 ; GISEL-NEXT: fcmgt v0.4s, v0.4s, v1.4s
2961 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
2962 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
2964 %tmp3 = fcmp ogt <4 x float> %A, %B
2965 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2968 define <2 x i64> @fcmogt2xdouble(<2 x double> %A, <2 x double> %B) {
2969 ; CHECK-LABEL: fcmogt2xdouble:
2971 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, v1.2d
2974 ; GISEL-LABEL: fcmogt2xdouble:
2976 ; GISEL-NEXT: fcmgt v0.2d, v0.2d, v1.2d
2977 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
2978 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
2980 %tmp3 = fcmp ogt <2 x double> %A, %B
2981 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2985 ; OLE implemented as OGE, so check reversed operands.
2986 define <2 x i32> @fcmole2xfloat(<2 x float> %A, <2 x float> %B) {
2987 ; CHECK-LABEL: fcmole2xfloat:
2989 ; CHECK-NEXT: fcmge v0.2s, v1.2s, v0.2s
2992 ; GISEL-LABEL: fcmole2xfloat:
2994 ; GISEL-NEXT: fcmge v0.2s, v1.2s, v0.2s
2995 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
2996 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
2998 %tmp3 = fcmp ole <2 x float> %A, %B
2999 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3003 ; OLE implemented as OGE, so check reversed operands.
3004 define <4 x i32> @fcmole4xfloat(<4 x float> %A, <4 x float> %B) {
3005 ; CHECK-LABEL: fcmole4xfloat:
3007 ; CHECK-NEXT: fcmge v0.4s, v1.4s, v0.4s
3010 ; GISEL-LABEL: fcmole4xfloat:
3012 ; GISEL-NEXT: fcmge v0.4s, v1.4s, v0.4s
3013 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3014 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3016 %tmp3 = fcmp ole <4 x float> %A, %B
3017 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3021 ; OLE implemented as OGE, so check reversed operands.
3022 define <2 x i64> @fcmole2xdouble(<2 x double> %A, <2 x double> %B) {
3023 ; CHECK-LABEL: fcmole2xdouble:
3025 ; CHECK-NEXT: fcmge v0.2d, v1.2d, v0.2d
3028 ; GISEL-LABEL: fcmole2xdouble:
3030 ; GISEL-NEXT: fcmge v0.2d, v1.2d, v0.2d
3031 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3032 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3034 %tmp3 = fcmp ole <2 x double> %A, %B
3035 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3039 ; OLE implemented as OGE, so check reversed operands.
3040 define <2 x i32> @fcmolt2xfloat(<2 x float> %A, <2 x float> %B) {
3041 ; CHECK-LABEL: fcmolt2xfloat:
3043 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3046 ; GISEL-LABEL: fcmolt2xfloat:
3048 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3049 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3050 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3052 %tmp3 = fcmp olt <2 x float> %A, %B
3053 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3057 ; OLE implemented as OGE, so check reversed operands.
3058 define <4 x i32> @fcmolt4xfloat(<4 x float> %A, <4 x float> %B) {
3059 ; CHECK-LABEL: fcmolt4xfloat:
3061 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3064 ; GISEL-LABEL: fcmolt4xfloat:
3066 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3067 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3068 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3070 %tmp3 = fcmp olt <4 x float> %A, %B
3071 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3075 ; OLE implemented as OGE, so check reversed operands.
3076 define <2 x i64> @fcmolt2xdouble(<2 x double> %A, <2 x double> %B) {
3077 ; CHECK-LABEL: fcmolt2xdouble:
3079 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3082 ; GISEL-LABEL: fcmolt2xdouble:
3084 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3085 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3086 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3088 %tmp3 = fcmp olt <2 x double> %A, %B
3089 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3093 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
3094 define <2 x i32> @fcmone2xfloat(<2 x float> %A, <2 x float> %B) {
3095 ; CHECK-LABEL: fcmone2xfloat:
3097 ; CHECK-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3098 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3099 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3102 ; GISEL-LABEL: fcmone2xfloat:
3104 ; GISEL-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3105 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3106 ; GISEL-NEXT: orr v0.8b, v0.8b, v2.8b
3107 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3108 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3110 %tmp3 = fcmp one <2 x float> %A, %B
3111 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3115 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
3116 define <4 x i32> @fcmone4xfloat(<4 x float> %A, <4 x float> %B) {
3117 ; CHECK-LABEL: fcmone4xfloat:
3119 ; CHECK-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3120 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3121 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3124 ; GISEL-LABEL: fcmone4xfloat:
3126 ; GISEL-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3127 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3128 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3129 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3130 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3132 %tmp3 = fcmp one <4 x float> %A, %B
3133 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3137 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
3138 ; todo check reversed operands
3139 define <2 x i64> @fcmone2xdouble(<2 x double> %A, <2 x double> %B) {
3140 ; CHECK-LABEL: fcmone2xdouble:
3142 ; CHECK-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3143 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3144 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3147 ; GISEL-LABEL: fcmone2xdouble:
3149 ; GISEL-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3150 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3151 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3152 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3153 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3155 %tmp3 = fcmp one <2 x double> %A, %B
3156 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3160 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
3161 define <2 x i32> @fcmord2xfloat(<2 x float> %A, <2 x float> %B) {
3162 ; CHECK-LABEL: fcmord2xfloat:
3164 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
3165 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3166 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3169 ; GISEL-LABEL: fcmord2xfloat:
3171 ; GISEL-NEXT: fcmge v2.2s, v0.2s, v1.2s
3172 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3173 ; GISEL-NEXT: orr v0.8b, v0.8b, v2.8b
3174 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3175 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3177 %tmp3 = fcmp ord <2 x float> %A, %B
3178 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3182 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
3183 define <4 x i32> @fcmord4xfloat(<4 x float> %A, <4 x float> %B) {
3184 ; CHECK-LABEL: fcmord4xfloat:
3186 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
3187 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3188 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3191 ; GISEL-LABEL: fcmord4xfloat:
3193 ; GISEL-NEXT: fcmge v2.4s, v0.4s, v1.4s
3194 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3195 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3196 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3197 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3199 %tmp3 = fcmp ord <4 x float> %A, %B
3200 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3204 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
3205 define <2 x i64> @fcmord2xdouble(<2 x double> %A, <2 x double> %B) {
3206 ; CHECK-LABEL: fcmord2xdouble:
3208 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
3209 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3210 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3213 ; GISEL-LABEL: fcmord2xdouble:
3215 ; GISEL-NEXT: fcmge v2.2d, v0.2d, v1.2d
3216 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3217 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3218 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3219 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3221 %tmp3 = fcmp ord <2 x double> %A, %B
3222 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3227 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
3228 define <2 x i32> @fcmuno2xfloat(<2 x float> %A, <2 x float> %B) {
3229 ; CHECK-LABEL: fcmuno2xfloat:
3231 ; CHECK-NEXT: fcmge v2.2s, v0.2s, v1.2s
3232 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3233 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3234 ; CHECK-NEXT: mvn v0.8b, v0.8b
3237 ; GISEL-LABEL: fcmuno2xfloat:
3239 ; GISEL-NEXT: fcmge v2.2s, v0.2s, v1.2s
3240 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3241 ; GISEL-NEXT: orr v0.8b, v0.8b, v2.8b
3242 ; GISEL-NEXT: mvn v0.8b, v0.8b
3243 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3244 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3246 %tmp3 = fcmp uno <2 x float> %A, %B
3247 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3251 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
3252 define <4 x i32> @fcmuno4xfloat(<4 x float> %A, <4 x float> %B) {
3253 ; CHECK-LABEL: fcmuno4xfloat:
3255 ; CHECK-NEXT: fcmge v2.4s, v0.4s, v1.4s
3256 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3257 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3258 ; CHECK-NEXT: mvn v0.16b, v0.16b
3261 ; GISEL-LABEL: fcmuno4xfloat:
3263 ; GISEL-NEXT: fcmge v2.4s, v0.4s, v1.4s
3264 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3265 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3266 ; GISEL-NEXT: mvn v0.16b, v0.16b
3267 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3268 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3270 %tmp3 = fcmp uno <4 x float> %A, %B
3271 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3275 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
3276 define <2 x i64> @fcmuno2xdouble(<2 x double> %A, <2 x double> %B) {
3277 ; CHECK-LABEL: fcmuno2xdouble:
3279 ; CHECK-NEXT: fcmge v2.2d, v0.2d, v1.2d
3280 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3281 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3282 ; CHECK-NEXT: mvn v0.16b, v0.16b
3285 ; GISEL-LABEL: fcmuno2xdouble:
3287 ; GISEL-NEXT: fcmge v2.2d, v0.2d, v1.2d
3288 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3289 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3290 ; GISEL-NEXT: mvn v0.16b, v0.16b
3291 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3292 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3294 %tmp3 = fcmp uno <2 x double> %A, %B
3295 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3299 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
3300 define <2 x i32> @fcmueq2xfloat(<2 x float> %A, <2 x float> %B) {
3301 ; CHECK-LABEL: fcmueq2xfloat:
3303 ; CHECK-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3304 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3305 ; CHECK-NEXT: orr v0.8b, v0.8b, v2.8b
3306 ; CHECK-NEXT: mvn v0.8b, v0.8b
3309 ; GISEL-LABEL: fcmueq2xfloat:
3311 ; GISEL-NEXT: fcmgt v2.2s, v0.2s, v1.2s
3312 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3313 ; GISEL-NEXT: orr v0.8b, v0.8b, v2.8b
3314 ; GISEL-NEXT: mvn v0.8b, v0.8b
3315 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3316 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3318 %tmp3 = fcmp ueq <2 x float> %A, %B
3319 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3323 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
3324 define <4 x i32> @fcmueq4xfloat(<4 x float> %A, <4 x float> %B) {
3325 ; CHECK-LABEL: fcmueq4xfloat:
3327 ; CHECK-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3328 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3329 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3330 ; CHECK-NEXT: mvn v0.16b, v0.16b
3333 ; GISEL-LABEL: fcmueq4xfloat:
3335 ; GISEL-NEXT: fcmgt v2.4s, v0.4s, v1.4s
3336 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3337 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3338 ; GISEL-NEXT: mvn v0.16b, v0.16b
3339 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3340 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3342 %tmp3 = fcmp ueq <4 x float> %A, %B
3343 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3347 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
3348 define <2 x i64> @fcmueq2xdouble(<2 x double> %A, <2 x double> %B) {
3349 ; CHECK-LABEL: fcmueq2xdouble:
3351 ; CHECK-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3352 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3353 ; CHECK-NEXT: orr v0.16b, v0.16b, v2.16b
3354 ; CHECK-NEXT: mvn v0.16b, v0.16b
3357 ; GISEL-LABEL: fcmueq2xdouble:
3359 ; GISEL-NEXT: fcmgt v2.2d, v0.2d, v1.2d
3360 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3361 ; GISEL-NEXT: orr v0.16b, v0.16b, v2.16b
3362 ; GISEL-NEXT: mvn v0.16b, v0.16b
3363 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3364 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3366 %tmp3 = fcmp ueq <2 x double> %A, %B
3367 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3371 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
3372 define <2 x i32> @fcmuge2xfloat(<2 x float> %A, <2 x float> %B) {
3373 ; CHECK-LABEL: fcmuge2xfloat:
3375 ; CHECK-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3376 ; CHECK-NEXT: mvn v0.8b, v0.8b
3379 ; GISEL-LABEL: fcmuge2xfloat:
3381 ; GISEL-NEXT: fcmgt v0.2s, v1.2s, v0.2s
3382 ; GISEL-NEXT: mvn v0.8b, v0.8b
3383 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3384 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3386 %tmp3 = fcmp uge <2 x float> %A, %B
3387 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3391 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
3392 define <4 x i32> @fcmuge4xfloat(<4 x float> %A, <4 x float> %B) {
3393 ; CHECK-LABEL: fcmuge4xfloat:
3395 ; CHECK-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3396 ; CHECK-NEXT: mvn v0.16b, v0.16b
3399 ; GISEL-LABEL: fcmuge4xfloat:
3401 ; GISEL-NEXT: fcmgt v0.4s, v1.4s, v0.4s
3402 ; GISEL-NEXT: mvn v0.16b, v0.16b
3403 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3404 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3406 %tmp3 = fcmp uge <4 x float> %A, %B
3407 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3411 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
3412 define <2 x i64> @fcmuge2xdouble(<2 x double> %A, <2 x double> %B) {
3413 ; CHECK-LABEL: fcmuge2xdouble:
3415 ; CHECK-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3416 ; CHECK-NEXT: mvn v0.16b, v0.16b
3419 ; GISEL-LABEL: fcmuge2xdouble:
3421 ; GISEL-NEXT: fcmgt v0.2d, v1.2d, v0.2d
3422 ; GISEL-NEXT: mvn v0.16b, v0.16b
3423 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3424 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3426 %tmp3 = fcmp uge <2 x double> %A, %B
3427 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3431 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
3432 define <2 x i32> @fcmugt2xfloat(<2 x float> %A, <2 x float> %B) {
3433 ; CHECK-LABEL: fcmugt2xfloat:
3435 ; CHECK-NEXT: fcmge v0.2s, v1.2s, v0.2s
3436 ; CHECK-NEXT: mvn v0.8b, v0.8b
3439 ; GISEL-LABEL: fcmugt2xfloat:
3441 ; GISEL-NEXT: fcmge v0.2s, v1.2s, v0.2s
3442 ; GISEL-NEXT: mvn v0.8b, v0.8b
3443 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3444 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3446 %tmp3 = fcmp ugt <2 x float> %A, %B
3447 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3451 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
3452 define <4 x i32> @fcmugt4xfloat(<4 x float> %A, <4 x float> %B) {
3453 ; CHECK-LABEL: fcmugt4xfloat:
3455 ; CHECK-NEXT: fcmge v0.4s, v1.4s, v0.4s
3456 ; CHECK-NEXT: mvn v0.16b, v0.16b
3459 ; GISEL-LABEL: fcmugt4xfloat:
3461 ; GISEL-NEXT: fcmge v0.4s, v1.4s, v0.4s
3462 ; GISEL-NEXT: mvn v0.16b, v0.16b
3463 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3464 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3466 %tmp3 = fcmp ugt <4 x float> %A, %B
3467 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3471 define <2 x i64> @fcmugt2xdouble(<2 x double> %A, <2 x double> %B) {
3472 ; CHECK-LABEL: fcmugt2xdouble:
3474 ; CHECK-NEXT: fcmge v0.2d, v1.2d, v0.2d
3475 ; CHECK-NEXT: mvn v0.16b, v0.16b
3478 ; GISEL-LABEL: fcmugt2xdouble:
3480 ; GISEL-NEXT: fcmge v0.2d, v1.2d, v0.2d
3481 ; GISEL-NEXT: mvn v0.16b, v0.16b
3482 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3483 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3485 %tmp3 = fcmp ugt <2 x double> %A, %B
3486 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3490 ; ULE implemented as !OGT.
3491 define <2 x i32> @fcmule2xfloat(<2 x float> %A, <2 x float> %B) {
3492 ; CHECK-LABEL: fcmule2xfloat:
3494 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, v1.2s
3495 ; CHECK-NEXT: mvn v0.8b, v0.8b
3498 ; GISEL-LABEL: fcmule2xfloat:
3500 ; GISEL-NEXT: fcmgt v0.2s, v0.2s, v1.2s
3501 ; GISEL-NEXT: mvn v0.8b, v0.8b
3502 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3503 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3505 %tmp3 = fcmp ule <2 x float> %A, %B
3506 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3510 ; ULE implemented as !OGT.
3511 define <4 x i32> @fcmule4xfloat(<4 x float> %A, <4 x float> %B) {
3512 ; CHECK-LABEL: fcmule4xfloat:
3514 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, v1.4s
3515 ; CHECK-NEXT: mvn v0.16b, v0.16b
3518 ; GISEL-LABEL: fcmule4xfloat:
3520 ; GISEL-NEXT: fcmgt v0.4s, v0.4s, v1.4s
3521 ; GISEL-NEXT: mvn v0.16b, v0.16b
3522 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3523 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3525 %tmp3 = fcmp ule <4 x float> %A, %B
3526 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3530 ; ULE implemented as !OGT.
3531 define <2 x i64> @fcmule2xdouble(<2 x double> %A, <2 x double> %B) {
3532 ; CHECK-LABEL: fcmule2xdouble:
3534 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, v1.2d
3535 ; CHECK-NEXT: mvn v0.16b, v0.16b
3538 ; GISEL-LABEL: fcmule2xdouble:
3540 ; GISEL-NEXT: fcmgt v0.2d, v0.2d, v1.2d
3541 ; GISEL-NEXT: mvn v0.16b, v0.16b
3542 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3543 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3545 %tmp3 = fcmp ule <2 x double> %A, %B
3546 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3550 ; ULT implemented as !OGE.
3551 define <2 x i32> @fcmult2xfloat(<2 x float> %A, <2 x float> %B) {
3552 ; CHECK-LABEL: fcmult2xfloat:
3554 ; CHECK-NEXT: fcmge v0.2s, v0.2s, v1.2s
3555 ; CHECK-NEXT: mvn v0.8b, v0.8b
3558 ; GISEL-LABEL: fcmult2xfloat:
3560 ; GISEL-NEXT: fcmge v0.2s, v0.2s, v1.2s
3561 ; GISEL-NEXT: mvn v0.8b, v0.8b
3562 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3563 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3565 %tmp3 = fcmp ult <2 x float> %A, %B
3566 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3570 ; ULT implemented as !OGE.
3571 define <4 x i32> @fcmult4xfloat(<4 x float> %A, <4 x float> %B) {
3572 ; CHECK-LABEL: fcmult4xfloat:
3574 ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
3575 ; CHECK-NEXT: mvn v0.16b, v0.16b
3578 ; GISEL-LABEL: fcmult4xfloat:
3580 ; GISEL-NEXT: fcmge v0.4s, v0.4s, v1.4s
3581 ; GISEL-NEXT: mvn v0.16b, v0.16b
3582 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3583 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3585 %tmp3 = fcmp ult <4 x float> %A, %B
3586 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3590 ; ULT implemented as !OGE.
3591 define <2 x i64> @fcmult2xdouble(<2 x double> %A, <2 x double> %B) {
3592 ; CHECK-LABEL: fcmult2xdouble:
3594 ; CHECK-NEXT: fcmge v0.2d, v0.2d, v1.2d
3595 ; CHECK-NEXT: mvn v0.16b, v0.16b
3598 ; GISEL-LABEL: fcmult2xdouble:
3600 ; GISEL-NEXT: fcmge v0.2d, v0.2d, v1.2d
3601 ; GISEL-NEXT: mvn v0.16b, v0.16b
3602 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3603 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3605 %tmp3 = fcmp ult <2 x double> %A, %B
3606 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3611 define <2 x i32> @fcmune2xfloat(<2 x float> %A, <2 x float> %B) {
3612 ; CHECK-LABEL: fcmune2xfloat:
3614 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3615 ; CHECK-NEXT: mvn v0.8b, v0.8b
3618 ; GISEL-LABEL: fcmune2xfloat:
3620 ; GISEL-NEXT: fcmeq v0.2s, v0.2s, v1.2s
3621 ; GISEL-NEXT: mvn v0.8b, v0.8b
3622 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3623 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3625 %tmp3 = fcmp une <2 x float> %A, %B
3626 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3631 define <4 x i32> @fcmune4xfloat(<4 x float> %A, <4 x float> %B) {
3632 ; CHECK-LABEL: fcmune4xfloat:
3634 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3635 ; CHECK-NEXT: mvn v0.16b, v0.16b
3638 ; GISEL-LABEL: fcmune4xfloat:
3640 ; GISEL-NEXT: fcmeq v0.4s, v0.4s, v1.4s
3641 ; GISEL-NEXT: mvn v0.16b, v0.16b
3642 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3643 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3645 %tmp3 = fcmp une <4 x float> %A, %B
3646 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3651 define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
3652 ; CHECK-LABEL: fcmune2xdouble:
3654 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3655 ; CHECK-NEXT: mvn v0.16b, v0.16b
3658 ; GISEL-LABEL: fcmune2xdouble:
3660 ; GISEL-NEXT: fcmeq v0.2d, v0.2d, v1.2d
3661 ; GISEL-NEXT: mvn v0.16b, v0.16b
3662 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3663 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3665 %tmp3 = fcmp une <2 x double> %A, %B
3666 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3670 define <2 x i32> @fcmoeqz2xfloat(<2 x float> %A) {
3671 ; CHECK-LABEL: fcmoeqz2xfloat:
3673 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
3676 ; GISEL-LABEL: fcmoeqz2xfloat:
3678 ; GISEL-NEXT: fcmeq v0.2s, v0.2s, #0.0
3679 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3680 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3682 %tmp3 = fcmp oeq <2 x float> %A, zeroinitializer
3683 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3687 define <4 x i32> @fcmoeqz4xfloat(<4 x float> %A) {
3688 ; CHECK-LABEL: fcmoeqz4xfloat:
3690 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
3693 ; GISEL-LABEL: fcmoeqz4xfloat:
3695 ; GISEL-NEXT: fcmeq v0.4s, v0.4s, #0.0
3696 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3697 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3699 %tmp3 = fcmp oeq <4 x float> %A, zeroinitializer
3700 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3703 define <2 x i64> @fcmoeqz2xdouble(<2 x double> %A) {
3704 ; CHECK-LABEL: fcmoeqz2xdouble:
3706 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
3709 ; GISEL-LABEL: fcmoeqz2xdouble:
3711 ; GISEL-NEXT: fcmeq v0.2d, v0.2d, #0.0
3712 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3713 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3715 %tmp3 = fcmp oeq <2 x double> %A, zeroinitializer
3716 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3721 define <2 x i32> @fcmogez2xfloat(<2 x float> %A) {
3722 ; CHECK-LABEL: fcmogez2xfloat:
3724 ; CHECK-NEXT: fcmge v0.2s, v0.2s, #0.0
3727 ; GISEL-LABEL: fcmogez2xfloat:
3729 ; GISEL-NEXT: fcmge v0.2s, v0.2s, #0.0
3730 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3731 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3733 %tmp3 = fcmp oge <2 x float> %A, zeroinitializer
3734 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3738 define <4 x i32> @fcmogez4xfloat(<4 x float> %A) {
3739 ; CHECK-LABEL: fcmogez4xfloat:
3741 ; CHECK-NEXT: fcmge v0.4s, v0.4s, #0.0
3744 ; GISEL-LABEL: fcmogez4xfloat:
3746 ; GISEL-NEXT: fcmge v0.4s, v0.4s, #0.0
3747 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3748 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3750 %tmp3 = fcmp oge <4 x float> %A, zeroinitializer
3751 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3754 define <2 x i64> @fcmogez2xdouble(<2 x double> %A) {
3755 ; CHECK-LABEL: fcmogez2xdouble:
3757 ; CHECK-NEXT: fcmge v0.2d, v0.2d, #0.0
3760 ; GISEL-LABEL: fcmogez2xdouble:
3762 ; GISEL-NEXT: fcmge v0.2d, v0.2d, #0.0
3763 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3764 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3766 %tmp3 = fcmp oge <2 x double> %A, zeroinitializer
3767 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3771 define <2 x i32> @fcmogtz2xfloat(<2 x float> %A) {
3772 ; CHECK-LABEL: fcmogtz2xfloat:
3774 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, #0.0
3777 ; GISEL-LABEL: fcmogtz2xfloat:
3779 ; GISEL-NEXT: fcmgt v0.2s, v0.2s, #0.0
3780 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3781 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3783 %tmp3 = fcmp ogt <2 x float> %A, zeroinitializer
3784 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3788 define <4 x i32> @fcmogtz4xfloat(<4 x float> %A) {
3789 ; CHECK-LABEL: fcmogtz4xfloat:
3791 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, #0.0
3794 ; GISEL-LABEL: fcmogtz4xfloat:
3796 ; GISEL-NEXT: fcmgt v0.4s, v0.4s, #0.0
3797 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3798 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3800 %tmp3 = fcmp ogt <4 x float> %A, zeroinitializer
3801 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3804 define <2 x i64> @fcmogtz2xdouble(<2 x double> %A) {
3805 ; CHECK-LABEL: fcmogtz2xdouble:
3807 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, #0.0
3810 ; GISEL-LABEL: fcmogtz2xdouble:
3812 ; GISEL-NEXT: fcmgt v0.2d, v0.2d, #0.0
3813 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3814 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3816 %tmp3 = fcmp ogt <2 x double> %A, zeroinitializer
3817 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3821 define <2 x i32> @fcmoltz2xfloat(<2 x float> %A) {
3822 ; CHECK-LABEL: fcmoltz2xfloat:
3824 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
3827 ; GISEL-LABEL: fcmoltz2xfloat:
3829 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
3830 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3831 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3833 %tmp3 = fcmp olt <2 x float> %A, zeroinitializer
3834 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3838 define <4 x i32> @fcmoltz4xfloat(<4 x float> %A) {
3839 ; CHECK-LABEL: fcmoltz4xfloat:
3841 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
3844 ; GISEL-LABEL: fcmoltz4xfloat:
3846 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
3847 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3848 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3850 %tmp3 = fcmp olt <4 x float> %A, zeroinitializer
3851 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3855 define <2 x i64> @fcmoltz2xdouble(<2 x double> %A) {
3856 ; CHECK-LABEL: fcmoltz2xdouble:
3858 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
3861 ; GISEL-LABEL: fcmoltz2xdouble:
3863 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
3864 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3865 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3867 %tmp3 = fcmp olt <2 x double> %A, zeroinitializer
3868 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3872 define <2 x i32> @fcmolez2xfloat(<2 x float> %A) {
3873 ; CHECK-LABEL: fcmolez2xfloat:
3875 ; CHECK-NEXT: fcmle v0.2s, v0.2s, #0.0
3878 ; GISEL-LABEL: fcmolez2xfloat:
3880 ; GISEL-NEXT: fcmle v0.2s, v0.2s, #0.0
3881 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3882 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3884 %tmp3 = fcmp ole <2 x float> %A, zeroinitializer
3885 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3889 define <4 x i32> @fcmolez4xfloat(<4 x float> %A) {
3890 ; CHECK-LABEL: fcmolez4xfloat:
3892 ; CHECK-NEXT: fcmle v0.4s, v0.4s, #0.0
3895 ; GISEL-LABEL: fcmolez4xfloat:
3897 ; GISEL-NEXT: fcmle v0.4s, v0.4s, #0.0
3898 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3899 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3901 %tmp3 = fcmp ole <4 x float> %A, zeroinitializer
3902 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3906 define <2 x i64> @fcmolez2xdouble(<2 x double> %A) {
3907 ; CHECK-LABEL: fcmolez2xdouble:
3909 ; CHECK-NEXT: fcmle v0.2d, v0.2d, #0.0
3912 ; GISEL-LABEL: fcmolez2xdouble:
3914 ; GISEL-NEXT: fcmle v0.2d, v0.2d, #0.0
3915 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3916 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3918 %tmp3 = fcmp ole <2 x double> %A, zeroinitializer
3919 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3923 ; ONE with zero = OLT | OGT
3924 define <2 x i32> @fcmonez2xfloat(<2 x float> %A) {
3925 ; CHECK-LABEL: fcmonez2xfloat:
3927 ; CHECK-NEXT: fcmgt v1.2s, v0.2s, #0.0
3928 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
3929 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
3932 ; GISEL-LABEL: fcmonez2xfloat:
3934 ; GISEL-NEXT: fcmgt v1.2s, v0.2s, #0.0
3935 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
3936 ; GISEL-NEXT: orr v0.8b, v0.8b, v1.8b
3937 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
3938 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
3940 %tmp3 = fcmp one <2 x float> %A, zeroinitializer
3941 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
3945 ; ONE with zero = OLT | OGT
3946 define <4 x i32> @fcmonez4xfloat(<4 x float> %A) {
3947 ; CHECK-LABEL: fcmonez4xfloat:
3949 ; CHECK-NEXT: fcmgt v1.4s, v0.4s, #0.0
3950 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
3951 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
3954 ; GISEL-LABEL: fcmonez4xfloat:
3956 ; GISEL-NEXT: fcmgt v1.4s, v0.4s, #0.0
3957 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
3958 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
3959 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
3960 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
3962 %tmp3 = fcmp one <4 x float> %A, zeroinitializer
3963 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
3967 ; ONE with zero = OLT | OGT
3968 define <2 x i64> @fcmonez2xdouble(<2 x double> %A) {
3969 ; CHECK-LABEL: fcmonez2xdouble:
3971 ; CHECK-NEXT: fcmgt v1.2d, v0.2d, #0.0
3972 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
3973 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
3976 ; GISEL-LABEL: fcmonez2xdouble:
3978 ; GISEL-NEXT: fcmgt v1.2d, v0.2d, #0.0
3979 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
3980 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
3981 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
3982 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
3984 %tmp3 = fcmp one <2 x double> %A, zeroinitializer
3985 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
3989 ; ORD with zero = OLT | OGE
3990 define <2 x i32> @fcmordz2xfloat(<2 x float> %A) {
3991 ; CHECK-LABEL: fcmordz2xfloat:
3993 ; CHECK-NEXT: fcmge v1.2s, v0.2s, #0.0
3994 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
3995 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
3998 ; GISEL-LABEL: fcmordz2xfloat:
4000 ; GISEL-NEXT: fcmge v1.2s, v0.2s, #0.0
4001 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
4002 ; GISEL-NEXT: orr v0.8b, v0.8b, v1.8b
4003 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4004 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4006 %tmp3 = fcmp ord <2 x float> %A, zeroinitializer
4007 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4011 ; ORD with zero = OLT | OGE
4012 define <4 x i32> @fcmordz4xfloat(<4 x float> %A) {
4013 ; CHECK-LABEL: fcmordz4xfloat:
4015 ; CHECK-NEXT: fcmge v1.4s, v0.4s, #0.0
4016 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
4017 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4020 ; GISEL-LABEL: fcmordz4xfloat:
4022 ; GISEL-NEXT: fcmge v1.4s, v0.4s, #0.0
4023 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
4024 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4025 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4026 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4028 %tmp3 = fcmp ord <4 x float> %A, zeroinitializer
4029 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4033 ; ORD with zero = OLT | OGE
4034 define <2 x i64> @fcmordz2xdouble(<2 x double> %A) {
4035 ; CHECK-LABEL: fcmordz2xdouble:
4037 ; CHECK-NEXT: fcmge v1.2d, v0.2d, #0.0
4038 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
4039 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4042 ; GISEL-LABEL: fcmordz2xdouble:
4044 ; GISEL-NEXT: fcmge v1.2d, v0.2d, #0.0
4045 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
4046 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4047 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4048 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4050 %tmp3 = fcmp ord <2 x double> %A, zeroinitializer
4051 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4055 ; UEQ with zero = !ONE = !(OLT |OGT)
4056 define <2 x i32> @fcmueqz2xfloat(<2 x float> %A) {
4057 ; CHECK-LABEL: fcmueqz2xfloat:
4059 ; CHECK-NEXT: fcmgt v1.2s, v0.2s, #0.0
4060 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
4061 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
4062 ; CHECK-NEXT: mvn v0.8b, v0.8b
4065 ; GISEL-LABEL: fcmueqz2xfloat:
4067 ; GISEL-NEXT: fcmgt v1.2s, v0.2s, #0.0
4068 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
4069 ; GISEL-NEXT: orr v0.8b, v0.8b, v1.8b
4070 ; GISEL-NEXT: mvn v0.8b, v0.8b
4071 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4072 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4074 %tmp3 = fcmp ueq <2 x float> %A, zeroinitializer
4075 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4079 ; UEQ with zero = !ONE = !(OLT |OGT)
4080 define <4 x i32> @fcmueqz4xfloat(<4 x float> %A) {
4081 ; CHECK-LABEL: fcmueqz4xfloat:
4083 ; CHECK-NEXT: fcmgt v1.4s, v0.4s, #0.0
4084 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
4085 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4086 ; CHECK-NEXT: mvn v0.16b, v0.16b
4089 ; GISEL-LABEL: fcmueqz4xfloat:
4091 ; GISEL-NEXT: fcmgt v1.4s, v0.4s, #0.0
4092 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
4093 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4094 ; GISEL-NEXT: mvn v0.16b, v0.16b
4095 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4096 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4098 %tmp3 = fcmp ueq <4 x float> %A, zeroinitializer
4099 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4103 ; UEQ with zero = !ONE = !(OLT |OGT)
4104 define <2 x i64> @fcmueqz2xdouble(<2 x double> %A) {
4105 ; CHECK-LABEL: fcmueqz2xdouble:
4107 ; CHECK-NEXT: fcmgt v1.2d, v0.2d, #0.0
4108 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
4109 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4110 ; CHECK-NEXT: mvn v0.16b, v0.16b
4113 ; GISEL-LABEL: fcmueqz2xdouble:
4115 ; GISEL-NEXT: fcmgt v1.2d, v0.2d, #0.0
4116 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
4117 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4118 ; GISEL-NEXT: mvn v0.16b, v0.16b
4119 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4120 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4122 %tmp3 = fcmp ueq <2 x double> %A, zeroinitializer
4123 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4127 ; UGE with zero = !OLT
4128 define <2 x i32> @fcmugez2xfloat(<2 x float> %A) {
4129 ; CHECK-LABEL: fcmugez2xfloat:
4131 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
4132 ; CHECK-NEXT: mvn v0.8b, v0.8b
4135 ; GISEL-LABEL: fcmugez2xfloat:
4137 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
4138 ; GISEL-NEXT: mvn v0.8b, v0.8b
4139 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4140 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4142 %tmp3 = fcmp uge <2 x float> %A, zeroinitializer
4143 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4147 ; UGE with zero = !OLT
4148 define <4 x i32> @fcmugez4xfloat(<4 x float> %A) {
4149 ; CHECK-LABEL: fcmugez4xfloat:
4151 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
4152 ; CHECK-NEXT: mvn v0.16b, v0.16b
4155 ; GISEL-LABEL: fcmugez4xfloat:
4157 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
4158 ; GISEL-NEXT: mvn v0.16b, v0.16b
4159 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4160 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4162 %tmp3 = fcmp uge <4 x float> %A, zeroinitializer
4163 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4167 ; UGE with zero = !OLT
4168 define <2 x i64> @fcmugez2xdouble(<2 x double> %A) {
4169 ; CHECK-LABEL: fcmugez2xdouble:
4171 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
4172 ; CHECK-NEXT: mvn v0.16b, v0.16b
4175 ; GISEL-LABEL: fcmugez2xdouble:
4177 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
4178 ; GISEL-NEXT: mvn v0.16b, v0.16b
4179 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4180 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4182 %tmp3 = fcmp uge <2 x double> %A, zeroinitializer
4183 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4187 ; UGT with zero = !OLE
4188 define <2 x i32> @fcmugtz2xfloat(<2 x float> %A) {
4189 ; CHECK-LABEL: fcmugtz2xfloat:
4191 ; CHECK-NEXT: fcmle v0.2s, v0.2s, #0.0
4192 ; CHECK-NEXT: mvn v0.8b, v0.8b
4195 ; GISEL-LABEL: fcmugtz2xfloat:
4197 ; GISEL-NEXT: fcmle v0.2s, v0.2s, #0.0
4198 ; GISEL-NEXT: mvn v0.8b, v0.8b
4199 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4200 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4202 %tmp3 = fcmp ugt <2 x float> %A, zeroinitializer
4203 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4207 ; UGT with zero = !OLE
4208 define <4 x i32> @fcmugtz4xfloat(<4 x float> %A) {
4209 ; CHECK-LABEL: fcmugtz4xfloat:
4211 ; CHECK-NEXT: fcmle v0.4s, v0.4s, #0.0
4212 ; CHECK-NEXT: mvn v0.16b, v0.16b
4215 ; GISEL-LABEL: fcmugtz4xfloat:
4217 ; GISEL-NEXT: fcmle v0.4s, v0.4s, #0.0
4218 ; GISEL-NEXT: mvn v0.16b, v0.16b
4219 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4220 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4222 %tmp3 = fcmp ugt <4 x float> %A, zeroinitializer
4223 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4227 ; UGT with zero = !OLE
4228 define <2 x i64> @fcmugtz2xdouble(<2 x double> %A) {
4229 ; CHECK-LABEL: fcmugtz2xdouble:
4231 ; CHECK-NEXT: fcmle v0.2d, v0.2d, #0.0
4232 ; CHECK-NEXT: mvn v0.16b, v0.16b
4235 ; GISEL-LABEL: fcmugtz2xdouble:
4237 ; GISEL-NEXT: fcmle v0.2d, v0.2d, #0.0
4238 ; GISEL-NEXT: mvn v0.16b, v0.16b
4239 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4240 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4242 %tmp3 = fcmp ugt <2 x double> %A, zeroinitializer
4243 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4247 ; ULT with zero = !OGE
4248 define <2 x i32> @fcmultz2xfloat(<2 x float> %A) {
4249 ; CHECK-LABEL: fcmultz2xfloat:
4251 ; CHECK-NEXT: fcmge v0.2s, v0.2s, #0.0
4252 ; CHECK-NEXT: mvn v0.8b, v0.8b
4255 ; GISEL-LABEL: fcmultz2xfloat:
4257 ; GISEL-NEXT: fcmge v0.2s, v0.2s, #0.0
4258 ; GISEL-NEXT: mvn v0.8b, v0.8b
4259 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4260 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4262 %tmp3 = fcmp ult <2 x float> %A, zeroinitializer
4263 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4267 define <4 x i32> @fcmultz4xfloat(<4 x float> %A) {
4268 ; CHECK-LABEL: fcmultz4xfloat:
4270 ; CHECK-NEXT: fcmge v0.4s, v0.4s, #0.0
4271 ; CHECK-NEXT: mvn v0.16b, v0.16b
4274 ; GISEL-LABEL: fcmultz4xfloat:
4276 ; GISEL-NEXT: fcmge v0.4s, v0.4s, #0.0
4277 ; GISEL-NEXT: mvn v0.16b, v0.16b
4278 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4279 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4281 %tmp3 = fcmp ult <4 x float> %A, zeroinitializer
4282 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4286 define <2 x i64> @fcmultz2xdouble(<2 x double> %A) {
4287 ; CHECK-LABEL: fcmultz2xdouble:
4289 ; CHECK-NEXT: fcmge v0.2d, v0.2d, #0.0
4290 ; CHECK-NEXT: mvn v0.16b, v0.16b
4293 ; GISEL-LABEL: fcmultz2xdouble:
4295 ; GISEL-NEXT: fcmge v0.2d, v0.2d, #0.0
4296 ; GISEL-NEXT: mvn v0.16b, v0.16b
4297 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4298 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4300 %tmp3 = fcmp ult <2 x double> %A, zeroinitializer
4301 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4305 ; ULE with zero = !OGT
4306 define <2 x i32> @fcmulez2xfloat(<2 x float> %A) {
4307 ; CHECK-LABEL: fcmulez2xfloat:
4309 ; CHECK-NEXT: fcmgt v0.2s, v0.2s, #0.0
4310 ; CHECK-NEXT: mvn v0.8b, v0.8b
4313 ; GISEL-LABEL: fcmulez2xfloat:
4315 ; GISEL-NEXT: fcmgt v0.2s, v0.2s, #0.0
4316 ; GISEL-NEXT: mvn v0.8b, v0.8b
4317 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4318 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4320 %tmp3 = fcmp ule <2 x float> %A, zeroinitializer
4321 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4325 ; ULE with zero = !OGT
4326 define <4 x i32> @fcmulez4xfloat(<4 x float> %A) {
4327 ; CHECK-LABEL: fcmulez4xfloat:
4329 ; CHECK-NEXT: fcmgt v0.4s, v0.4s, #0.0
4330 ; CHECK-NEXT: mvn v0.16b, v0.16b
4333 ; GISEL-LABEL: fcmulez4xfloat:
4335 ; GISEL-NEXT: fcmgt v0.4s, v0.4s, #0.0
4336 ; GISEL-NEXT: mvn v0.16b, v0.16b
4337 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4338 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4340 %tmp3 = fcmp ule <4 x float> %A, zeroinitializer
4341 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4345 ; ULE with zero = !OGT
4346 define <2 x i64> @fcmulez2xdouble(<2 x double> %A) {
4347 ; CHECK-LABEL: fcmulez2xdouble:
4349 ; CHECK-NEXT: fcmgt v0.2d, v0.2d, #0.0
4350 ; CHECK-NEXT: mvn v0.16b, v0.16b
4353 ; GISEL-LABEL: fcmulez2xdouble:
4355 ; GISEL-NEXT: fcmgt v0.2d, v0.2d, #0.0
4356 ; GISEL-NEXT: mvn v0.16b, v0.16b
4357 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4358 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4360 %tmp3 = fcmp ule <2 x double> %A, zeroinitializer
4361 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4365 ; UNE with zero = !OEQ with zero
4366 define <2 x i32> @fcmunez2xfloat(<2 x float> %A) {
4367 ; CHECK-LABEL: fcmunez2xfloat:
4369 ; CHECK-NEXT: fcmeq v0.2s, v0.2s, #0.0
4370 ; CHECK-NEXT: mvn v0.8b, v0.8b
4373 ; GISEL-LABEL: fcmunez2xfloat:
4375 ; GISEL-NEXT: fcmeq v0.2s, v0.2s, #0.0
4376 ; GISEL-NEXT: mvn v0.8b, v0.8b
4377 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4378 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4380 %tmp3 = fcmp une <2 x float> %A, zeroinitializer
4381 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4385 ; UNE with zero = !OEQ with zero
4386 define <4 x i32> @fcmunez4xfloat(<4 x float> %A) {
4387 ; CHECK-LABEL: fcmunez4xfloat:
4389 ; CHECK-NEXT: fcmeq v0.4s, v0.4s, #0.0
4390 ; CHECK-NEXT: mvn v0.16b, v0.16b
4393 ; GISEL-LABEL: fcmunez4xfloat:
4395 ; GISEL-NEXT: fcmeq v0.4s, v0.4s, #0.0
4396 ; GISEL-NEXT: mvn v0.16b, v0.16b
4397 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4398 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4400 %tmp3 = fcmp une <4 x float> %A, zeroinitializer
4401 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4405 ; UNE with zero = !OEQ with zero
4406 define <2 x i64> @fcmunez2xdouble(<2 x double> %A) {
4407 ; CHECK-LABEL: fcmunez2xdouble:
4409 ; CHECK-NEXT: fcmeq v0.2d, v0.2d, #0.0
4410 ; CHECK-NEXT: mvn v0.16b, v0.16b
4413 ; GISEL-LABEL: fcmunez2xdouble:
4415 ; GISEL-NEXT: fcmeq v0.2d, v0.2d, #0.0
4416 ; GISEL-NEXT: mvn v0.16b, v0.16b
4417 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4418 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4420 %tmp3 = fcmp une <2 x double> %A, zeroinitializer
4421 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
4425 ; UNO with zero = !ORD = !(OLT | OGE)
4426 define <2 x i32> @fcmunoz2xfloat(<2 x float> %A) {
4427 ; CHECK-LABEL: fcmunoz2xfloat:
4429 ; CHECK-NEXT: fcmge v1.2s, v0.2s, #0.0
4430 ; CHECK-NEXT: fcmlt v0.2s, v0.2s, #0.0
4431 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
4432 ; CHECK-NEXT: mvn v0.8b, v0.8b
4435 ; GISEL-LABEL: fcmunoz2xfloat:
4437 ; GISEL-NEXT: fcmge v1.2s, v0.2s, #0.0
4438 ; GISEL-NEXT: fcmlt v0.2s, v0.2s, #0.0
4439 ; GISEL-NEXT: orr v0.8b, v0.8b, v1.8b
4440 ; GISEL-NEXT: mvn v0.8b, v0.8b
4441 ; GISEL-NEXT: shl v0.2s, v0.2s, #31
4442 ; GISEL-NEXT: sshr v0.2s, v0.2s, #31
4444 %tmp3 = fcmp uno <2 x float> %A, zeroinitializer
4445 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
4449 ; UNO with zero = !ORD = !(OLT | OGE)
4450 define <4 x i32> @fcmunoz4xfloat(<4 x float> %A) {
4451 ; CHECK-LABEL: fcmunoz4xfloat:
4453 ; CHECK-NEXT: fcmge v1.4s, v0.4s, #0.0
4454 ; CHECK-NEXT: fcmlt v0.4s, v0.4s, #0.0
4455 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4456 ; CHECK-NEXT: mvn v0.16b, v0.16b
4459 ; GISEL-LABEL: fcmunoz4xfloat:
4461 ; GISEL-NEXT: fcmge v1.4s, v0.4s, #0.0
4462 ; GISEL-NEXT: fcmlt v0.4s, v0.4s, #0.0
4463 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4464 ; GISEL-NEXT: mvn v0.16b, v0.16b
4465 ; GISEL-NEXT: shl v0.4s, v0.4s, #31
4466 ; GISEL-NEXT: sshr v0.4s, v0.4s, #31
4468 %tmp3 = fcmp uno <4 x float> %A, zeroinitializer
4469 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
4473 ; UNO with zero = !ORD = !(OLT | OGE)
4474 define <2 x i64> @fcmunoz2xdouble(<2 x double> %A) {
4475 ; CHECK-LABEL: fcmunoz2xdouble:
4477 ; CHECK-NEXT: fcmge v1.2d, v0.2d, #0.0
4478 ; CHECK-NEXT: fcmlt v0.2d, v0.2d, #0.0
4479 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
4480 ; CHECK-NEXT: mvn v0.16b, v0.16b
4483 ; GISEL-LABEL: fcmunoz2xdouble:
4485 ; GISEL-NEXT: fcmge v1.2d, v0.2d, #0.0
4486 ; GISEL-NEXT: fcmlt v0.2d, v0.2d, #0.0
4487 ; GISEL-NEXT: orr v0.16b, v0.16b, v1.16b
4488 ; GISEL-NEXT: mvn v0.16b, v0.16b
4489 ; GISEL-NEXT: shl v0.2d, v0.2d, #63
4490 ; GISEL-NEXT: sshr v0.2d, v0.2d, #63
4492 %tmp3 = fcmp uno <2 x double> %A, zeroinitializer
4493 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>