[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