From: Dan Gohman Date: Mon, 18 Jun 2007 19:30:09 +0000 (+0000) Subject: In SCEVAddExpr::get, skip over any cast operands before looking for nested X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f50cd749e1504cea64a432757d49831ab0e23c70;p=oota-llvm.git 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 --- diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 3ae65286fa7..ed8ea327678 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -685,8 +685,11 @@ SCEVHandle SCEVAddExpr::get(std::vector &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(Ops[Idx])) {