summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2011-09-10 01:09:50 +0000
committerAndrew Trick <atrick@apple.com>2011-09-10 01:09:50 +0000
commita51d74fc35aafa7c609e950cfc6e39146a8280cb (patch)
tree4a29d9641356e78b7f9c662b51d46f0a051b0e70 /llvm/lib/Analysis/ScalarEvolution.cpp
parent78a812bf2d377141fe854070836426df36862852 (diff)
downloadbcm5719-llvm-a51d74fc35aafa7c609e950cfc6e39146a8280cb.tar.gz
bcm5719-llvm-a51d74fc35aafa7c609e950cfc6e39146a8280cb.zip
Set NSW/NUW flags on SCEVAddExpr when the operation is flagged as
such. I'm doing this now for completeness because I can't think of/remember any reason that it was left out. I'm not sure it will help anything, but if we don't do it we need to explain why in comments. llvm-svn: 139450
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 57c42656481..b1662a02608 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -3546,7 +3546,13 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
AddOps.push_back(Op1);
}
AddOps.push_back(getSCEV(U->getOperand(0)));
- return getAddExpr(AddOps);
+ SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap;
+ OverflowingBinaryOperator *OBO = cast<OverflowingBinaryOperator>(V);
+ if (OBO->hasNoSignedWrap())
+ setFlags(Flags, SCEV::FlagNSW);
+ if (OBO->hasNoUnsignedWrap())
+ setFlags(Flags, SCEV::FlagNUW);
+ return getAddExpr(AddOps, Flags);
}
case Instruction::Mul: {
// See the Add code above.
OpenPOWER on IntegriCloud