diff --git a/lib/Analysis/InductionVariable.cpp b/lib/Analysis/InductionVariable.cpp index b6025294948..8f622973f96 100644 --- a/lib/Analysis/InductionVariable.cpp +++ b/lib/Analysis/InductionVariable.cpp @@ -136,10 +136,14 @@ InductionVariable::InductionVariable(PHINode *P, LoopInfo *LoopInfo): End(0) { if (Constant *CV = dyn_cast(V)) Step = ConstantExpr::get(Instruction::Sub, Zero, CV); else if (Instruction *I = dyn_cast(V)) { + BasicBlock::iterator InsertPt = I; + for (++InsertPt; isa(InsertPt); ++InsertPt) + /*empty*/; Step = BinaryOperator::create(Instruction::Sub, Zero, V, - V->getName()+".neg", I->getNext()); + V->getName()+".neg", InsertPt); } else { + // Must be loop invariant Step = BinaryOperator::create(Instruction::Sub, Zero, V, V->getName()+".neg", Phi->getParent()->getParent()->begin()->begin());