diff options
author | Dan Gohman <gohman@apple.com> | 2007-06-18 19:30:09 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2007-06-18 19:30:09 +0000 |
commit | f50cd749e1504cea64a432757d49831ab0e23c70 (patch) | |
tree | f712460042085b259d2d270682c32e7f79404fbf /lib/Analysis/ScalarEvolution.cpp | |
parent | 03265f98a3b2f49ecd0c01b868e0a9c844c3eeb7 (diff) |
In SCEVAddExpr::get, skip over any cast operands before looking for nested
add operands after constant operands. The recent change to recognize
sign-extend expressions caused this to be exposed more often.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37628 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | lib/Analysis/ScalarEvolution.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 3ae65286fa..ed8ea32767 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -685,8 +685,11 @@ SCEVHandle SCEVAddExpr::get(std::vector<SCEVHandle> &Ops) { return SCEVAddExpr::get(Ops); } - // Okay, now we know the first non-constant operand. If there are add - // operands they would be next. + // Now we know the first non-constant operand. Skip past any cast SCEVs. + while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddExpr) + ++Idx; + + // If there are add operands they would be next. if (Idx < Ops.size()) { bool DeletedAdd = false; while (SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[Idx])) { |