Sink DwarfDebug::createAndAddScopeChildren down into DwarfCompileUnit.

llvm-svn: 219437
This commit is contained in:
David Blaikie 2014-10-09 20:26:15 +00:00
parent 1d072348cf
commit 78b65b6f2c
4 changed files with 17 additions and 19 deletions

View File

@ -599,8 +599,7 @@ void DwarfCompileUnit::constructSubprogramScopeDIE(LexicalScope *Scope) {
// Collect lexical scope children first.
// ObjectPointer might be a local (non-argument) local variable if it's a
// block's synthetic this pointer.
if (DIE *BlockObjPtr =
DD->createAndAddScopeChildren(*this, Scope, ScopeDIE)) {
if (DIE *BlockObjPtr = createAndAddScopeChildren(Scope, ScopeDIE)) {
assert(!ObjectPointer && "multiple object pointers can't be described");
ObjectPointer = BlockObjPtr;
}
@ -609,4 +608,17 @@ void DwarfCompileUnit::constructSubprogramScopeDIE(LexicalScope *Scope) {
addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer, *ObjectPointer);
}
DIE *DwarfCompileUnit::createAndAddScopeChildren(LexicalScope *Scope,
DIE &ScopeDIE) {
// We create children when the scope DIE is not null.
SmallVector<std::unique_ptr<DIE>, 8> Children;
DIE *ObjectPointer = createScopeChildrenDIE(Scope, Children);
// Add children
for (auto &I : Children)
ScopeDIE.addChild(std::move(I));
return ObjectPointer;
}
} // end llvm namespace

View File

@ -118,6 +118,8 @@ public:
/// \brief Construct a DIE for this subprogram scope.
void constructSubprogramScopeDIE(LexicalScope *Scope);
DIE *createAndAddScopeChildren(LexicalScope *Scope, DIE &ScopeDIE);
};
} // end llvm namespace

View File

@ -330,19 +330,6 @@ bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
return !getLabelAfterInsn(Ranges.front().second);
}
DIE *DwarfDebug::createAndAddScopeChildren(DwarfCompileUnit &TheCU,
LexicalScope *Scope, DIE &ScopeDIE) {
// We create children when the scope DIE is not null.
SmallVector<std::unique_ptr<DIE>, 8> Children;
DIE *ObjectPointer = TheCU.createScopeChildrenDIE(Scope, Children);
// Add children
for (auto &I : Children)
ScopeDIE.addChild(std::move(I));
return ObjectPointer;
}
void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &TheCU,
LexicalScope *Scope) {
assert(Scope && Scope->getScopeNode());
@ -380,7 +367,7 @@ void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &TheCU,
if (TheCU.getCUNode().getEmissionKind() != DIBuilder::LineTablesOnly)
SPCU.addUInt(*AbsDef, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
if (DIE *ObjectPointer = createAndAddScopeChildren(SPCU, Scope, *AbsDef))
if (DIE *ObjectPointer = SPCU.createAndAddScopeChildren(Scope, *AbsDef))
SPCU.addDIEEntry(*AbsDef, dwarf::DW_AT_object_pointer, *ObjectPointer);
}

View File

@ -682,9 +682,6 @@ public:
SmallVector<DbgVariable *, 8> &getCurrentFnArguments() {
return CurrentFnArguments;
}
DIE *createAndAddScopeChildren(DwarfCompileUnit &TheCU, LexicalScope *Scope,
DIE &ScopeDIE);
};
} // End of namespace llvm