@@ -439,9 +439,7 @@ define <3 x i2> @scmp_unary_shuffle_ops(<3 x i8> %x, <3 x i8> %y) {
439
439
define i32 @scmp_ashr (i32 %a ) {
440
440
; CHECK-LABEL: define i32 @scmp_ashr(
441
441
; CHECK-SAME: i32 [[A:%.*]]) {
442
- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i32 [[A]], 31
443
- ; CHECK-NEXT: [[CMP_INV:%.*]] = icmp slt i32 [[A]], 1
444
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP_INV]], i32 [[A_LOBIT]], i32 1
442
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
445
443
; CHECK-NEXT: ret i32 [[RETVAL_0]]
446
444
;
447
445
%a.lobit = ashr i32 %a , 31
@@ -453,9 +451,7 @@ define i32 @scmp_ashr(i32 %a) {
453
451
define i32 @scmp_sgt_slt (i32 %a ) {
454
452
; CHECK-LABEL: define i32 @scmp_sgt_slt(
455
453
; CHECK-SAME: i32 [[A:%.*]]) {
456
- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i32 [[A]], 31
457
- ; CHECK-NEXT: [[CMP_INV:%.*]] = icmp slt i32 [[A]], 1
458
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP_INV]], i32 [[A_LOBIT]], i32 1
454
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
459
455
; CHECK-NEXT: ret i32 [[RETVAL_0]]
460
456
;
461
457
%cmp = icmp sgt i32 %a , 0
@@ -468,10 +464,7 @@ define i32 @scmp_sgt_slt(i32 %a) {
468
464
define i32 @scmp_zero_slt (i32 %a ) {
469
465
; CHECK-LABEL: define i32 @scmp_zero_slt(
470
466
; CHECK-SAME: i32 [[A:%.*]]) {
471
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
472
- ; CHECK-NEXT: [[CMP1_INV:%.*]] = icmp slt i32 [[A]], 1
473
- ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[CMP1_INV]], i32 -1, i32 1
474
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i32 0, i32 [[DOT]]
467
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
475
468
; CHECK-NEXT: ret i32 [[RETVAL_0]]
476
469
;
477
470
%cmp = icmp eq i32 %a , 0
@@ -484,10 +477,7 @@ define i32 @scmp_zero_slt(i32 %a) {
484
477
define i32 @scmp_zero_sgt (i32 %a ) {
485
478
; CHECK-LABEL: define i32 @scmp_zero_sgt(
486
479
; CHECK-SAME: i32 [[A:%.*]]) {
487
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
488
- ; CHECK-NEXT: [[CMP1_INV:%.*]] = icmp sgt i32 [[A]], -1
489
- ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[CMP1_INV]], i32 1, i32 -1
490
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i32 0, i32 [[DOT]]
480
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
491
481
; CHECK-NEXT: ret i32 [[RETVAL_0]]
492
482
;
493
483
%cmp = icmp eq i32 %a , 0
@@ -498,6 +488,106 @@ define i32 @scmp_zero_sgt(i32 %a) {
498
488
}
499
489
500
490
491
+ define i32 @scmp_zero_sgt_1 (i32 %a ) {
492
+ ; CHECK-LABEL: define i32 @scmp_zero_sgt_1(
493
+ ; CHECK-SAME: i32 [[A:%.*]]) {
494
+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
495
+ ; CHECK-NEXT: ret i32 [[COND2]]
496
+ ;
497
+ %cmp = icmp eq i32 %a , 0
498
+ %cmp1 = icmp sgt i32 %a , -1
499
+ %cond = select i1 %cmp1 , i32 1 , i32 -1
500
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
501
+ ret i32 %cond2
502
+ }
503
+
504
+ define i32 @scmp_zero_slt_1 (i32 %a ) {
505
+ ; CHECK-LABEL: define i32 @scmp_zero_slt_1(
506
+ ; CHECK-SAME: i32 [[A:%.*]]) {
507
+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
508
+ ; CHECK-NEXT: ret i32 [[COND2]]
509
+ ;
510
+ %cmp = icmp eq i32 %a , 0
511
+ %cmp1 = icmp slt i32 %a , 1
512
+ %cond = select i1 %cmp1 , i32 -1 , i32 1
513
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
514
+ ret i32 %cond2
515
+ }
516
+
517
+ define i32 @scmp_zero_slt_neg (i32 %a ) {
518
+ ; CHECK-LABEL: define i32 @scmp_zero_slt_neg(
519
+ ; CHECK-SAME: i32 [[A:%.*]]) {
520
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
521
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[A]], -1
522
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP1]], i32 -1, i32 1
523
+ ; CHECK-NEXT: [[COND2:%.*]] = select i1 [[CMP]], i32 0, i32 [[COND]]
524
+ ; CHECK-NEXT: ret i32 [[COND2]]
525
+ ;
526
+ %cmp = icmp eq i32 %a , 0
527
+ %cmp1 = icmp slt i32 %a , -1
528
+ %cond = select i1 %cmp1 , i32 -1 , i32 1
529
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
530
+ ret i32 %cond2
531
+ }
532
+
533
+ define i32 @scmp_zero_sgt_neg (i32 %a ) {
534
+ ; CHECK-LABEL: define i32 @scmp_zero_sgt_neg(
535
+ ; CHECK-SAME: i32 [[A:%.*]]) {
536
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
537
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[A]], 1
538
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP1]], i32 1, i32 -1
539
+ ; CHECK-NEXT: [[COND2:%.*]] = select i1 [[CMP]], i32 0, i32 [[COND]]
540
+ ; CHECK-NEXT: ret i32 [[COND2]]
541
+ ;
542
+ %cmp = icmp eq i32 %a , 0
543
+ %cmp1 = icmp sgt i32 %a , 1
544
+ %cond = select i1 %cmp1 , i32 1 , i32 -1
545
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
546
+ ret i32 %cond2
547
+ }
548
+
549
+ define i32 @ucmp_ugt_ult_neg (i32 %a ) {
550
+ ; CHECK-LABEL: define i32 @ucmp_ugt_ult_neg(
551
+ ; CHECK-SAME: i32 [[A:%.*]]) {
552
+ ; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ne i32 [[A]], 0
553
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = zext i1 [[CMP_NOT]] to i32
554
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
555
+ ;
556
+ %cmp = icmp ugt i32 %a , 0
557
+ %cmp1 = icmp ult i32 %a , 0
558
+ %. = select i1 %cmp1 , i32 -1 , i32 0
559
+ %retval.0 = select i1 %cmp , i32 1 , i32 %.
560
+ ret i32 %retval.0
561
+ }
562
+
563
+ define i32 @ucmp_zero_ult_neg (i32 %a ) {
564
+ ; CHECK-LABEL: define i32 @ucmp_zero_ult_neg(
565
+ ; CHECK-SAME: i32 [[A:%.*]]) {
566
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A]], 0
567
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = zext i1 [[CMP]] to i32
568
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
569
+ ;
570
+ %cmp = icmp eq i32 %a , 0
571
+ %cmp1.inv = icmp ult i32 %a , 1
572
+ %. = select i1 %cmp1.inv , i32 -1 , i32 1
573
+ %retval.0 = select i1 %cmp , i32 0 , i32 %.
574
+ ret i32 %retval.0
575
+ }
576
+
577
+ define i32 @ucmp_zero_ugt_neg (i32 %a ) {
578
+ ; CHECK-LABEL: define i32 @ucmp_zero_ugt_neg(
579
+ ; CHECK-SAME: i32 [[A:%.*]]) {
580
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A]], 0
581
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = sext i1 [[CMP]] to i32
582
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
583
+ ;
584
+ %cmp = icmp eq i32 %a , 0
585
+ %cmp1.inv = icmp ugt i32 %a , -1
586
+ %. = select i1 %cmp1.inv , i32 1 , i32 -1
587
+ %retval.0 = select i1 %cmp , i32 0 , i32 %.
588
+ ret i32 %retval.0
589
+ }
590
+
501
591
define i32 @scmp_sgt_slt_ab (i32 %a , i32 %b ) {
502
592
; CHECK-LABEL: define i32 @scmp_sgt_slt_ab(
503
593
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
0 commit comments