From f50cd749e1504cea64a432757d49831ab0e23c70 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 18 Jun 2007 19:30:09 +0000 Subject: 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 --- lib/Analysis/ScalarEvolution.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lib/Analysis/ScalarEvolution.cpp') 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 &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])) { -- cgit v1.2.3-18-g5258