From: David Blaikie Date: Fri, 31 Oct 2014 21:57:02 +0000 (+0000) Subject: Sink most of DwarfDebug::constructAbstractSubprogramScopeDIE into DwarfCompileUnit X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=021153f536cd97d0403928642f39624f04b922d0 Sink most of DwarfDebug::constructAbstractSubprogramScopeDIE into DwarfCompileUnit git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221005 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 6b648df28a1..ceb2a12bf7a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -586,8 +586,12 @@ DIE *DwarfCompileUnit::createAndAddScopeChildren(LexicalScope *Scope, return ObjectPointer; } -DIE & +void DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) { + DIE *&AbsDef = DD->getAbstractSPDies()[Scope->getScopeNode()]; + if (AbsDef) + return; + DISubprogram SP(Scope->getScopeNode()); DIE *ContextDIE; @@ -604,15 +608,14 @@ DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) { // Passing null as the associated DIDescriptor because the abstract definition // shouldn't be found by lookup. - DIE &AbsDef = - createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, DIDescriptor()); - applySubprogramAttributesToDefinition(SP, AbsDef); + AbsDef = + &createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, DIDescriptor()); + applySubprogramAttributesToDefinition(SP, *AbsDef); if (getCUNode().getEmissionKind() != DIBuilder::LineTablesOnly) - addUInt(AbsDef, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); - if (DIE *ObjectPointer = createAndAddScopeChildren(Scope, AbsDef)) - addDIEEntry(AbsDef, dwarf::DW_AT_object_pointer, *ObjectPointer); - return AbsDef; + addUInt(*AbsDef, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); + if (DIE *ObjectPointer = createAndAddScopeChildren(Scope, *AbsDef)) + addDIEEntry(*AbsDef, dwarf::DW_AT_object_pointer, *ObjectPointer); } std::unique_ptr diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h index 855ca39031e..f6b69ce2aa8 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -121,7 +121,7 @@ public: DIE *createAndAddScopeChildren(LexicalScope *Scope, DIE &ScopeDIE); - DIE &constructAbstractSubprogramScopeDIE(LexicalScope *Scope); + void constructAbstractSubprogramScopeDIE(LexicalScope *Scope); /// \brief Construct import_module DIE. std::unique_ptr diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index f9ef6d09ff5..0a035053119 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -337,15 +337,11 @@ void DwarfDebug::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) { const MDNode *SP = Scope->getScopeNode(); - DIE *&AbsDef = AbstractSPDies[SP]; - if (AbsDef) - return; - ProcessedSPNodes.insert(SP); // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram // was inlined from another compile unit. - AbsDef = &SPMap[SP]->constructAbstractSubprogramScopeDIE(Scope); + SPMap[SP]->constructAbstractSubprogramScopeDIE(Scope); } void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const {