aboutsummaryrefslogtreecommitdiffstats
path: root/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
commit543376743c900806109c75d4fd12c4ba01020cfe (patch)
tree6ae92f15cb24eec26e1eda8554333060e5c187fd /lib/Analysis/ScalarEvolution.cpp
parent2e3734e2d948af7c61c1957742811cdfca0e2516 (diff)
downloadexternal_llvm-543376743c900806109c75d4fd12c4ba01020cfe.zip
external_llvm-543376743c900806109c75d4fd12c4ba01020cfe.tar.gz
external_llvm-543376743c900806109c75d4fd12c4ba01020cfe.tar.bz2
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139450 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--lib/Analysis/ScalarEvolution.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index 57c4265..b1662a0 100644
--- a/lib/Analysis/ScalarEvolution.cpp
+++ b/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.