From: David Blaikie Date: Thu, 24 Apr 2014 01:02:42 +0000 (+0000) Subject: Remove the intermediate AccelNamespace maps in DWARF units. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=e33575f57750198aea1b3b3b10cd0d1c81a2bd8a Remove the intermediate AccelNamespace maps in DWARF units. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207059 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 549e991829e..5490721bc05 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -172,7 +172,9 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)), AccelObjC(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, - dwarf::DW_FORM_data4)) { + dwarf::DW_FORM_data4)), + AccelNamespace(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, + dwarf::DW_FORM_data4)) { DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0; DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0; @@ -1885,24 +1887,14 @@ void DwarfDebug::emitAccelObjC() { // Emit namespace dies into a hashed accelerator table. void DwarfDebug::emitAccelNamespaces() { - DwarfAccelTable AT( - DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)); - for (const auto &TheU : getUnits()) { - for (const auto &GI : TheU->getAccelNamespace()) { - StringRef Name = GI.getKey(); - for (const DIE *D : GI.second) - AT.AddName(Name, D); - } - } - - AT.FinalizeTable(Asm, "namespac"); + AccelNamespace.FinalizeTable(Asm, "namespac"); Asm->OutStreamer.SwitchSection( Asm->getObjFileLowering().getDwarfAccelNamespaceSection()); MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin"); Asm->OutStreamer.EmitLabel(SectionBegin); // Emit the full data. - AT.Emit(Asm, SectionBegin, &InfoHolder); + AccelNamespace.Emit(Asm, SectionBegin, &InfoHolder); } // Emit type dies into a hashed accelerator table. @@ -2568,3 +2560,10 @@ void DwarfDebug::addAccelObjC(StringRef Name, const DIE *Die) { InfoHolder.getStringPoolEntry(Name); AccelObjC.AddName(Name, Die); } + +void DwarfDebug::addAccelNamespace(StringRef Name, const DIE *Die) { + if (!useDwarfAccelTables()) + return; + InfoHolder.getStringPoolEntry(Name); + AccelNamespace.AddName(Name, Die); +} diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 901561bd321..f3367f4cebe 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -326,6 +326,7 @@ class DwarfDebug : public AsmPrinterHandler { DwarfAccelTable AccelNames; DwarfAccelTable AccelObjC; + DwarfAccelTable AccelNamespace; MCDwarfDwoLineTable *getDwoLineTable(const DwarfCompileUnit &); @@ -645,6 +646,8 @@ public: void addAccelName(StringRef Name, const DIE *Die); void addAccelObjC(StringRef Name, const DIE *Die); + + void addAccelNamespace(StringRef Name, const DIE *Die); }; } // End of namespace llvm diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 02bce18d569..9b5923441cd 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1065,14 +1065,6 @@ void DwarfUnit::addType(DIE *Entity, DIType Ty, dwarf::Attribute Attribute) { addDIEEntry(Entity, Attribute, Entry); } -void DwarfUnit::addAccelNamespace(StringRef Name, const DIE *Die) { - if (!DD->useDwarfAccelTables()) - return; - DU->getStringPoolEntry(Name); - std::vector &DIEs = AccelNamespace[Name]; - DIEs.push_back(Die); -} - void DwarfUnit::addAccelType(StringRef Name, std::pair Die) { if (!DD->useDwarfAccelTables()) @@ -1415,10 +1407,10 @@ DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { if (!NS.getName().empty()) { addString(NDie, dwarf::DW_AT_name, NS.getName()); - addAccelNamespace(NS.getName(), NDie); + DD->addAccelNamespace(NS.getName(), NDie); addGlobalName(NS.getName(), NDie, NS.getContext()); } else - addAccelNamespace("(anonymous namespace)", NDie); + DD->addAccelNamespace("(anonymous namespace)", NDie); addSourceLine(NDie, NS); return NDie; } diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 4fd1e91b2df..13fb1b5c9e2 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -102,9 +102,6 @@ protected: /// GlobalTypes - A map of globally visible types for this unit. StringMap GlobalTypes; - /// AccelNamespace - A map of names for the namespace accelerator table. - StringMap > AccelNamespace; - /// AccelTypes - A map of names for the type accelerator table. StringMap > > AccelTypes; @@ -225,9 +222,6 @@ public: const StringMap &getGlobalNames() const { return GlobalNames; } const StringMap &getGlobalTypes() const { return GlobalTypes; } - const StringMap > &getAccelNamespace() const { - return AccelNamespace; - } const StringMap > > & getAccelTypes() const { return AccelTypes;