summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2014-03-18 17:41:15 +0000
committerAdrian Prantl <aprantl@apple.com>2014-03-18 17:41:15 +0000
commite1ea4faca159ff8e6fba39d00fee8ea5b4b5efe8 (patch)
tree245cc57297f34a58cbbb1df032f7b4d2f9302955
parent13ca05e2b8d2162d60f6997c865cb0593db55623 (diff)
downloadllvm-e1ea4faca159ff8e6fba39d00fee8ea5b4b5efe8.tar.gz
llvm-e1ea4faca159ff8e6fba39d00fee8ea5b4b5efe8.tar.bz2
llvm-e1ea4faca159ff8e6fba39d00fee8ea5b4b5efe8.tar.xz
Debug info: Remove OdrMemberMap from DwarfDebug, it's not necessary.
Follow-up to r203982. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204162 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp4
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.h8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp22
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.h22
4 files changed, 5 insertions, 51 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 87f1878e86..5fb603c143 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/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/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index 2f6c2546ed..b4a1cdde11 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/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/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index be21d633e5..bf377f52d4 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/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/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h
index 1c4e0e552f..6f8e55edc9 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.h
+++ b/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);