@@ -519,9 +519,7 @@ define <3 x i2> @scmp_unary_shuffle_ops(<3 x i8> %x, <3 x i8> %y) {
519519define i32 @scmp_sgt_slt (i32 %a ) {
520520; CHECK-LABEL: define i32 @scmp_sgt_slt(
521521; CHECK-SAME: i32 [[A:%.*]]) {
522- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i32 [[A]], 31
523- ; CHECK-NEXT: [[CMP_INV:%.*]] = icmp slt i32 [[A]], 1
524- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP_INV]], i32 [[A_LOBIT]], i32 1
522+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
525523; CHECK-NEXT: ret i32 [[RETVAL_0]]
526524;
527525 %cmp = icmp sgt i32 %a , 0
@@ -751,9 +749,7 @@ define i8 @scmp_from_select_eq_and_gt_neg3(i32 %x, i32 %y) {
751749define i32 @scmp_ashr (i32 %a ) {
752750; CHECK-LABEL: define i32 @scmp_ashr(
753751; CHECK-SAME: i32 [[A:%.*]]) {
754- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i32 [[A]], 31
755- ; CHECK-NEXT: [[CMP_INV:%.*]] = icmp slt i32 [[A]], 1
756- ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP_INV]], i32 [[A_LOBIT]], i32 1
752+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[A]], i32 0)
757753; CHECK-NEXT: ret i32 [[RETVAL_0]]
758754;
759755 %a.lobit = ashr i32 %a , 31
@@ -762,13 +758,11 @@ define i32 @scmp_ashr(i32 %a) {
762758 ret i32 %retval.0
763759}
764760
765- ; Test the new SGT pattern: select (icmp sgt X, 0), 1, ashr X, bitwidth-1 -> scmp(X, 0)
761+ ; select (icmp sgt X, 0), 1, ashr X, bitwidth-1 -> scmp(X, 0)
766762define i8 @scmp_ashr_sgt_pattern (i8 %a ) {
767763; CHECK-LABEL: define i8 @scmp_ashr_sgt_pattern(
768764; CHECK-SAME: i8 [[A:%.*]]) {
769- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i8 [[A]], 7
770- ; CHECK-NEXT: [[CMP_INV:%.*]] = icmp slt i8 [[A]], 1
771- ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMP_INV]], i8 [[A_LOBIT]], i8 1
765+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i8(i8 [[A]], i8 0)
772766; CHECK-NEXT: ret i8 [[R]]
773767;
774768 %a.lobit = ashr i8 %a , 7
@@ -777,17 +771,29 @@ define i8 @scmp_ashr_sgt_pattern(i8 %a) {
777771 ret i8 %retval
778772}
779773
780- ; Test the SLT pattern: select (icmp slt X, 1), ashr X, bitwidth-1, 1 -> scmp(X, 0)
774+ ; select (icmp slt X, 1), ashr X, bitwidth-1, 1 -> scmp(X, 0)
781775define i8 @scmp_ashr_slt_pattern (i8 %a ) {
782776; CHECK-LABEL: define i8 @scmp_ashr_slt_pattern(
783777; CHECK-SAME: i8 [[A:%.*]]) {
784- ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i8 [[A]], 7
785- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[A]], 1
786- ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMP]], i8 [[A_LOBIT]], i8 1
778+ ; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.scmp.i8.i8(i8 [[A]], i8 0)
787779; CHECK-NEXT: ret i8 [[R]]
788780;
789781 %a.lobit = ashr i8 %a , 7
790782 %cmp = icmp slt i8 %a , 1
791783 %retval = select i1 %cmp , i8 %a.lobit , i8 1
792784 ret i8 %retval
793785}
786+
787+ define i8 @scmp_ashr_slt_pattern_neg (i8 %a ) {
788+ ; CHECK-LABEL: define i8 @scmp_ashr_slt_pattern_neg(
789+ ; CHECK-SAME: i8 [[A:%.*]]) {
790+ ; CHECK-NEXT: [[A_LOBIT:%.*]] = ashr i8 [[A]], 4
791+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[A]], 1
792+ ; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[A_LOBIT]], i8 1
793+ ; CHECK-NEXT: ret i8 [[RETVAL]]
794+ ;
795+ %a.lobit = ashr i8 %a , 4
796+ %cmp = icmp slt i8 %a , 1
797+ %retval = select i1 %cmp , i8 %a.lobit , i8 1
798+ ret i8 %retval
799+ }
0 commit comments