Skip to content

Commit 9f36458

Browse files
committed
[NFC][InstCombine] Improve test coverage for ((~x) + y) + 1 -> y - x fold fold (PR42459)
So we indeed to have this fold, but only if +1 is not the last operation.. llvm-svn: 364764
1 parent c23149f commit 9f36458

File tree

1 file changed

+46
-6
lines changed

1 file changed

+46
-6
lines changed

llvm/test/Transforms/InstCombine/fold-inc-of-add-of-not-x-and-y-to-sub-x-from-y.ll

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,27 +138,67 @@ define i32 @t7(i32 %x, i32 %y) {
138138

139139
declare i32 @gen32()
140140

141-
define i32 @t8_commutative(i32 %x) {
142-
; CHECK-LABEL: @t8_commutative(
141+
define i32 @t8_commutative0(i32 %x) {
142+
; CHECK-LABEL: @t8_commutative0(
143143
; CHECK-NEXT: [[Y:%.*]] = call i32 @gen32()
144144
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
145+
; CHECK-NEXT: call void @use32(i32 [[T0]])
145146
; CHECK-NEXT: [[T1:%.*]] = add i32 [[Y]], [[T0]]
147+
; CHECK-NEXT: call void @use32(i32 [[T1]])
146148
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 1
147149
; CHECK-NEXT: ret i32 [[T2]]
148150
;
149151
%y = call i32 @gen32()
150152
%t0 = xor i32 %x, -1
153+
call void @use32(i32 %t0)
151154
%t1 = add i32 %y, %t0 ; swapped
155+
call void @use32(i32 %t1)
152156
%t2 = add i32 %t1, 1
153157
ret i32 %t2
154158
}
155159

160+
define i32 @t9_commutative1(i32 %x, i32 %y) {
161+
; CHECK-LABEL: @t9_commutative1(
162+
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
163+
; CHECK-NEXT: call void @use32(i32 [[T0]])
164+
; CHECK-NEXT: [[T1:%.*]] = sub i32 0, [[X]]
165+
; CHECK-NEXT: call void @use32(i32 [[T1]])
166+
; CHECK-NEXT: [[T2:%.*]] = sub i32 [[Y:%.*]], [[X]]
167+
; CHECK-NEXT: ret i32 [[T2]]
168+
;
169+
%t0 = xor i32 %x, -1
170+
call void @use32(i32 %t0)
171+
%t1 = add i32 %t0, 1 ; +1 is not last
172+
call void @use32(i32 %t1)
173+
%t2 = add i32 %t1, %y ;
174+
ret i32 %t2
175+
}
176+
177+
define i32 @t10_commutative2(i32 %x) {
178+
; CHECK-LABEL: @t10_commutative2(
179+
; CHECK-NEXT: [[Y:%.*]] = call i32 @gen32()
180+
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
181+
; CHECK-NEXT: call void @use32(i32 [[T0]])
182+
; CHECK-NEXT: [[T1:%.*]] = sub i32 0, [[X]]
183+
; CHECK-NEXT: call void @use32(i32 [[T1]])
184+
; CHECK-NEXT: [[T2:%.*]] = sub i32 [[Y]], [[X]]
185+
; CHECK-NEXT: ret i32 [[T2]]
186+
;
187+
%y = call i32 @gen32()
188+
%t0 = xor i32 %x, -1
189+
call void @use32(i32 %t0)
190+
%t1 = add i32 %t0, 1 ; +1 is not last
191+
call void @use32(i32 %t1)
192+
%t2 = add i32 %y, %t1 ; swapped
193+
ret i32 %t2
194+
}
195+
156196
;------------------------------------------------------------------------------;
157197
; Basic negative tests
158198
;------------------------------------------------------------------------------;
159199

160-
define i32 @n9(i32 %x, i32 %y) {
161-
; CHECK-LABEL: @n9(
200+
define i32 @n11(i32 %x, i32 %y) {
201+
; CHECK-LABEL: @n11(
162202
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], 2147483647
163203
; CHECK-NEXT: [[T1:%.*]] = add i32 [[T0]], [[Y:%.*]]
164204
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 1
@@ -170,8 +210,8 @@ define i32 @n9(i32 %x, i32 %y) {
170210
ret i32 %t2
171211
}
172212

173-
define i32 @n10(i32 %x, i32 %y) {
174-
; CHECK-LABEL: @n10(
213+
define i32 @n12(i32 %x, i32 %y) {
214+
; CHECK-LABEL: @n12(
175215
; CHECK-NEXT: [[T0:%.*]] = xor i32 [[X:%.*]], -1
176216
; CHECK-NEXT: [[T1:%.*]] = add i32 [[T0]], [[Y:%.*]]
177217
; CHECK-NEXT: [[T2:%.*]] = add i32 [[T1]], 2

0 commit comments

Comments
 (0)