[CVP] Remove some {s|u}add.with.overflow checks.
authorSanjoy Das <sanjoy@playingwithpointers.com>
Fri, 10 Nov 2017 19:13:35 +0000 (19:13 +0000)
committerSanjoy Das <sanjoy@playingwithpointers.com>
Fri, 10 Nov 2017 19:13:35 +0000 (19:13 +0000)
commit6fabb90765ba5c932ceec5ad7ac6816c6d5bbeff
tree84db3fc9f0422e9e61caef4bdd6ce8a489125052
parent8320a1753f044a7762cae23b8b2e0bb96c74edab
[CVP] Remove some {s|u}add.with.overflow checks.

Summary:
This adds logic to CVP to remove some overflow checks.  It uses LVI to remove
operations with at least one constant.  Specifically, this can remove many
overflow intrinsics immediately following an overflow check in the source code,
such as:

if (x < INT_MAX)
    ... x + 1 ...

Patch by Joel Galenson!

Reviewers: sanjoy, regehr

Reviewed By: sanjoy

Subscribers: fhahn, pirama, srhines, llvm-commits

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

llvm-svn: 317911
llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll [new file with mode: 0644]