Sink most of DwarfDebug::constructAbstractSubprogramScopeDIE into DwarfCompileUnit

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221005 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie 2014-10-31 21:57:02 +00:00
parent 03fb370534
commit 021153f536
3 changed files with 13 additions and 14 deletions

View File

@ -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<DIE>

View File

@ -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<DIE>

View File

@ -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 {