[llvm] e38b1f7 - [InstCombine] Add additional tests for X + Y + C u< X (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 25 03:50:23 PDT 2022


Author: Nikita Popov
Date: 2022-04-25T12:50:15+02:00
New Revision: e38b1f7d09a4e3b700125cceca4288772a25b635

URL: https://github.com/llvm/llvm-project/commit/e38b1f7d09a4e3b700125cceca4288772a25b635
DIFF: https://github.com/llvm/llvm-project/commit/e38b1f7d09a4e3b700125cceca4288772a25b635.diff

LOG: [InstCombine] Add additional tests for X + Y + C u< X (NFC)

We don't actually need the limitation for C == -1, so update test
naming accordingly, and also test a non-uniform vector constant.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/icmp-add.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/icmp-add.ll b/llvm/test/Transforms/InstCombine/icmp-add.ll
index 2993ac2c0b1a5..308adcab05391 100644
--- a/llvm/test/Transforms/InstCombine/icmp-add.ll
+++ b/llvm/test/Transforms/InstCombine/icmp-add.ll
@@ -1025,8 +1025,8 @@ define i32 @decrement_min(i32 %x) {
   ret i32 %s
 }
 
-define i1 @icmp_add_sub_1(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1(
+define i1 @icmp_add_add_C(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[A]]
@@ -1038,8 +1038,8 @@ define i1 @icmp_add_sub_1(i32 %a, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_pred(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_pred(
+define i1 @icmp_add_add_C_pred(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_pred(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i32 [[ADD2]], [[A]]
@@ -1051,8 +1051,8 @@ define i1 @icmp_add_sub_1_pred(i32 %a, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_wrong_pred(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_wrong_pred(
+define i1 @icmp_add_add_C_wrong_pred(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_wrong_pred(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i32 [[ADD2]], [[A]]
@@ -1064,34 +1064,60 @@ define i1 @icmp_add_sub_1_wrong_pred(i32 %a, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_wrong_const(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_wrong_const(
+define i1 @icmp_add_add_C_wrong_operand(i32 %a, i32 %b, i32 %c) {
+; CHECK-LABEL: @icmp_add_add_C_wrong_operand(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[A]]
+; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[C:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %add1 = add i32 %a, %b
-  %add2 = add i32 %add1, 1
-  %cmp = icmp ult i32 %add2, %a
+  %add2 = add i32 %add1, -1
+  %cmp = icmp ult i32 %add2, %c
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_wrong_operand(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @icmp_add_sub_1_wrong_operand(
+define i1 @icmp_add_add_C_
diff erent_const(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_
diff erent_const(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[C:%.*]]
+; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], 42
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[A]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %add1 = add i32 %a, %b
-  %add2 = add i32 %add1, -1
-  %cmp = icmp ult i32 %add2, %c
+  %add2 = add i32 %add1, 42
+  %cmp = icmp ult i32 %add2, %a
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_comm1(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_comm1(
+define <2 x i1> @icmp_add_add_C_vector(<2 x i8> %a, <2 x i8> %b) {
+; CHECK-LABEL: @icmp_add_add_C_vector(
+; CHECK-NEXT:    [[ADD1:%.*]] = add <2 x i8> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[ADD2:%.*]] = add <2 x i8> [[ADD1]], <i8 10, i8 20>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult <2 x i8> [[ADD2]], [[A]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %add1 = add <2 x i8> %a, %b
+  %add2 = add <2 x i8> %add1, <i8 10, i8 20>
+  %cmp = icmp ult <2 x i8> %add2, %a
+  ret <2 x i1> %cmp
+}
+
+define <2 x i1> @icmp_add_add_C_vector_undef(<2 x i8> %a, <2 x i8> %b) {
+; CHECK-LABEL: @icmp_add_add_C_vector_undef(
+; CHECK-NEXT:    [[ADD1:%.*]] = add <2 x i8> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[ADD2:%.*]] = add <2 x i8> [[ADD1]], <i8 10, i8 undef>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult <2 x i8> [[ADD2]], [[A]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %add1 = add <2 x i8> %a, %b
+  %add2 = add <2 x i8> %add1, <i8 10, i8 undef>
+  %cmp = icmp ult <2 x i8> %add2, %a
+  ret <2 x i1> %cmp
+}
+
+define i1 @icmp_add_add_C_comm1(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_comm1(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[B:%.*]], [[A:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[ADD2]], [[A]]
@@ -1103,8 +1129,8 @@ define i1 @icmp_add_sub_1_comm1(i32 %a, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_comm2(i32 %X, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_comm2(
+define i1 @icmp_add_add_C_comm2(i32 %X, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_comm2(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[X:%.*]]
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
@@ -1118,8 +1144,8 @@ define i1 @icmp_add_sub_1_comm2(i32 %X, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_comm2_pred(i32 %X, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_comm2_pred(
+define i1 @icmp_add_add_C_comm2_pred(i32 %X, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_comm2_pred(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[X:%.*]]
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
@@ -1133,8 +1159,8 @@ define i1 @icmp_add_sub_1_comm2_pred(i32 %X, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_comm2_wrong_pred(i32 %X, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_comm2_wrong_pred(
+define i1 @icmp_add_add_C_comm2_wrong_pred(i32 %X, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_comm2_wrong_pred(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[X:%.*]]
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
@@ -1148,8 +1174,8 @@ define i1 @icmp_add_sub_1_comm2_wrong_pred(i32 %X, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_comm3(i32 %X, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_comm3(
+define i1 @icmp_add_add_C_comm3(i32 %X, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_comm3(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[X:%.*]]
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
@@ -1163,8 +1189,8 @@ define i1 @icmp_add_sub_1_comm3(i32 %X, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_extra_use1(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_extra_use1(
+define i1 @icmp_add_add_C_extra_use1(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_extra_use1(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1
 ; CHECK-NEXT:    call void @use(i32 [[ADD2]])
@@ -1178,8 +1204,8 @@ define i1 @icmp_add_sub_1_extra_use1(i32 %a, i32 %b) {
   ret i1 %cmp
 }
 
-define i1 @icmp_add_sub_1_extra_use2(i32 %a, i32 %b) {
-; CHECK-LABEL: @icmp_add_sub_1_extra_use2(
+define i1 @icmp_add_add_C_extra_use2(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp_add_add_C_extra_use2(
 ; CHECK-NEXT:    [[ADD1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    call void @use(i32 [[ADD1]])
 ; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[ADD1]], -1


        


More information about the llvm-commits mailing list