Skip to content

Commit 3c3fc4c

Browse files
committed
[InstCombine] Add nsw tests for A + -B fold (NFC)
1 parent 14d57e2 commit 3c3fc4c

File tree

1 file changed

+40
-2
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+40
-2
lines changed

llvm/test/Transforms/InstCombine/add.ll

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,54 @@ define i32 @test3(i32 %A) {
9999
}
100100

101101
; D = B + -A = B - A
102-
define i32 @test4(i32 %A, i32 %B) {
102+
define i32 @test4(i32 %A, i32 %BB) {
103103
; CHECK-LABEL: @test4(
104-
; CHECK-NEXT: [[D:%.*]] = sub i32 [[B:%.*]], [[A:%.*]]
104+
; CHECK-NEXT: [[B:%.*]] = xor i32 [[BB:%.*]], 1
105+
; CHECK-NEXT: [[D:%.*]] = sub i32 [[B]], [[A:%.*]]
105106
; CHECK-NEXT: ret i32 [[D]]
106107
;
108+
%B = xor i32 %BB, 1 ; thwart complexity-based canonicalization
107109
%C = sub i32 0, %A
108110
%D = add i32 %B, %C
109111
ret i32 %D
110112
}
111113

114+
define i32 @test4_both_nsw(i32 %A, i32 %BB) {
115+
; CHECK-LABEL: @test4_both_nsw(
116+
; CHECK-NEXT: [[B:%.*]] = xor i32 [[BB:%.*]], 1
117+
; CHECK-NEXT: [[D:%.*]] = sub i32 [[B]], [[A:%.*]]
118+
; CHECK-NEXT: ret i32 [[D]]
119+
;
120+
%B = xor i32 %BB, 1 ; thwart complexity-based canonicalization
121+
%C = sub nsw i32 0, %A
122+
%D = add nsw i32 %B, %C
123+
ret i32 %D
124+
}
125+
126+
define i32 @test4_neg_nsw(i32 %A, i32 %BB) {
127+
; CHECK-LABEL: @test4_neg_nsw(
128+
; CHECK-NEXT: [[B:%.*]] = xor i32 [[BB:%.*]], 1
129+
; CHECK-NEXT: [[D:%.*]] = sub i32 [[B]], [[A:%.*]]
130+
; CHECK-NEXT: ret i32 [[D]]
131+
;
132+
%B = xor i32 %BB, 1 ; thwart complexity-based canonicalization
133+
%C = sub nsw i32 0, %A
134+
%D = add i32 %B, %C
135+
ret i32 %D
136+
}
137+
138+
define i32 @test4_add_nsw(i32 %A, i32 %BB) {
139+
; CHECK-LABEL: @test4_add_nsw(
140+
; CHECK-NEXT: [[B:%.*]] = xor i32 [[BB:%.*]], 1
141+
; CHECK-NEXT: [[D:%.*]] = sub i32 [[B]], [[A:%.*]]
142+
; CHECK-NEXT: ret i32 [[D]]
143+
;
144+
%B = xor i32 %BB, 1 ; thwart complexity-based canonicalization
145+
%C = sub i32 0, %A
146+
%D = add nsw i32 %B, %C
147+
ret i32 %D
148+
}
149+
112150
; D = -A + B = B - A
113151
define i32 @test5(i32 %A, i32 %B) {
114152
; CHECK-LABEL: @test5(

0 commit comments

Comments
 (0)