@@ -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,100 @@ 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_2 (i32 %a ) {
518
+ ; CHECK-LABEL: define i32 @scmp_zero_slt_2(
519
+ ; CHECK-SAME: i32 [[A:%.*]]) {
520
+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
521
+ ; CHECK-NEXT: ret i32 [[COND2]]
522
+ ;
523
+ %cmp = icmp eq i32 %a , 0
524
+ %cmp1 = icmp slt i32 %a , -1
525
+ %cond = select i1 %cmp1 , i32 -1 , i32 1
526
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
527
+ ret i32 %cond2
528
+ }
529
+
530
+ define i32 @scmp_zero_sgt_2 (i32 %a ) {
531
+ ; CHECK-LABEL: define i32 @scmp_zero_sgt_2(
532
+ ; CHECK-SAME: i32 [[A:%.*]]) {
533
+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
534
+ ; CHECK-NEXT: ret i32 [[COND2]]
535
+ ;
536
+ %cmp = icmp eq i32 %a , 0
537
+ %cmp1 = icmp sgt i32 %a , 1
538
+ %cond = select i1 %cmp1 , i32 1 , i32 -1
539
+ %cond2 = select i1 %cmp , i32 0 , i32 %cond
540
+ ret i32 %cond2
541
+ }
542
+
543
+ define i32 @ucmp_sgt_slt_neg (i32 %a ) {
544
+ ; CHECK-LABEL: define i32 @ucmp_sgt_slt_neg(
545
+ ; CHECK-SAME: i32 [[A:%.*]]) {
546
+ ; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ne i32 [[A]], 0
547
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = zext i1 [[CMP_NOT]] to i32
548
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
549
+ ;
550
+ %cmp = icmp ugt i32 %a , 0
551
+ %cmp1 = icmp ult i32 %a , 0
552
+ %. = select i1 %cmp1 , i32 -1 , i32 0
553
+ %retval.0 = select i1 %cmp , i32 1 , i32 %.
554
+ ret i32 %retval.0
555
+ }
556
+
557
+ define i32 @ucmp_zero_slt_neg (i32 %a ) {
558
+ ; CHECK-LABEL: define i32 @ucmp_zero_slt_neg(
559
+ ; CHECK-SAME: i32 [[A:%.*]]) {
560
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A]], 0
561
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = zext i1 [[CMP]] to i32
562
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
563
+ ;
564
+ %cmp = icmp eq i32 %a , 0
565
+ %cmp1.inv = icmp ult i32 %a , 1
566
+ %. = select i1 %cmp1.inv , i32 -1 , i32 1
567
+ %retval.0 = select i1 %cmp , i32 0 , i32 %.
568
+ ret i32 %retval.0
569
+ }
570
+
571
+ define i32 @ucmp_zero_sgt_neg (i32 %a ) {
572
+ ; CHECK-LABEL: define i32 @ucmp_zero_sgt_neg(
573
+ ; CHECK-SAME: i32 [[A:%.*]]) {
574
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A]], 0
575
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = sext i1 [[CMP]] to i32
576
+ ; CHECK-NEXT: ret i32 [[RETVAL_0]]
577
+ ;
578
+ %cmp = icmp eq i32 %a , 0
579
+ %cmp1.inv = icmp ugt i32 %a , -1
580
+ %. = select i1 %cmp1.inv , i32 1 , i32 -1
581
+ %retval.0 = select i1 %cmp , i32 0 , i32 %.
582
+ ret i32 %retval.0
583
+ }
584
+
501
585
define i32 @scmp_sgt_slt_ab (i32 %a , i32 %b ) {
502
586
; CHECK-LABEL: define i32 @scmp_sgt_slt_ab(
503
587
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
0 commit comments