Index: llvm/trunk/include/llvm/IR/DebugInfo.h =================================================================== --- llvm/trunk/include/llvm/IR/DebugInfo.h +++ llvm/trunk/include/llvm/IR/DebugInfo.h @@ -39,11 +39,6 @@ /// \brief Find subprogram that is enclosing this scope. DISubprogram *getDISubprogram(const MDNode *Scope); -/// \brief Find debug info for a given function. -/// -/// \returns a valid subprogram, if found. Otherwise, return \c nullptr. -DISubprogram *getDISubprogram(const Function *F); - /// \brief Generate map by visiting all retained types. DITypeIdentifierMap generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes); Index: llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp =================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -412,7 +412,7 @@ assert(Fn); StringRef FuncName; - if (auto *SP = getDISubprogram(GV)) + if (auto *SP = GV->getSubprogram()) FuncName = SP->getDisplayName(); // If our DISubprogram name is empty, use the mangled name. @@ -752,7 +752,7 @@ assert(FnDebugInfo.count(GV)); assert(CurFn == &FnDebugInfo[GV]); - collectVariableInfo(getDISubprogram(GV)); + collectVariableInfo(GV->getSubprogram()); DebugHandlerBase::endFunction(MF); Index: llvm/trunk/lib/IR/DebugInfo.cpp =================================================================== --- llvm/trunk/lib/IR/DebugInfo.cpp +++ llvm/trunk/lib/IR/DebugInfo.cpp @@ -38,23 +38,6 @@ return nullptr; } -DISubprogram *llvm::getDISubprogram(const Function *F) { - // We look for the first instr that has a debug annotation leading back to F. - for (auto &BB : *F) { - auto Inst = std::find_if(BB.begin(), BB.end(), [](const Instruction &Inst) { - return Inst.getDebugLoc(); - }); - if (Inst == BB.end()) - continue; - DebugLoc DLoc = Inst->getDebugLoc(); - const MDNode *Scope = DLoc.getInlinedAtScope(); - auto *Subprogram = getDISubprogram(Scope); - return Subprogram->describes(F) ? Subprogram : nullptr; - } - - return nullptr; -} - DITypeIdentifierMap llvm::generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes) { DITypeIdentifierMap Map; Index: llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp =================================================================== --- llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp +++ llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp @@ -1076,7 +1076,7 @@ /// \returns the line number where \p F is defined. If it returns 0, /// it means that there is no debug information available for \p F. unsigned SampleProfileLoader::getFunctionLoc(Function &F) { - if (DISubprogram *S = getDISubprogram(&F)) + if (DISubprogram *S = F.getSubprogram()) return S->getLine(); // If the start of \p F is missing, emit a diagnostic to inform the user @@ -1182,7 +1182,7 @@ unsigned Coverage = CoverageTracker.computeCoverage(Used, Total); if (Coverage < SampleProfileRecordCoverage) { F.getContext().diagnose(DiagnosticInfoSampleProfile( - getDISubprogram(&F)->getFilename(), getFunctionLoc(F), + F.getSubprogram()->getFilename(), getFunctionLoc(F), Twine(Used) + " of " + Twine(Total) + " available profile records (" + Twine(Coverage) + "%) were applied", DS_Warning)); @@ -1195,7 +1195,7 @@ unsigned Coverage = CoverageTracker.computeCoverage(Used, Total); if (Coverage < SampleProfileSampleCoverage) { F.getContext().diagnose(DiagnosticInfoSampleProfile( - getDISubprogram(&F)->getFilename(), getFunctionLoc(F), + F.getSubprogram()->getFilename(), getFunctionLoc(F), Twine(Used) + " of " + Twine(Total) + " available profile samples (" + Twine(Coverage) + "%) were applied", DS_Warning)); Index: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp =================================================================== --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -1891,7 +1891,7 @@ int StackMallocIdx = -1; DebugLoc EntryDebugLocation; - if (auto SP = getDISubprogram(&F)) + if (auto SP = F.getSubprogram()) EntryDebugLocation = DebugLoc::get(SP->getScopeLine(), 0, SP); Instruction *InsBefore = AllocaVec[0]; Index: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp =================================================================== --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -493,7 +493,7 @@ bool IsEntryBB = &BB == &F.getEntryBlock(); DebugLoc EntryLoc; if (IsEntryBB) { - if (auto SP = getDISubprogram(&F)) + if (auto SP = F.getSubprogram()) EntryLoc = DebugLoc::get(SP->getScopeLine(), 0, SP); // Keep static allocas and llvm.localescape calls in the entry block. Even // if we aren't splitting the block, it's nice for allocas to be before Index: llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp +++ llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp @@ -99,11 +99,6 @@ return new AddDiscriminators(); } -static bool hasDebugInfo(const Function &F) { - DISubprogram *S = getDISubprogram(&F); - return S != nullptr; -} - /// \brief Assign DWARF discriminators. /// /// To assign discriminators, we examine the boundaries of every @@ -161,7 +156,7 @@ // Simlarly, if the function has no debug info, do nothing. // Finally, if this module is built with dwarf versions earlier than 4, // do nothing (discriminator support is a DWARF 4 feature). - if (NoDiscriminators || !hasDebugInfo(F) || + if (NoDiscriminators || !F.getSubprogram() || F.getParent()->getDwarfVersion() < 4) return false; Index: llvm/trunk/test/Transforms/AddDiscriminators/call.ll =================================================================== --- llvm/trunk/test/Transforms/AddDiscriminators/call.ll +++ llvm/trunk/test/Transforms/AddDiscriminators/call.ll @@ -8,7 +8,7 @@ ; #5 } ; Function Attrs: uwtable -define void @_Z3foov() #0 { +define void @_Z3foov() #0 !dbg !4 { call void @_Z3barv(), !dbg !10 ; CHECK: call void @_Z3barv(), !dbg ![[CALL0:[0-9]+]] call void @_Z3barv(), !dbg !11