llvm-6502/test/Transforms/InstCombine/sdiv-1.ll
Bill Wendling e1196d6d3e Instcombine was illegally transforming -X/C into X/-C when either X or C
overflowed on negation. This commit checks to make sure that neithe C nor X
overflows. This requires that the RHS of X (a subtract instruction) be a
constant integer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60275 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-30 03:42:12 +00:00

23 lines
464 B
LLVM

; RUN: llvm-as < %s | opt -instcombine -inline | llvm-dis | grep {715827882} | count 2
; PR3142
define i32 @a(i32 %X) nounwind readnone {
entry:
%0 = sub i32 0, %X
%1 = sdiv i32 %0, -3
ret i32 %1
}
define i32 @b(i32 %X) nounwind readnone {
entry:
%0 = call i32 @a(i32 -2147483648)
ret i32 %0
}
define i32 @c(i32 %X) nounwind readnone {
entry:
%0 = sub i32 0, -2147483648
%1 = sdiv i32 %0, -3
ret i32 %1
}