diff options
author | Andrew Trick <atrick@apple.com> | 2011-09-10 01:09:50 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2011-09-10 01:09:50 +0000 |
commit | a51d74fc35aafa7c609e950cfc6e39146a8280cb (patch) | |
tree | 4a29d9641356e78b7f9c662b51d46f0a051b0e70 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 78a812bf2d377141fe854070836426df36862852 (diff) | |
download | bcm5719-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.cpp | 8 |
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. |