InstCombine: Fix a potential bug in 0 - (X sdiv C) -> (X sdiv -C)
authorDavid Majnemer <david.majnemer@gmail.com>
Sat, 16 Aug 2014 09:23:42 +0000 (09:23 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Sat, 16 Aug 2014 09:23:42 +0000 (09:23 +0000)
commit3bbb4b15ae2743f2212f4856cd4eed9ef50f84ff
tree2ce2f5133a97266d5e3480f7fc4ba5c19586c8cf
parentcb698b26a108b4aa42995d629fa72231eb238f24
InstCombine: Fix a potential bug in 0 - (X sdiv C)  -> (X sdiv -C)

While *most* (X sdiv 1) operations will get caught by InstSimplify, it
is still possible for a sdiv to appear in the worklist which hasn't been
simplified yet.

This means that it is possible for 0 - (X sdiv 1) to get transformed
into (X sdiv -1); dividing by -1 can make the transform produce undef
values instead of the proper result.

Sorry for the lack of testcase, it's a bit problematic because it relies
on the exact order of operations in the worklist.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215818 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/Constant.h
lib/IR/Constants.cpp
lib/Transforms/InstCombine/InstCombineAddSub.cpp