diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index fceffbc3cea6d..056e4f31981a7 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -437,8 +437,10 @@ Function::Function(FunctionType *Ty, LinkageTypes Linkage, unsigned AddrSpace, if (Ty->getNumParams()) setValueSubclassData(1); // Set the "has lazy arguments" bit. - if (ParentModule) + if (ParentModule) { ParentModule->getFunctionList().push_back(this); + IsNewDbgInfoFormat = ParentModule->IsNewDbgInfoFormat; + } HasLLVMReservedName = getName().starts_with("llvm."); // Ensure intrinsics have the right parameter attributes. diff --git a/llvm/lib/Transforms/IPO/IROutliner.cpp b/llvm/lib/Transforms/IPO/IROutliner.cpp index 8e6d0e814372d..48470bc71ff38 100644 --- a/llvm/lib/Transforms/IPO/IROutliner.cpp +++ b/llvm/lib/Transforms/IPO/IROutliner.cpp @@ -721,6 +721,12 @@ static void moveFunctionData(Function &Old, Function &New, std::vector DebugInsts; for (Instruction &Val : CurrBB) { + // Since debug-info originates from many different locations in the + // program, it will cause incorrect reporting from a debugger if we keep + // the same debug instructions. Drop non-intrinsic DPValues here, + // collect intrinsics for removal later. + Val.dropDbgValues(); + // We must handle the scoping of called functions differently than // other outlined instructions. if (!isa(&Val)) { @@ -744,10 +750,7 @@ static void moveFunctionData(Function &Old, Function &New, // From this point we are only handling call instructions. CallInst *CI = cast(&Val); - // We add any debug statements here, to be removed after. Since the - // instructions originate from many different locations in the program, - // it will cause incorrect reporting from a debugger if we keep the - // same debug instructions. + // Collect debug intrinsics for later removal. if (isa(CI)) { DebugInsts.push_back(&Val); continue;