From c6b0c4b9e2ba2b86a5ec96f76fcf1f0f281f12a6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 10 Mar 2004 21:42:19 +0000 Subject: [PATCH] Fix PR284: [indvars] Induction variable analysis violates LLVM invariants git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12275 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/InductionVariable.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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());