OSDN Git Service

Merging r215818:
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 8 Dec 2014 09:11:48 +0000 (09:11 +0000)
committerWuZhen <wuzhen@jidemail.com>
Tue, 23 Feb 2016 11:27:10 +0000 (19:27 +0800)
commit15dda250c52f72a8521af109004ba941d45822be
treea574dabeb1aedcd770d78e68f0967bb87e85f1ba
parentd47d3958f35ecfda3cc16738920aaf73830f2e81
Merging r215818:
------------------------------------------------------------------------
r215818 | majnemer | 2014-08-16 02:23:42 -0700 (Sat, 16 Aug 2014) | 12 lines

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/branches/release_35@223645 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/Constant.h
lib/IR/Constants.cpp
lib/Transforms/InstCombine/InstCombineAddSub.cpp