From 9c65b1355c05ddaa6ac17bb0ad5b63acff6db997 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Wed, 8 Oct 2014 22:20:02 +0000 Subject: Push DwarfDebug::constructScopeDIE down into DwarfCompileUnit One of many steps to generalize subprogram emission to both the DWO and non-DWO sections (to emit -gmlt-like data under fission). Once the functions are pushed down into DwarfCompileUnit some of the data structures will be pushed at least into DwarfFile so that they can be unique per-file, allowing emission to both files independently. llvm-svn: 219345 --- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h | 45 +++++++++++++++++++------------- 1 file changed, 27 insertions(+), 18 deletions(-) (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h') diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 52cd9e7e422..9deaa94ca06 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -349,25 +349,11 @@ class DwarfDebug : public AsmPrinterHandler { void ensureAbstractVariableIsCreatedIfScoped(const DIVariable &Var, const MDNode *Scope); - /// \brief A helper function to check whether the DIE for a given Scope is - /// going to be null. - bool isLexicalScopeDIENull(LexicalScope *Scope); - /// \brief A helper function to construct a RangeSpanList for a given /// lexical scope. void addScopeRangeList(DwarfCompileUnit &TheCU, DIE &ScopeDIE, const SmallVectorImpl &Range); - /// \brief Construct new DW_TAG_lexical_block for this scope and - /// attach DW_AT_low_pc/DW_AT_high_pc labels. - std::unique_ptr constructLexicalScopeDIE(DwarfCompileUnit &TheCU, - LexicalScope *Scope); - - /// \brief This scope represents inlined body of a function. Construct - /// DIE to represent this concrete inlined copy of the function. - std::unique_ptr constructInlinedScopeDIE(DwarfCompileUnit &TheCU, - LexicalScope *Scope); - /// \brief Construct a DIE for this scope. void constructScopeDIE(DwarfCompileUnit &TheCU, LexicalScope *Scope, SmallVectorImpl> &FinalChildren); @@ -379,10 +365,6 @@ class DwarfDebug : public AsmPrinterHandler { /// \brief Construct a DIE for this subprogram scope. void constructSubprogramScopeDIE(DwarfCompileUnit &TheCU, LexicalScope *Scope); - /// A helper function to create children of a Scope DIE. - DIE *createScopeChildrenDIE(DwarfCompileUnit &TheCU, LexicalScope *Scope, - SmallVectorImpl> &Children, - unsigned *ChildScopeCount = nullptr); /// \brief Emit initial Dwarf sections with a label at the start of each one. void emitSectionLabels(); @@ -680,6 +662,33 @@ public: const MachineFunction *getCurrentFunction() const { return CurFn; } const MCSymbol *getFunctionBeginSym() const { return FunctionBeginSym; } const MCSymbol *getFunctionEndSym() const { return FunctionEndSym; } + + iterator_range findImportedEntitiesForScope(const MDNode *Scope) const { + return make_range(std::equal_range( + ScopesWithImportedEntities.begin(), ScopesWithImportedEntities.end(), + std::pair(Scope, nullptr), less_first())); + } + + /// \brief A helper function to check whether the DIE for a given Scope is + /// going to be null. + bool isLexicalScopeDIENull(LexicalScope *Scope); + + // FIXME: Sink these functions down into DwarfFile/Dwarf*Unit. + + /// \brief Construct new DW_TAG_lexical_block for this scope and + /// attach DW_AT_low_pc/DW_AT_high_pc labels. + std::unique_ptr constructLexicalScopeDIE(DwarfCompileUnit &TheCU, + LexicalScope *Scope); + + /// \brief This scope represents inlined body of a function. Construct + /// DIE to represent this concrete inlined copy of the function. + std::unique_ptr constructInlinedScopeDIE(DwarfCompileUnit &TheCU, + LexicalScope *Scope); + + /// A helper function to create children of a Scope DIE. + DIE *createScopeChildrenDIE(DwarfCompileUnit &TheCU, LexicalScope *Scope, + SmallVectorImpl> &Children, + unsigned *ChildScopeCount = nullptr); }; } // End of namespace llvm -- cgit v1.2.3