summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorTim Shen <timshen91@gmail.com>2018-07-06 23:20:35 +0000
committerTim Shen <timshen91@gmail.com>2018-07-06 23:20:35 +0000
commit2ed501d6567180be986159fad6e5fd6431e8268d (patch)
tree8496c3f18c35782706eff0565c54e76fb9467a07 /llvm/lib/Analysis/ScalarEvolution.cpp
parentf89f62a68094355bd37c74456aeef6ecab3898fe (diff)
downloadbcm5719-llvm-2ed501d6567180be986159fad6e5fd6431e8268d.tar.gz
bcm5719-llvm-2ed501d6567180be986159fad6e5fd6431e8268d.zip
Revert "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)."
This reverts commit r336140. Our tests shows that LSR assert fails with it. llvm-svn: 336473
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp27
1 files changed, 7 insertions, 20 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 6480c2c076d..38bac434236 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -2244,35 +2244,22 @@ StrengthenNoWrapFlags(ScalarEvolution *SE, SCEVTypes Type,
SignOrUnsignWrap = ScalarEvolution::maskFlags(Flags, SignOrUnsignMask);
- if (SignOrUnsignWrap != SignOrUnsignMask &&
- (Type == scAddExpr || Type == scMulExpr) && Ops.size() == 2 &&
- isa<SCEVConstant>(Ops[0])) {
-
- auto Opcode = [&] {
- switch (Type) {
- case scAddExpr:
- return Instruction::Add;
- case scMulExpr:
- return Instruction::Mul;
- default:
- llvm_unreachable("Unexpected SCEV op.");
- }
- }();
+ if (SignOrUnsignWrap != SignOrUnsignMask && Type == scAddExpr &&
+ Ops.size() == 2 && isa<SCEVConstant>(Ops[0])) {
- const APInt &C = cast<SCEVConstant>(Ops[0])->getAPInt();
+ // (A + C) --> (A + C)<nsw> if the addition does not sign overflow
+ // (A + C) --> (A + C)<nuw> if the addition does not unsign overflow
- // (A <opcode> C) --> (A <opcode> C)<nsw> if the op doesn't sign overflow.
+ const APInt &C = cast<SCEVConstant>(Ops[0])->getAPInt();
if (!(SignOrUnsignWrap & SCEV::FlagNSW)) {
auto NSWRegion = ConstantRange::makeGuaranteedNoWrapRegion(
- Opcode, C, OBO::NoSignedWrap);
+ Instruction::Add, C, OBO::NoSignedWrap);
if (NSWRegion.contains(SE->getSignedRange(Ops[1])))
Flags = ScalarEvolution::setFlags(Flags, SCEV::FlagNSW);
}
-
- // (A <opcode> C) --> (A <opcode> C)<nuw> if the op doesn't unsign overflow.
if (!(SignOrUnsignWrap & SCEV::FlagNUW)) {
auto NUWRegion = ConstantRange::makeGuaranteedNoWrapRegion(
- Opcode, C, OBO::NoUnsignedWrap);
+ Instruction::Add, C, OBO::NoUnsignedWrap);
if (NUWRegion.contains(SE->getUnsignedRange(Ops[1])))
Flags = ScalarEvolution::setFlags(Flags, SCEV::FlagNUW);
}
OpenPOWER on IntegriCloud