diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-10-08 22:23:10 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-10-08 22:23:10 +0000 |
commit | f76aeaec66aaa6d8e4fc2e13d1dfb63249ff5652 (patch) | |
tree | be0d00b264316048dcd13833a71a3dc4e1b06739 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 9c65b1355c05ddaa6ac17bb0ad5b63acff6db997 (diff) | |
download | bcm5719-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.cpp | 69 |
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; |