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
This commit is contained in:
David Majnemer
2014-08-16 09:23:42 +00:00
parent cb698b26a1
commit 3bbb4b15ae
3 changed files with 26 additions and 1 deletions

View File

@@ -53,6 +53,9 @@ public:
/// getNullValue.
bool isNullValue() const;
/// \brief Returns true if the value is one.
bool isOneValue() const;
/// isAllOnesValue - Return true if this is the value that would be returned by
/// getAllOnesValue.
bool isAllOnesValue() const;