[CorrelatedValuePropagation] Mark subs that we know not to wrap with nuw/nsw.
authorLuqman Aden <me@luqman.ca>
Sat, 20 Apr 2019 13:14:18 +0000 (13:14 +0000)
committerLuqman Aden <me@luqman.ca>
Sat, 20 Apr 2019 13:14:18 +0000 (13:14 +0000)
commit2993661cc0e5d7f6d15e071bfcd047592aef6675
treea03c0526995394a5e62b94507cfbdec5a2599069
parentd3b2682351184c8a2aacb40ae0b62888ff847478
[CorrelatedValuePropagation] Mark subs that we know not to wrap with nuw/nsw.

Summary:
Teach CorrelatedValuePropagation to also handle sub instructions in addition to add. Relatively simple since makeGuaranteedNoWrapRegion already understood sub instructions. Only subtle change is which range is passed as "Other" to that function, since sub isn't commutative.

Note that CorrelatedValuePropagation::processAddSub is still hidden behind a default-off flag as IndVarSimplify hasn't yet been fixed to strip the added nsw/nuw flags and causes a miscompile. (PR31181)

Reviewers: sanjoy, apilipenko, nikic

Reviewed By: nikic

Subscribers: hiraditya, jfb, jdoerfert, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D60036

llvm-svn: 358816
llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
llvm/test/Transforms/CorrelatedValuePropagation/add.ll
llvm/test/Transforms/CorrelatedValuePropagation/sub.ll