[llvm] r205287 - DebugInfo: Avoid creating unnecessary/empty line tables and remove the special case of '0' in DwarfCompileUnit::initStmtList by just always using a label difference

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue Apr 1 14:44:58 PDT 2014


Much nicer, thanks!

On 1 April 2014 04:07, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Tue Apr  1 03:07:52 2014
> New Revision: 205287
>
> URL: http://llvm.org/viewvc/llvm-project?rev=205287&view=rev
> Log:
> DebugInfo: Avoid creating unnecessary/empty line tables and remove the special case of '0' in DwarfCompileUnit::initStmtList by just always using a label difference
>
> This moves one case of raw text checking down into the MCStreamer
> interfaces in the form of a virtual function, even if we ultimately end
> up consolidating on the one-or-many line tables issue one day, this is
> nicer in the interim. This just generally streamlines a bunch of use
> cases into a common code path.
>
> Modified:
>     llvm/trunk/include/llvm/MC/MCContext.h
>     llvm/trunk/include/llvm/MC/MCStreamer.h
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>     llvm/trunk/lib/MC/MCAsmStreamer.cpp
>     llvm/trunk/lib/MC/MCDwarf.cpp
>     llvm/trunk/lib/MC/MCStreamer.cpp
>     llvm/trunk/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll
>     llvm/trunk/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll
>     llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
>     llvm/trunk/test/DebugInfo/X86/stmt-list.ll
>     llvm/trunk/test/MC/ELF/gen-dwarf.s
>
> Modified: llvm/trunk/include/llvm/MC/MCContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)
> +++ llvm/trunk/include/llvm/MC/MCContext.h Tue Apr  1 03:07:52 2014
> @@ -345,12 +345,6 @@ namespace llvm {
>      void setDwarfCompileUnitID(unsigned CUIndex) {
>        DwarfCompileUnitID = CUIndex;
>      }
> -    MCSymbol *getMCLineTableSymbol(unsigned ID) const {
> -      return getMCDwarfLineTable(ID).getLabel();
> -    }
> -    void setMCLineTableSymbol(MCSymbol *Sym, unsigned ID) {
> -      getMCDwarfLineTable(ID).setLabel(Sym);
> -    }
>      void setMCLineTableCompilationDir(unsigned CUID, StringRef CompilationDir) {
>        getMCDwarfLineTable(CUID).setCompilationDir(CompilationDir);
>      }
>
> Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
> +++ llvm/trunk/include/llvm/MC/MCStreamer.h Tue Apr  1 03:07:52 2014
> @@ -658,6 +658,8 @@ public:
>    virtual void EmitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
>                                           const MCSymbol *Label) {}
>
> +  virtual MCSymbol *getDwarfLineTableSymbol(unsigned CUID);
> +
>    void EmitDwarfSetLineAddr(int64_t LineDelta, const MCSymbol *Label,
>                              int PointerSize);
>
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Tue Apr  1 03:07:52 2014
> @@ -2070,13 +2070,7 @@ void DwarfUnit::addRange(RangeSpan Range
>  void DwarfCompileUnit::initStmtList(MCSymbol *DwarfLineSectionSym) {
>    // Define start line table label for each Compile Unit.
>    MCSymbol *LineTableStartSym =
> -      Asm->GetTempSymbol("line_table_start", getUniqueID());
> -  Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
> -                                                     getUniqueID());
> -
> -  // Use a single line table if we are generating assembly.
> -  bool UseTheFirstCU =
> -      Asm->OutStreamer.hasRawTextSupport() || (getUniqueID() == 0);
> +      Asm->OutStreamer.getDwarfLineTableSymbol(getUniqueID());
>
>    stmtListIndex = UnitDie->getValues().size();
>
> @@ -2086,10 +2080,7 @@ void DwarfCompileUnit::initStmtList(MCSy
>    // The line table entries are not always emitted in assembly, so it
>    // is not okay to use line_table_start here.
>    if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
> -    addSectionLabel(UnitDie.get(), dwarf::DW_AT_stmt_list,
> -                    UseTheFirstCU ? DwarfLineSectionSym : LineTableStartSym);
> -  else if (UseTheFirstCU)
> -    addSectionOffset(UnitDie.get(), dwarf::DW_AT_stmt_list, 0);
> +    addSectionLabel(UnitDie.get(), dwarf::DW_AT_stmt_list, LineTableStartSym);
>    else
>      addSectionDelta(UnitDie.get(), dwarf::DW_AT_stmt_list, LineTableStartSym,
>                      DwarfLineSectionSym);
>
> Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Tue Apr  1 03:07:52 2014
> @@ -207,6 +207,7 @@ public:
>                               unsigned Column, unsigned Flags,
>                               unsigned Isa, unsigned Discriminator,
>                               StringRef FileName) override;
> +  MCSymbol *getDwarfLineTableSymbol(unsigned CUID) override;
>
>    void EmitIdent(StringRef IdentString) override;
>    void EmitCFISections(bool EH, bool Debug) override;
> @@ -957,6 +958,12 @@ void MCAsmStreamer::EmitDwarfLocDirectiv
>    EmitEOL();
>  }
>
> +MCSymbol *MCAsmStreamer::getDwarfLineTableSymbol(unsigned CUID) {
> +  // Always use the zeroth line table, since asm syntax only supports one line
> +  // table for now.
> +  return MCStreamer::getDwarfLineTableSymbol(0);
> +}
> +
>  void MCAsmStreamer::EmitIdent(StringRef IdentString) {
>    assert(MAI->hasIdentDirective() && ".ident directive not supported");
>    OS << "\t.ident\t";
> @@ -1442,8 +1449,7 @@ void MCAsmStreamer::FinishImpl() {
>    // directly, the label is the only work required here.
>    auto &Tables = getContext().getMCDwarfLineTables();
>    if (!Tables.empty()) {
> -    // FIXME: assert Tables.size() == 1 here, except that's not currently true
> -    // due to DwarfUnit.cpp:2074.
> +    assert(Tables.size() == 1 && "asm output only supports one line table");
>      if (auto *Label = Tables.begin()->second.getLabel()) {
>        SwitchSection(getContext().getObjectFileInfo()->getDwarfLineSection());
>        EmitLabel(Label);
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Tue Apr  1 03:07:52 2014
> @@ -788,10 +788,8 @@ void MCGenDwarfInfo::Emit(MCStreamer *MC
>    bool CreateDwarfSectionSymbols =
>        AsmInfo->doesDwarfUseRelocationsAcrossSections();
>    MCSymbol *LineSectionSymbol = nullptr;
> -  if (CreateDwarfSectionSymbols) {
> -    LineSectionSymbol = context.CreateTempSymbol();
> -    context.setMCLineTableSymbol(LineSectionSymbol, 0);
> -  }
> +  if (CreateDwarfSectionSymbols)
> +    LineSectionSymbol = MCOS->getDwarfLineTableSymbol(0);
>    MCSymbol *AbbrevSectionSymbol = NULL;
>    MCSymbol *InfoSectionSymbol = NULL;
>    MCOS->SwitchSection(context.getObjectFileInfo()->getDwarfInfoSection());
>
> Modified: llvm/trunk/lib/MC/MCStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCStreamer.cpp Tue Apr  1 03:07:52 2014
> @@ -191,6 +191,16 @@ void MCStreamer::EmitDwarfLocDirective(u
>                                    Discriminator);
>  }
>
> +MCSymbol *MCStreamer::getDwarfLineTableSymbol(unsigned CUID) {
> +  MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID);
> +  if (!Table.getLabel()) {
> +    StringRef Prefix = Context.getAsmInfo()->getPrivateGlobalPrefix();
> +    Table.setLabel(
> +        Context.GetOrCreateSymbol(Prefix + "line_table_start" + Twine(CUID)));
> +  }
> +  return Table.getLabel();
> +}
> +
>  MCDwarfFrameInfo *MCStreamer::getCurrentFrameInfo() {
>    if (FrameInfos.empty())
>      return 0;
>
> Modified: llvm/trunk/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll Tue Apr  1 03:07:52 2014
> @@ -17,7 +17,7 @@ target triple = "thumbv7-apple-darwin10"
>  ; DW_OP_constu
>  ; offset
>
> -;CHECK: .long Lset6
> +;CHECK: .long Lset7
>  ;CHECK-NEXT:        @ DW_AT_type
>  ;CHECK-NEXT:        @ DW_AT_decl_file
>  ;CHECK-NEXT:        @ DW_AT_decl_line
>
> Modified: llvm/trunk/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll Tue Apr  1 03:07:52 2014
> @@ -8,7 +8,7 @@
>  ; DW_OP_constu
>  ; offset
>
> -;CHECK: .long Lset8
> +;CHECK: .long Lset9
>  ;CHECK-NEXT:        @ DW_AT_type
>  ;CHECK-NEXT:        @ DW_AT_decl_file
>  ;CHECK-NEXT:        @ DW_AT_decl_line
>
> Modified: llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll Tue Apr  1 03:07:52 2014
> @@ -51,9 +51,11 @@
>
>  ; PR15408
>  ; ASM: L__DWARF__debug_info_begin0:
> -; ASM: .long   0                       ## DW_AT_stmt_list
> +; ASM: Lset3 = Lline_table_start0-Lsection_line ## DW_AT_stmt_list
> +; ASM-NEXT: .long   Lset3
>  ; ASM: L__DWARF__debug_info_begin1:
> -; ASM: .long   0                       ## DW_AT_stmt_list
> +; ASM: Lset13 = Lline_table_start0-Lsection_line ## DW_AT_stmt_list
> +; ASM-NEXT: .long   Lset13
>  define i32 @test(i32 %a) nounwind uwtable ssp {
>  entry:
>    %a.addr = alloca i32, align 4
>
> Modified: llvm/trunk/test/DebugInfo/X86/stmt-list.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/stmt-list.ll?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/stmt-list.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/stmt-list.ll Tue Apr  1 03:07:52 2014
> @@ -3,7 +3,7 @@
>  ; CHECK:      .section        .debug_line,"", at progbits
>  ; CHECK-NEXT: .Lsection_line:
>
> -; CHECK:      .long   .Lsection_line          # DW_AT_stmt_list
> +; CHECK:      .long   .Lline_table_start0          # DW_AT_stmt_list
>
>  define void @f() {
>  entry:
>
> Modified: llvm/trunk/test/MC/ELF/gen-dwarf.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/gen-dwarf.s?rev=205287&r1=205286&r2=205287&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/ELF/gen-dwarf.s (original)
> +++ llvm/trunk/test/MC/ELF/gen-dwarf.s Tue Apr  1 03:07:52 2014
> @@ -39,7 +39,7 @@ foo:
>  // ASM-NEXT: .long [[ABBREV_LABEL]]
>  // First .byte 1 is the abbreviation number for the compile_unit abbrev
>  // ASM: .byte 1
> -// ASM-NEXT: .long [[LINE_LABEL:.Ltmp[0-9]+]]
> +// ASM-NEXT: .long [[LINE_LABEL:.L[a-z0-9]+]]
>
>  // ASM: .section .debug_line
>  // ASM-NEXT: [[LINE_LABEL]]
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list