From: David Blaikie Date: Thu, 5 Dec 2013 07:43:55 +0000 (+0000) Subject: DwarfDebug/DwarfUnit: Push abbreviation structures down into DwarfUnits to reduce... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0d668218e789b9043c122d559dcb88ea23ae4748;p=oota-llvm.git DwarfDebug/DwarfUnit: Push abbreviation structures down into DwarfUnits to reduce duplication git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196479 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0d8a2b436a2..55d13c26b35 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -114,10 +114,6 @@ static const char *const DbgTimerName = "DWARF Debug Writer"; //===----------------------------------------------------------------------===// -// Configuration values for initial hash set sizes (log2). -// -static const unsigned InitAbbreviationsSetSize = 9; // log2(512) - namespace llvm { /// resolve - Look in the DwarfDebug map for the MDNode that @@ -182,14 +178,10 @@ static unsigned getDwarfVersionFromModule(const Module *M) { } DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) - : Asm(A), MMI(Asm->MMI), FirstCU(0), - AbbreviationsSet(InitAbbreviationsSetSize), - SourceIdMap(DIEValueAllocator), PrevLabel(NULL), GlobalCUIndexCount(0), - GlobalRangeCount(0), InfoHolder(A, &AbbreviationsSet, Abbreviations, - "info_string", DIEValueAllocator), - SkeletonAbbrevSet(InitAbbreviationsSetSize), - SkeletonHolder(A, &SkeletonAbbrevSet, SkeletonAbbrevs, "skel_string", - DIEValueAllocator) { + : Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator), + PrevLabel(NULL), GlobalCUIndexCount(0), GlobalRangeCount(0), + InfoHolder(A, "info_string", DIEValueAllocator), + SkeletonHolder(A, "skel_string", DIEValueAllocator) { DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0; DwarfStrSectionSym = TextSectionSym = 0; @@ -288,7 +280,7 @@ unsigned DwarfUnits::getAddrPoolIndex(const MCExpr *Sym) { // void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) { // Check the set for priors. - DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev); + DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev); // If it's newly added. if (InSet == &Abbrev) { @@ -2162,25 +2154,21 @@ void DwarfDebug::emitDebugInfo() { // Emit the abbreviation section. void DwarfDebug::emitAbbreviations() { - if (!useSplitDwarf()) - emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(), - &Abbreviations); - else - emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(), - &SkeletonAbbrevs); + DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; + + Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection()); } -void DwarfDebug::emitAbbrevs(const MCSection *Section, - std::vector *Abbrevs) { +void DwarfUnits::emitAbbrevs(const MCSection *Section) { // Check to see if it is worth the effort. - if (!Abbrevs->empty()) { + if (!Abbreviations.empty()) { // Start the debug abbrev section. Asm->OutStreamer.SwitchSection(Section); // For each abbrevation. - for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) { + for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) { // Get abbreviation data - const DIEAbbrev *Abbrev = Abbrevs->at(i); + const DIEAbbrev *Abbrev = Abbreviations[i]; // Emit the abbrevations code (base 1 index.) Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code"); @@ -3031,8 +3019,7 @@ void DwarfDebug::emitDebugInfoDWO() { // abbreviations for the .debug_info.dwo section. void DwarfDebug::emitDebugAbbrevDWO() { assert(useSplitDwarf() && "No split dwarf?"); - emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(), - &Abbreviations); + InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); } // Emit the .debug_str.dwo section for separated dwarf. This contains the diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 15778f734bf..8274ad84fb0 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -226,10 +226,10 @@ class DwarfUnits { AsmPrinter *Asm; // Used to uniquely define abbreviations. - FoldingSet *AbbreviationsSet; + FoldingSet AbbreviationsSet; // A list of all the unique abbreviations in use. - std::vector &Abbreviations; + std::vector Abbreviations; // A pointer to all units in the section. SmallVector CUs; @@ -251,12 +251,9 @@ class DwarfUnits { unsigned NextAddrPoolNumber; public: - DwarfUnits(AsmPrinter *AP, FoldingSet *AS, - std::vector &A, const char *Pref, - BumpPtrAllocator &DA) - : Asm(AP), AbbreviationsSet(AS), Abbreviations(A), StringPool(DA), - NextStringPoolNumber(0), StringPref(Pref), AddressPool(), - NextAddrPoolNumber(0) {} + DwarfUnits(AsmPrinter *AP, const char *Pref, BumpPtrAllocator &DA) + : Asm(AP), StringPool(DA), NextStringPoolNumber(0), StringPref(Pref), + AddressPool(), NextAddrPoolNumber(0) {} ~DwarfUnits(); @@ -279,6 +276,9 @@ public: void emitUnits(DwarfDebug *DD, const MCSection *USection, const MCSection *ASection, const MCSymbol *ASectionSym); + /// \brief Emit a set of abbreviations to the specific section. + void emitAbbrevs(const MCSection *); + /// \brief Emit all of the strings to the section given. void emitStrings(const MCSection *StrSection, const MCSection *OffsetSection, const MCSymbol *StrSecSym); @@ -347,12 +347,6 @@ class DwarfDebug : public AsmPrinterHandler { /// of in CompileUnit. DenseMap MDTypeNodeToDieMap; - // Used to uniquely define abbreviations. - FoldingSet AbbreviationsSet; - - // A list of all the unique abbreviations in use. - std::vector Abbreviations; - // Stores the current file ID for a given compile unit. DenseMap FileIDCUMap; // Source id map, i.e. CUID, source filename and directory, @@ -485,12 +479,6 @@ class DwarfDebug : public AsmPrinterHandler { // original object file, rather than things that are meant // to be in the .dwo sections. - // Used to uniquely define abbreviations for the skeleton emission. - FoldingSet SkeletonAbbrevSet; - - // A list of all the unique abbreviations in use. - std::vector SkeletonAbbrevs; - // Holder for the skeleton information. DwarfUnits SkeletonHolder; @@ -553,9 +541,6 @@ class DwarfDebug : public AsmPrinterHandler { /// open. void endSections(); - /// \brief Emit a set of abbreviations to the specific section. - void emitAbbrevs(const MCSection *, std::vector *); - /// \brief Emit the debug info section. void emitDebugInfo();