summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-10-08 22:23:10 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-10-08 22:23:10 +0000
commitf76aeaec66aaa6d8e4fc2e13d1dfb63249ff5652 (patch)
treebe0d00b264316048dcd13833a71a3dc4e1b06739 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
parent9c65b1355c05ddaa6ac17bb0ad5b63acff6db997 (diff)
downloadbcm5719-llvm-f76aeaec66aaa6d8e4fc2e13d1dfb63249ff5652.tar.gz
bcm5719-llvm-f76aeaec66aaa6d8e4fc2e13d1dfb63249ff5652.zip
DebugInfo: The rest of pushing DwarfDebug::constructScopeDIE down into DwarfCompileUnit
Funnily enough, I copied it, but didn't actually remove the original in r219345. Let's do that. llvm-svn: 219346
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp69
1 files changed, 1 insertions, 68 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 28ea3104f00..e3956c93ecd 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -444,7 +444,7 @@ DIE *DwarfDebug::createScopeChildrenDIE(
unsigned ChildCountWithoutScopes = Children.size();
for (LexicalScope *LS : Scope->getChildren())
- constructScopeDIE(TheCU, LS, Children);
+ TheCU.constructScopeDIE(LS, Children);
if (ChildScopeCount)
*ChildScopeCount = Children.size() - ChildCountWithoutScopes;
@@ -548,73 +548,6 @@ void DwarfDebug::constructSubprogramScopeDIE(DwarfCompileUnit &TheCU,
TheCU.addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer, *ObjectPointer);
}
-// Construct a DIE for this scope.
-void DwarfDebug::constructScopeDIE(
- DwarfCompileUnit &TheCU, LexicalScope *Scope,
- SmallVectorImpl<std::unique_ptr<DIE>> &FinalChildren) {
- if (!Scope || !Scope->getScopeNode())
- return;
-
- DIScope DS(Scope->getScopeNode());
-
- assert((Scope->getInlinedAt() || !DS.isSubprogram()) &&
- "Only handle inlined subprograms here, use "
- "constructSubprogramScopeDIE for non-inlined "
- "subprograms");
-
- SmallVector<std::unique_ptr<DIE>, 8> Children;
-
- // We try to create the scope DIE first, then the children DIEs. This will
- // avoid creating un-used children then removing them later when we find out
- // the scope DIE is null.
- std::unique_ptr<DIE> ScopeDIE;
- if (Scope->getParent() && DS.isSubprogram()) {
- ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
- if (!ScopeDIE)
- return;
- // We create children when the scope DIE is not null.
- createScopeChildrenDIE(TheCU, Scope, Children);
- } else {
- // Early exit when we know the scope DIE is going to be null.
- if (isLexicalScopeDIENull(Scope))
- return;
-
- unsigned ChildScopeCount;
-
- // We create children here when we know the scope DIE is not going to be
- // null and the children will be added to the scope DIE.
- createScopeChildrenDIE(TheCU, Scope, Children, &ChildScopeCount);
-
- // There is no need to emit empty lexical block DIE.
- std::pair<ImportedEntityMap::const_iterator,
- ImportedEntityMap::const_iterator> Range =
- std::equal_range(ScopesWithImportedEntities.begin(),
- ScopesWithImportedEntities.end(),
- std::pair<const MDNode *, const MDNode *>(DS, nullptr),
- less_first());
- for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
- ++i)
- Children.push_back(
- TheCU.constructImportedEntityDIE(DIImportedEntity(i->second)));
- // If there are only other scopes as children, put them directly in the
- // parent instead, as this scope would serve no purpose.
- if (Children.size() == ChildScopeCount) {
- FinalChildren.insert(FinalChildren.end(),
- std::make_move_iterator(Children.begin()),
- std::make_move_iterator(Children.end()));
- return;
- }
- ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
- assert(ScopeDIE && "Scope DIE should not be null.");
- }
-
- // Add children
- for (auto &I : Children)
- ScopeDIE->addChild(std::move(I));
-
- FinalChildren.push_back(std::move(ScopeDIE));
-}
-
void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const {
if (!GenerateGnuPubSections)
return;
OpenPOWER on IntegriCloud