summaryrefslogtreecommitdiff
path: root/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-10-09 16:35:06 +0000
committerDan Gohman <gohman@apple.com>2009-10-09 16:35:06 +0000
commit7a721956f886d465f920d06bebb64c0f0b328c39 (patch)
treeca3755c43143d5b2bfbff9ff604032b8caea7ef5 /lib/Analysis/ScalarEvolution.cpp
parent0c536bec1e601d5f73c1c1fada5aecacab7ff818 (diff)
downloadllvm-7a721956f886d465f920d06bebb64c0f0b328c39.tar.gz
llvm-7a721956f886d465f920d06bebb64c0f0b328c39.tar.bz2
llvm-7a721956f886d465f920d06bebb64c0f0b328c39.tar.xz
Revert r83606 and add comments explaining why it isn't safe.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83649 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--lib/Analysis/ScalarEvolution.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index bdf31f9a70..62f3aa1dca 100644
--- a/lib/Analysis/ScalarEvolution.cpp
+++ b/lib/Analysis/ScalarEvolution.cpp
@@ -2951,20 +2951,18 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
Operator *U = cast<Operator>(V);
switch (Opcode) {
- case Instruction::Add: {
- AddOperator *A = cast<AddOperator>(U);
+ case Instruction::Add:
+ // Don't transfer the NSW and NUW bits from the Add instruction to the
+ // Add expression, because the Instruction may be guarded by control
+ // flow and the no-overflow bits may not be valid for the expression in
+ // any context.
return getAddExpr(getSCEV(U->getOperand(0)),
- getSCEV(U->getOperand(1)),
- A->hasNoUnsignedWrap(),
- A->hasNoSignedWrap());
- }
- case Instruction::Mul: {
- MulOperator *M = cast<MulOperator>(U);
+ getSCEV(U->getOperand(1)));
+ case Instruction::Mul:
+ // Don't transfer the NSW and NUW bits from the Mul instruction to the
+ // Mul expression, as with Add.
return getMulExpr(getSCEV(U->getOperand(0)),
- getSCEV(U->getOperand(1)),
- M->hasNoUnsignedWrap(),
- M->hasNoSignedWrap());
- }
+ getSCEV(U->getOperand(1)));
case Instruction::UDiv:
return getUDivExpr(getSCEV(U->getOperand(0)),
getSCEV(U->getOperand(1)));