Skip to content

Commit e4448a5

Browse files
committed
[InstCombine] Add tests for folding (icmp eq/ne (add nuw x, y), 0); NFC
1 parent b65ab0b commit e4448a5

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

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

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,22 +1802,17 @@ define i1 @test4(i32 %a) {
18021802
ret i1 %c
18031803
}
18041804

1805-
define { i32, i1 } @test4multiuse(i32 %a) {
1806-
; CHECK-LABEL: @test4multiuse(
1807-
; CHECK-NEXT: [[B:%.*]] = add nsw i32 [[A:%.*]], -2147483644
1808-
; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[A]], 2147483640
1809-
; CHECK-NEXT: [[TMP:%.*]] = insertvalue { i32, i1 } undef, i32 [[B]], 0
1810-
; CHECK-NEXT: [[RES:%.*]] = insertvalue { i32, i1 } [[TMP]], i1 [[C]], 1
1811-
; CHECK-NEXT: ret { i32, i1 } [[RES]]
1805+
define {
1806+
i32, i1 } @test4multiuse(i32 %a) {
18121807
;
18131808

1814-
%b = add nsw i32 %a, -2147483644
1815-
%c = icmp slt i32 %b, -4
1809+
%b = add nsw i32 %a, -2147483644
1810+
%c = icmp slt i32 %b, -4
18161811

1817-
%tmp = insertvalue { i32, i1 } undef, i32 %b, 0
1818-
%res = insertvalue { i32, i1 } %tmp, i1 %c, 1
1812+
%tmp = insertvalue { i32, i1 } undef, i32 %b, 0
1813+
%res = insertvalue { i32, i1 } %tmp, i1 %c, 1
18191814

1820-
ret { i32, i1 } %res
1815+
ret { i32, i1 } %res
18211816
}
18221817

18231818
define <2 x i1> @test4vec(<2 x i32> %a) {
@@ -2857,7 +2852,7 @@ define i1 @icmp_add_add_C_comm2(i32 %X, i32 %b) {
28572852
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[A]], [[TMP1]]
28582853
; CHECK-NEXT: ret i1 [[CMP]]
28592854
;
2860-
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
2855+
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
28612856
%add1 = add i32 %a, %b
28622857
%add2 = add i32 %add1, -1
28632858
%cmp = icmp ugt i32 %a, %add2
@@ -2871,7 +2866,7 @@ define i1 @icmp_add_add_C_comm2_pred(i32 %X, i32 %b) {
28712866
; CHECK-NEXT: [[CMP:%.*]] = icmp ule i32 [[A]], [[TMP1]]
28722867
; CHECK-NEXT: ret i1 [[CMP]]
28732868
;
2874-
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
2869+
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
28752870
%add1 = add i32 %a, %b
28762871
%add2 = add i32 %add1, -1
28772872
%cmp = icmp ule i32 %a, %add2
@@ -2886,7 +2881,7 @@ define i1 @icmp_add_add_C_comm2_wrong_pred(i32 %X, i32 %b) {
28862881
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A]], [[ADD2]]
28872882
; CHECK-NEXT: ret i1 [[CMP]]
28882883
;
2889-
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
2884+
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
28902885
%add1 = add i32 %a, %b
28912886
%add2 = add i32 %add1, -1
28922887
%cmp = icmp ult i32 %a, %add2
@@ -2900,7 +2895,7 @@ define i1 @icmp_add_add_C_comm3(i32 %X, i32 %b) {
29002895
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[A]], [[TMP1]]
29012896
; CHECK-NEXT: ret i1 [[CMP]]
29022897
;
2903-
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
2898+
%a = udiv i32 42, %X ; thwart complexity-based canonicalization
29042899
%add1 = add i32 %b, %a
29052900
%add2 = add i32 %add1, -1
29062901
%cmp = icmp ugt i32 %a, %add2
@@ -3003,4 +2998,28 @@ define i1 @icmp_dec_notnonzero(i8 %x) {
30032998
ret i1 %c
30042999
}
30053000

3001+
define i1 @icmp_addnuw_nonzero(i8 %x, i8 %y) {
3002+
; CHECK-LABEL: @icmp_addnuw_nonzero(
3003+
; CHECK-NEXT: [[I:%.*]] = sub i8 0, [[Y:%.*]]
3004+
; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[I]], [[X:%.*]]
3005+
; CHECK-NEXT: ret i1 [[C]]
3006+
;
3007+
%i = add nuw i8 %x, %y
3008+
%c = icmp eq i8 %i, 0
3009+
ret i1 %c
3010+
}
3011+
3012+
define i1 @icmp_addnuw_nonzero_fail_multiuse(i32 %x, i32 %y) {
3013+
; CHECK-LABEL: @icmp_addnuw_nonzero_fail_multiuse(
3014+
; CHECK-NEXT: [[I:%.*]] = add nuw i32 [[X:%.*]], [[Y:%.*]]
3015+
; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[I]], 0
3016+
; CHECK-NEXT: call void @use(i32 [[I]])
3017+
; CHECK-NEXT: ret i1 [[C]]
3018+
;
3019+
%i = add nuw i32 %x, %y
3020+
%c = icmp eq i32 %i, 0
3021+
call void @use(i32 %i)
3022+
ret i1 %c
3023+
}
3024+
30063025
declare void @llvm.assume(i1)

0 commit comments

Comments
 (0)