@@ -457,8 +457,8 @@ define i8 @scmp_from_select_ne_and_gt_commuted3(i32 %x, i32 %y) {
457457; CHECK-NEXT: ret i8 [[R]]
458458;
459459 %ne = icmp ne i32 %x , %y
460- %gt = icmp slt i32 %x , %y
461- %sel1 = select i1 %gt , i8 - 1 , i8 1
460+ %gt = icmp sgt i32 %x , %y
461+ %sel1 = select i1 %gt , i8 1 , i8 - 1
462462 %r = select i1 %ne , i8 %sel1 , i8 0
463463 ret i8 %r
464464}
@@ -467,14 +467,11 @@ define i8 @scmp_from_select_ne_and_gt_commuted3(i32 %x, i32 %y) {
467467define i8 @scmp_from_select_ne_const_and_gt_commuted1 (i32 %x ) {
468468; CHECK-LABEL: define i8 @scmp_from_select_ne_const_and_gt_commuted1(
469469; CHECK-SAME: i32 [[X:%.*]]) {
470- ; CHECK-NEXT: [[NE_NOT:%.*]] = icmp eq i32 [[X]], 5
471- ; CHECK-NEXT: [[GT:%.*]] = icmp slt i32 [[X]], 4
472- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[GT]], i8 1, i8 -1
473- ; CHECK-NEXT: [[R:%.*]] = select i1 [[NE_NOT]], i8 0, i8 [[SEL1]]
470+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 5)
474471; CHECK-NEXT: ret i8 [[R]]
475472;
476473 %ne = icmp ne i32 %x , 5
477- %gt = icmp slt i32 %x , 4
474+ %gt = icmp sgt i32 %x , 4
478475 %sel1 = select i1 %gt , i8 1 , i8 -1
479476 %r = select i1 %ne , i8 %sel1 , i8 0
480477 ret i8 %r
@@ -483,31 +480,25 @@ define i8 @scmp_from_select_ne_const_and_gt_commuted1(i32 %x) {
483480define i8 @scmp_from_select_ne_const_and_gt_commuted2 (i32 %x ) {
484481; CHECK-LABEL: define i8 @scmp_from_select_ne_const_and_gt_commuted2(
485482; CHECK-SAME: i32 [[X:%.*]]) {
486- ; CHECK-NEXT: [[NE_NOT:%.*]] = icmp eq i32 [[X]], 5
487- ; CHECK-NEXT: [[GT:%.*]] = icmp sgt i32 [[X]], 4
488- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[GT]], i8 -1, i8 1
489- ; CHECK-NEXT: [[R:%.*]] = select i1 [[NE_NOT]], i8 0, i8 [[SEL1]]
483+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 5)
490484; CHECK-NEXT: ret i8 [[R]]
491485;
492486 %ne = icmp ne i32 %x , 5
493487 %gt = icmp sgt i32 %x , 4
494- %sel1 = select i1 %gt , i8 - 1 , i8 1
488+ %sel1 = select i1 %gt , i8 1 , i8 - 1
495489 %r = select i1 %ne , i8 %sel1 , i8 0
496490 ret i8 %r
497491}
498492
499493define i8 @scmp_from_select_ne_const_and_gt_commuted3 (i32 %x ) {
500494; CHECK-LABEL: define i8 @scmp_from_select_ne_const_and_gt_commuted3(
501495; CHECK-SAME: i32 [[X:%.*]]) {
502- ; CHECK-NEXT: [[NE_NOT:%.*]] = icmp eq i32 [[X]], 5
503- ; CHECK-NEXT: [[GT:%.*]] = icmp slt i32 [[X]], 4
504- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[GT]], i8 -1, i8 1
505- ; CHECK-NEXT: [[R:%.*]] = select i1 [[NE_NOT]], i8 0, i8 [[SEL1]]
496+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X]], i32 5)
506497; CHECK-NEXT: ret i8 [[R]]
507498;
508499 %ne = icmp ne i32 %x , 5
509- %gt = icmp slt i32 %x , 4
510- %sel1 = select i1 %gt , i8 - 1 , i8 1
500+ %gt = icmp sgt i32 %x , 4
501+ %sel1 = select i1 %gt , i8 1 , i8 - 1
511502 %r = select i1 %ne , i8 %sel1 , i8 0
512503 ret i8 %r
513504}
@@ -557,10 +548,7 @@ define i32 @scmp_sgt_slt(i32 %a) {
557548define i32 @scmp_zero_slt (i32 %a ) {
558549; CHECK-LABEL: define i32 @scmp_zero_slt(
559550; CHECK-SAME: i32 [[A:%.*]]) {
560- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
561- ; CHECK-NEXT: [[CMP1_INV:%.*]] = icmp slt i32 [[A]], 1
562- ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[CMP1_INV]], i32 -1, i32 1
563- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i32 0, i32 [[DOT]]
551+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
564552; CHECK-NEXT: ret i32 [[RETVAL_0]]
565553;
566554 %cmp = icmp eq i32 %a , 0
@@ -573,10 +561,7 @@ define i32 @scmp_zero_slt(i32 %a) {
573561define i32 @scmp_zero_sgt (i32 %a ) {
574562; CHECK-LABEL: define i32 @scmp_zero_sgt(
575563; CHECK-SAME: i32 [[A:%.*]]) {
576- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
577- ; CHECK-NEXT: [[CMP1_INV:%.*]] = icmp sgt i32 [[A]], -1
578- ; CHECK-NEXT: [[DOT:%.*]] = select i1 [[CMP1_INV]], i32 1, i32 -1
579- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i32 0, i32 [[DOT]]
564+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
580565; CHECK-NEXT: ret i32 [[RETVAL_0]]
581566;
582567 %cmp = icmp eq i32 %a , 0
@@ -590,10 +575,7 @@ define i32 @scmp_zero_sgt(i32 %a) {
590575define i32 @scmp_zero_sgt_1 (i32 %a ) {
591576; CHECK-LABEL: define i32 @scmp_zero_sgt_1(
592577; CHECK-SAME: i32 [[A:%.*]]) {
593- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
594- ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[A]], -1
595- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP1]], i32 1, i32 -1
596- ; CHECK-NEXT: [[COND2:%.*]] = select i1 [[CMP]], i32 0, i32 [[COND]]
578+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
597579; CHECK-NEXT: ret i32 [[COND2]]
598580;
599581 %cmp = icmp eq i32 %a , 0
@@ -606,10 +588,7 @@ define i32 @scmp_zero_sgt_1(i32 %a) {
606588define i32 @scmp_zero_slt_1 (i32 %a ) {
607589; CHECK-LABEL: define i32 @scmp_zero_slt_1(
608590; CHECK-SAME: i32 [[A:%.*]]) {
609- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A]], 0
610- ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[A]], 1
611- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP1]], i32 -1, i32 1
612- ; CHECK-NEXT: [[COND2:%.*]] = select i1 [[CMP]], i32 0, i32 [[COND]]
591+ ; CHECK-NEXT: [[COND2:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
613592; CHECK-NEXT: ret i32 [[COND2]]
614593;
615594 %cmp = icmp eq i32 %a , 0
0 commit comments