diff options
author | Adrian Prantl <aprantl@apple.com> | 2014-03-18 17:41:15 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2014-03-18 17:41:15 +0000 |
commit | d486b343a0175606bf9fcf8c52de21ec982b169a (patch) | |
tree | e20ad679e0e4524a0787c8411dc3d40bf10eb583 | |
parent | ed0a7761e5f249aad4c9d0e85f268c1b5df798ca (diff) | |
download | bcm5719-llvm-d486b343a0175606bf9fcf8c52de21ec982b169a.tar.gz bcm5719-llvm-d486b343a0175606bf9fcf8c52de21ec982b169a.zip |
Debug info: Remove OdrMemberMap from DwarfDebug, it's not necessary.
Follow-up to r203982.
llvm-svn: 204162
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h | 8 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h | 22 |
4 files changed, 5 insertions, 51 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 87f1878e865..5fb603c143b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -369,7 +369,6 @@ bool DwarfDebug::isSubprogramContext(const MDNode *Context) { // scope then create and insert DIEs for these variables. DIE *DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit *SPCU, DISubprogram SP) { - SP = SPCU->getOdrUniqueSubprogram(resolve(SP.getContext()), SP); DIE *SPDie = SPCU->getDIE(SP); assert(SPDie && "Unable to find subprogram DIE!"); @@ -604,7 +603,8 @@ DIE *DwarfDebug::constructScopeDIE(DwarfCompileUnit *TheCU, if (!Scope || !Scope->getScopeNode()) return NULL; - DIScope DS(Scope->getScopeNode()); + // Unique scope where applicable. + DIScope DS(resolve(DIScope(Scope->getScopeNode()).getRef())); SmallVector<DIE *, 8> Children; DIE *ObjectPointer = NULL; diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 2f6c2546ed4..b4a1cdde11b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -346,9 +346,6 @@ class DwarfDebug : public AsmPrinterHandler { /// of in DwarfCompileUnit. DenseMap<const MDNode *, DIE *> MDTypeNodeToDieMap; - // Used to unique C++ member function declarations. - StringMap<const MDNode *> OdrMemberMap; - // List of all labels used in aranges generation. std::vector<SymbolCU> ArangeLabels; @@ -700,11 +697,6 @@ public: return MDTypeNodeToDieMap.lookup(TypeMD); } - /// \brief Look up or create an entry in the OdrMemberMap. - const MDNode *&getOrCreateOdrMember(StringRef Key) { - return OdrMemberMap.GetOrCreateValue(Key).getValue(); - } - /// \brief Emit all Dwarf sections that should come prior to the /// content. void beginModule(); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index be21d633e54..bf377f52d41 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1427,24 +1427,6 @@ DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { return NDie; } -/// Unique C++ member function declarations based on their -/// context and mangled name. -DISubprogram -DwarfUnit::getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const { - if (!hasODR() || - !Context.isCompositeType() || - SP.getLinkageName().empty() || - SP.isDefinition()) - return SP; - // Create a key with the UID of the parent class and this SP's name. - Twine Key = SP.getContext().getName() + SP.getLinkageName(); - const MDNode *&Entry = DD->getOrCreateOdrMember(Key.str()); - if (!Entry) - Entry = &*SP; - - return DISubprogram(Entry); -} - /// getOrCreateSubprogramDIE - Create new DIE using SP. DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) { // Construct the context before querying for the existence of the DIE in case @@ -1452,8 +1434,10 @@ DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) { // declarations). DIScope Context = resolve(SP.getContext()); DIE *ContextDIE = getOrCreateContextDIE(Context); + // Unique declarations based on the ODR, where applicable. - SP = getOdrUniqueSubprogram(Context, SP); + SP = DISubprogram(DD->resolve(SP.getRef())); + assert(SP.Verify()); DIE *SPDie = getDIE(SP); if (SPDie) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h index 1c4e0e552f5..6f8e55edc91 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -487,28 +487,6 @@ public: virtual DwarfCompileUnit &getCU() = 0; - /// \brief Return whether this compilation unit has the - /// one-definition-rule (ODR). In C++ this allows the compiler to - /// perform type unique during LTO. - bool hasODR() const { - switch (getLanguage()) { - case dwarf::DW_LANG_C_plus_plus: - case dwarf::DW_LANG_C_plus_plus_03: - case dwarf::DW_LANG_C_plus_plus_11: - // For all we care, the C++ part of the language has the ODR and - // ObjC methods are not represented in a way that they could be - // confused with C++ member functions. - case dwarf::DW_LANG_ObjC_plus_plus: - return true; - default: - return false; - } - } - - /// \brief Unique C++ member function declarations based on their - /// context+mangled name. - DISubprogram getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const; - protected: /// getOrCreateStaticMemberDIE - Create new static data member DIE. DIE *getOrCreateStaticMemberDIE(DIDerivedType DT); |