@@ -282,10 +282,7 @@ define i8 @strong_order_cmp_ugt_eq(i32 %a, i32 %b) {
282
282
283
283
define i8 @strong_order_cmp_eq_slt (i32 %a , i32 %b ) {
284
284
; CHECK-LABEL: @strong_order_cmp_eq_slt(
285
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
286
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = zext i1 [[CMP_EQ]] to i8
287
- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp slt i32 [[A]], [[B]]
288
- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 [[SEL_EQ]]
285
+ ; CHECK-NEXT: [[SEL_LT:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
289
286
; CHECK-NEXT: ret i8 [[SEL_LT]]
290
287
;
291
288
%cmp.eq = icmp eq i32 %a , %b
@@ -297,10 +294,7 @@ define i8 @strong_order_cmp_eq_slt(i32 %a, i32 %b) {
297
294
298
295
define i8 @strong_order_cmp_eq_sgt (i32 %a , i32 %b ) {
299
296
; CHECK-LABEL: @strong_order_cmp_eq_sgt(
300
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
301
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_EQ]] to i8
302
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp sgt i32 [[A]], [[B]]
303
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
297
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
304
298
; CHECK-NEXT: ret i8 [[SEL_GT]]
305
299
;
306
300
%cmp.eq = icmp eq i32 %a , %b
@@ -312,10 +306,7 @@ define i8 @strong_order_cmp_eq_sgt(i32 %a, i32 %b) {
312
306
313
307
define i8 @strong_order_cmp_eq_ult (i32 %a , i32 %b ) {
314
308
; CHECK-LABEL: @strong_order_cmp_eq_ult(
315
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
316
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = zext i1 [[CMP_EQ]] to i8
317
- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp ult i32 [[A]], [[B]]
318
- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 [[SEL_EQ]]
309
+ ; CHECK-NEXT: [[SEL_LT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
319
310
; CHECK-NEXT: ret i8 [[SEL_LT]]
320
311
;
321
312
%cmp.eq = icmp eq i32 %a , %b
@@ -327,10 +318,7 @@ define i8 @strong_order_cmp_eq_ult(i32 %a, i32 %b) {
327
318
328
319
define i8 @strong_order_cmp_eq_ugt (i32 %a , i32 %b ) {
329
320
; CHECK-LABEL: @strong_order_cmp_eq_ugt(
330
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
331
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_EQ]] to i8
332
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt i32 [[A]], [[B]]
333
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
321
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
334
322
; CHECK-NEXT: ret i8 [[SEL_GT]]
335
323
;
336
324
%cmp.eq = icmp eq i32 %a , %b
@@ -404,9 +392,7 @@ define i8 @strong_order_cmp_ne_ugt_ne_not_one_use(i32 %a, i32 %b) {
404
392
; CHECK-LABEL: @strong_order_cmp_ne_ugt_ne_not_one_use(
405
393
; CHECK-NEXT: [[CMP_NE:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
406
394
; CHECK-NEXT: call void @use1(i1 [[CMP_NE]])
407
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_NE]] to i8
408
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt i32 [[A]], [[B]]
409
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
395
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A]], i32 [[B]])
410
396
; CHECK-NEXT: ret i8 [[SEL_GT]]
411
397
;
412
398
%cmp.ne = icmp ne i32 %a , %b
@@ -535,10 +521,7 @@ define <2 x i8> @strong_order_cmp_ugt_ult_vector_poison(<2 x i32> %a, <2 x i32>
535
521
536
522
define <2 x i8 > @strong_order_cmp_eq_ugt_vector (<2 x i32 > %a , <2 x i32 > %b ) {
537
523
; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector(
538
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
539
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
540
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
541
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
524
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
542
525
; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
543
526
;
544
527
%cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -550,10 +533,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector(<2 x i32> %a, <2 x i32> %b) {
550
533
551
534
define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison1 (<2 x i32 > %a , <2 x i32 > %b ) {
552
535
; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison1(
553
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
554
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
555
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
556
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
536
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
557
537
; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
558
538
;
559
539
%cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -565,10 +545,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector_poison1(<2 x i32> %a, <2 x i32>
565
545
566
546
define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison2 (<2 x i32 > %a , <2 x i32 > %b ) {
567
547
; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison2(
568
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
569
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
570
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
571
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
548
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
572
549
; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
573
550
;
574
551
%cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -580,10 +557,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector_poison2(<2 x i32> %a, <2 x i32>
580
557
581
558
define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison3 (<2 x i32 > %a , <2 x i32 > %b ) {
582
559
; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison3(
583
- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
584
- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
585
- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
586
- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 poison>, <2 x i8> [[SEL_EQ]]
560
+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
587
561
; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
588
562
;
589
563
%cmp.eq = icmp eq <2 x i32 > %a , %b
0 commit comments