diff options
| author | Max Kazantsev <max.kazantsev@azul.com> | 2017-11-23 06:14:39 +0000 |
|---|---|---|
| committer | Max Kazantsev <max.kazantsev@azul.com> | 2017-11-23 06:14:39 +0000 |
| commit | 716e647d74a19b9a0f3066989276988f6e0d0fc4 (patch) | |
| tree | 096a1146be844995b672a40282b18fcb746314bf | |
| parent | 69b903eecb7720279850768a8cca4ac7eb2aeede (diff) | |
| download | bcm5719-llvm-716e647d74a19b9a0f3066989276988f6e0d0fc4.tar.gz bcm5719-llvm-716e647d74a19b9a0f3066989276988f6e0d0fc4.zip | |
[IRCE][NFC] Add no wrap flags to no-wrapping SCEV calculation
In a lambda where we expect to have result within bounds, add respective `nsw/nuw` flags to
help SCEV just in case if it fails to figure them out on its own.
Differential Revision: https://reviews.llvm.org/D40168
llvm-svn: 318898
| -rw-r--r-- | llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp index 6e02e38a28f..5c4d55bfbb2 100644 --- a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp +++ b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp @@ -1667,7 +1667,8 @@ InductiveRangeCheck::computeSafeIterationSpace( // Rule 3: Y <s (X - SINT_MAX) ---> (X - SINT_MAX). // It gives us smax(Y, X - SINT_MAX) to substract in all cases. const SCEV *XMinusSIntMax = SE.getMinusSCEV(X, SIntMax); - return SE.getMinusSCEV(X, SE.getSMaxExpr(Y, XMinusSIntMax)); + return SE.getMinusSCEV(X, SE.getSMaxExpr(Y, XMinusSIntMax), + SCEV::FlagNSW); } else // X is a number from unsigned range, Y is interpreted as signed. // Even if Y is SINT_MIN, (X - Y) does not reach UINT_MAX. So the only @@ -1679,7 +1680,7 @@ InductiveRangeCheck::computeSafeIterationSpace( // If 0 <= X < Y, we should stop at 0 and can only substract X. // Rule 3: Y >s X ---> X. // It gives us smin(X, Y) to substract in all cases. - return SE.getMinusSCEV(X, SE.getSMinExpr(X, Y)); + return SE.getMinusSCEV(X, SE.getSMinExpr(X, Y), SCEV::FlagNUW); }; const SCEV *M = SE.getMinusSCEV(C, A); const SCEV *Zero = SE.getZero(M->getType()); |

