Index: include/llvm/IR/BasicBlock.h =================================================================== --- include/llvm/IR/BasicBlock.h +++ include/llvm/IR/BasicBlock.h @@ -430,6 +430,16 @@ } }; +class DbgInfoIntrinsic; + +/// Increment \p It until it points to a non-debug instruction and return the +/// resulting iterator. +template inline IterT skipDebugInstructionsForward(IterT It) { + while (isa(&*It)) + It++; + return It; +} + // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef) Index: lib/Analysis/ScalarEvolutionExpander.cpp =================================================================== --- lib/Analysis/ScalarEvolutionExpander.cpp +++ lib/Analysis/ScalarEvolutionExpander.cpp @@ -162,7 +162,8 @@ // Cast the instruction immediately after the instruction. Instruction *I = cast(V); - BasicBlock::iterator IP = findInsertPointAfter(I, Builder.GetInsertBlock()); + BasicBlock::iterator IP = skipDebugInstructionsForward( + findInsertPointAfter(I, Builder.GetInsertBlock())); return ReuseOrCreateCast(I, Ty, Op, IP); } @@ -1480,8 +1481,8 @@ NewOps[i] = SE.getAnyExtendExpr(S->op_begin()[i], CanonicalIV->getType()); Value *V = expand(SE.getAddRecExpr(NewOps, S->getLoop(), S->getNoWrapFlags(SCEV::FlagNW))); - BasicBlock::iterator NewInsertPt = - findInsertPointAfter(cast(V), Builder.GetInsertBlock()); + BasicBlock::iterator NewInsertPt = skipDebugInstructionsForward( + findInsertPointAfter(cast(V), Builder.GetInsertBlock())); V = expandCodeFor(SE.getTruncateExpr(SE.getUnknown(V), Ty), nullptr, &*NewInsertPt); return V;