[llvm] r225011 - DebugInfo: Omit is_stmt from line table entries on the same line.

David Blaikie dblaikie at gmail.com
Sun Jan 18 12:06:03 PST 2015


On Sun, Jan 18, 2015 at 11:22 AM, Daniel Sanders <Daniel.Sanders at imgtec.com>
wrote:

> Hi David,
>
> Is it essential that this test has six calls to f1()


Nope


> or would it be just as good with six calls to six different functions?
>

Sort of.


> The reason I ask is that Mips is failing this test because the address of
> the function is calculated six times and all six use the line info for the
> first call. As a result, there are some additional .loc's and it fails some
> of the 'CHECK-NOT: .loc' directives. The easiest way to fix this seems to
> be to call six different functions but I thought I ought to check that this
> didn't go against the intent of the test.
>

That seems like it'll produce a bad experience for the user (stepping
through the function they'll jump back & forth to the start all the time).

If you are going to update/modify the test, it's probably worth a comment
explaining that you're working around a MIPS bug that ought to be fixed at
some point.

- David


> ________________________________________
> From: llvm-commits-bounces at cs.uiuc.edu [llvm-commits-bounces at cs.uiuc.edu]
> on behalf of David Blaikie [dblaikie at gmail.com]
> Sent: 30 December 2014 22:47
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm] r225011 - DebugInfo: Omit is_stmt from line table entries
> on    the same line.
>
> Author: dblaikie
> Date: Tue Dec 30 16:47:13 2014
> New Revision: 225011
>
> URL: http://llvm.org/viewvc/llvm-project?rev=225011&view=rev
> Log:
> DebugInfo: Omit is_stmt from line table entries on the same line.
>
> GCC does this for non-zero discriminators and since GCC doesn't produce
> column info, that was the only place it comes up there. For LLVM, since
> we can emit discriminators and/or column info, it makes more sense to
> invert the condition and just test for changes in line number.
>
> This should resolve at least some of the GDB 7.5 test suite failures
> created by recent Clang changes that increase the location fidelity
> (which, since Clang defaults to including column info on Linux by
> default created a bunch of cases that confused GDB).
>
> In theory we could do this better/differently by grouping actual source
> statements together in a similar manner to the way lexical scopes are
> handled but given that GDB isn't really in a position to consume that (&
> users are probably somewhat used to different lines being different
> 'statements') this seems the safest and cheapest change. (I'm concerned
> that doing this 'right' would bloat the debugloc data even further -
> something Duncan's working hard to address)
>
> Added:
>     llvm/trunk/test/DebugInfo/multiline.ll
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>     llvm/trunk/lib/MC/MCAsmStreamer.cpp
>     llvm/trunk/test/DebugInfo/X86/discriminator.ll
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=225011&r1=225010&r2=225011&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Dec 30 16:47:13
> 2014
> @@ -1026,8 +1026,10 @@ void DwarfDebug::beginInstruction(const
>        if (DL == PrologEndLoc) {
>          Flags |= DWARF2_FLAG_PROLOGUE_END;
>          PrologEndLoc = DebugLoc();
> +        Flags |= DWARF2_FLAG_IS_STMT;
>        }
> -      if (PrologEndLoc.isUnknown())
> +      if (DL.getLine() !=
> +          Asm->OutStreamer.getContext().getCurrentDwarfLoc().getLine())
>          Flags |= DWARF2_FLAG_IS_STMT;
>
>        if (!DL.isUnknown()) {
>
> Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=225011&r1=225010&r2=225011&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Tue Dec 30 16:47:13 2014
> @@ -872,8 +872,6 @@ void MCAsmStreamer::EmitDwarfLocDirectiv
>                                            unsigned Isa,
>                                            unsigned Discriminator,
>                                            StringRef FileName) {
> -  this->MCStreamer::EmitDwarfLocDirective(FileNo, Line, Column, Flags,
> -                                          Isa, Discriminator, FileName);
>    OS << "\t.loc\t" << FileNo << " " << Line << " " << Column;
>    if (Flags & DWARF2_FLAG_BASIC_BLOCK)
>      OS << " basic_block";
> @@ -903,6 +901,8 @@ void MCAsmStreamer::EmitDwarfLocDirectiv
>         << Line << ':' << Column;
>    }
>    EmitEOL();
> +  this->MCStreamer::EmitDwarfLocDirective(FileNo, Line, Column, Flags,
> +                                          Isa, Discriminator, FileName);
>  }
>
>  MCSymbol *MCAsmStreamer::getDwarfLineTableSymbol(unsigned CUID) {
>
> Modified: llvm/trunk/test/DebugInfo/X86/discriminator.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/discriminator.ll?rev=225011&r1=225010&r2=225011&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/discriminator.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/discriminator.ll Tue Dec 30 16:47:13 2014
> @@ -60,4 +60,4 @@ attributes #0 = { nounwind uwtable "less
>
>  ; CHECK: Address            Line   Column File   ISA Discriminator Flags
>  ; CHECK: ------------------ ------ ------ ------ --- -------------
> -------------
> -; CHECK: 0x0000000000000011      2      0      1   0            42
> is_stmt
> +; CHECK: 0x0000000000000011      2      0      1   0            42 {{$}}
>
> Added: llvm/trunk/test/DebugInfo/multiline.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/multiline.ll?rev=225011&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/multiline.ll (added)
> +++ llvm/trunk/test/DebugInfo/multiline.ll Tue Dec 30 16:47:13 2014
> @@ -0,0 +1,81 @@
> +; RUN: llc -filetype=asm -O0 < %s | FileCheck %s
> +; RUN: llc -filetype=obj -O0 < %s | llvm-dwarfdump -debug-dump=line - |
> FileCheck %s --check-prefix=INT
> +
> +; Check that the assembly output properly handles is_stmt changes. And
> since
> +; we're testing anyway, check the integrated assembler too.
> +
> +; Generated with clang from multiline.c:
> +; void f1();
> +; void f2() {
> +;   f1(); f1(); f1();
> +;   f1(); f1(); f1();
> +; }
> +
> +
> +; CHECK: .loc  1 2 0 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 3 3 prologue_end #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 3 9 is_stmt 0 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 3 15 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 4 3 is_stmt 1 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 4 9 is_stmt 0 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 4 15 #
> +; CHECK-NOT: .loc
> +; CHECK: .loc  1 5 1 is_stmt 1 #
> +
> +; INT: {{^}}Address
> +; INT: -----
> +; INT-NEXT: 2 0 1 0 0 is_stmt{{$}}
> +; INT-NEXT: 3 3 1 0 0 is_stmt prologue_end{{$}}
> +; INT-NEXT: 3 9 1 0 0 {{$}}
> +; INT-NEXT: 3 15 1 0 0 {{$}}
> +; INT-NEXT: 4 3 1 0 0 is_stmt{{$}}
> +; INT-NEXT: 4 9 1 0 0 {{$}}
> +; INT-NEXT: 4 15 1 0 0 {{$}}
> +; INT-NEXT: 5 1 1 0 0 is_stmt{{$}}
> +
> +
> +; Function Attrs: nounwind uwtable
> +define void @f2() #0 {
> +entry:
> +  call void (...)* @f1(), !dbg !11
> +  call void (...)* @f1(), !dbg !12
> +  call void (...)* @f1(), !dbg !13
> +  call void (...)* @f1(), !dbg !14
> +  call void (...)* @f1(), !dbg !15
> +  call void (...)* @f1(), !dbg !16
> +  ret void, !dbg !17
> +}
> +
> +declare void @f1(...) #1
> +
> +attributes #0 = { nounwind uwtable "less-precise-fpmad"="false"
> "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +attributes #1 = { "less-precise-fpmad"="false"
> "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!8, !9}
> +!llvm.ident = !{!10}
> +
> +!0 = !{!"0x11\0012\00clang version 3.6.0 (trunk 225000) (llvm/trunk
> 224999)\000\00\000\00\001", !1, !2, !2, !3, !2, !2} ; [ DW_TAG_compile_unit
> ] [/tmp/dbginfo/multiline.c] [DW_LANG_C99]
> +!1 = !{!"multiline.c", !"/tmp/dbginfo"}
> +!2 = !{}
> +!3 = !{!4}
> +!4 = !{!"0x2e\00f2\00f2\00\002\000\001\000\000\000\000\002", !1, !5, !6,
> null, void ()* @f2, null, null, !2} ; [ DW_TAG_subprogram ] [line 2] [def]
> [f2]
> +!5 = !{!"0x29", !1}                               ; [ DW_TAG_file_type ]
> [/tmp/dbginfo/multiline.c]
> +!6 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !7, null,
> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset
> 0] [from ]
> +!7 = !{null}
> +!8 = !{i32 2, !"Dwarf Version", i32 4}
> +!9 = !{i32 2, !"Debug Info Version", i32 2}
> +!10 = !{!"clang version 3.6.0 (trunk 225000) (llvm/trunk 224999)"}
> +!11 = !{i32 3, i32 3, !4, null}
> +!12 = !{i32 3, i32 9, !4, null}
> +!13 = !{i32 3, i32 15, !4, null}
> +!14 = !{i32 4, i32 3, !4, null}
> +!15 = !{i32 4, i32 9, !4, null}
> +!16 = !{i32 4, i32 15, !4, null}
> +!17 = !{i32 5, i32 1, !4, null}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150118/d38100a1/attachment.html>


More information about the llvm-commits mailing list