[llvm] r344318 - Revert "DwarfDebug: Pick next location in case of missing location at block begin"
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 11 16:37:58 PDT 2018
Author: matze
Date: Thu Oct 11 16:37:58 2018
New Revision: 344318
URL: http://llvm.org/viewvc/llvm-project?rev=344318&view=rev
Log:
Revert "DwarfDebug: Pick next location in case of missing location at block begin"
It originally triggered a stepping problem in the debugger, which could
be fixed by adjusting CodeGen/LexicalScopes.cpp however it seems we prefer
the previous behavior anyway.
See the discussion for details: http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20181008/593833.html
This reverts commit r343880.
This reverts commit r343874.
Removed:
llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir
Modified:
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
llvm/trunk/test/DebugInfo/AArch64/line-header.ll
llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll
llvm/trunk/test/DebugInfo/Mips/delay-slot.ll
llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll
llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Oct 11 16:37:58 2018
@@ -1371,49 +1371,6 @@ void DwarfDebug::collectEntityInfo(Dwarf
}
}
-static const DebugLoc &
-findNextDebugLoc(MachineBasicBlock::const_iterator MBBI,
- MachineBasicBlock::const_iterator MBBE) {
- static DebugLoc NoLocation;
- for ( ; MBBI != MBBE; ++MBBI) {
- if (MBBI->isDebugInstr())
- continue;
- const DebugLoc &DL = MBBI->getDebugLoc();
- if (DL)
- return DL;
- }
- return NoLocation;
-}
-
-void DwarfDebug::emitDebugLoc(const DebugLoc &DL) {
- unsigned LastAsmLine =
- Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
-
- // We have an explicit location, different from the previous location.
- // Don't repeat a line-0 record, but otherwise emit the new location.
- // (The new location might be an explicit line 0, which we do emit.)
- unsigned Line = DL.getLine();
- if (PrevInstLoc && Line == 0 && LastAsmLine == 0)
- return;
- unsigned Flags = 0;
- if (DL == PrologEndLoc) {
- Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
- PrologEndLoc = DebugLoc();
- }
- // If the line changed, we call that a new statement; unless we went to
- // line 0 and came back, in which case it is not a new statement.
- unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
- if (Line && Line != OldLine)
- Flags |= DWARF2_FLAG_IS_STMT;
-
- const MDNode *Scope = DL.getScope();
- recordSourceLine(Line, DL.getCol(), Scope, Flags);
-
- // If we're not at line 0, remember this location.
- if (Line)
- PrevInstLoc = DL;
-}
-
// Process beginning of an instruction.
void DwarfDebug::beginInstruction(const MachineInstr *MI) {
DebugHandlerBase::beginInstruction(MI);
@@ -1458,41 +1415,54 @@ void DwarfDebug::beginInstruction(const
// If we have already emitted a line-0 record, don't repeat it.
if (LastAsmLine == 0)
return;
- // By default we emit nothing to avoid line table bloat. However at the
- // beginning of a basic block or after a label it is undesirable to let
- // the previous location unchanged. In these cases do a forward search for
- // the next valid debug location.
- if (UnknownLocations == Default) {
- const MachineBasicBlock &MBB = *MI->getParent();
- if (!PrevLabel && PrevInstBB == &MBB)
- return;
-
- const DebugLoc &NextDL = findNextDebugLoc(MI->getIterator(), MBB.end());
- if (NextDL) {
- emitDebugLoc(NextDL);
- return;
- }
- }
-
- // We should emit a line-0 record.
// If user said Don't Do That, don't do that.
if (UnknownLocations == Disable)
return;
- // Emit a line-0 record now.
- // Preserve the file and column numbers, if we can, to save space in
- // the encoded line table.
- // Do not update PrevInstLoc, it remembers the last non-0 line.
- const MDNode *Scope = nullptr;
- unsigned Column = 0;
- if (PrevInstLoc) {
- Scope = PrevInstLoc.getScope();
- Column = PrevInstLoc.getCol();
+ // See if we have a reason to emit a line-0 record now.
+ // Reasons to emit a line-0 record include:
+ // - User asked for it (UnknownLocations).
+ // - Instruction has a label, so it's referenced from somewhere else,
+ // possibly debug information; we want it to have a source location.
+ // - Instruction is at the top of a block; we don't want to inherit the
+ // location from the physically previous (maybe unrelated) block.
+ if (UnknownLocations == Enable || PrevLabel ||
+ (PrevInstBB && PrevInstBB != MI->getParent())) {
+ // Preserve the file and column numbers, if we can, to save space in
+ // the encoded line table.
+ // Do not update PrevInstLoc, it remembers the last non-0 line.
+ const MDNode *Scope = nullptr;
+ unsigned Column = 0;
+ if (PrevInstLoc) {
+ Scope = PrevInstLoc.getScope();
+ Column = PrevInstLoc.getCol();
+ }
+ recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
}
- recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
return;
}
- emitDebugLoc(DL);
+ // We have an explicit location, different from the previous location.
+ // Don't repeat a line-0 record, but otherwise emit the new location.
+ // (The new location might be an explicit line 0, which we do emit.)
+ if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)
+ return;
+ unsigned Flags = 0;
+ if (DL == PrologEndLoc) {
+ Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
+ PrologEndLoc = DebugLoc();
+ }
+ // If the line changed, we call that a new statement; unless we went to
+ // line 0 and came back, in which case it is not a new statement.
+ unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
+ if (DL.getLine() && DL.getLine() != OldLine)
+ Flags |= DWARF2_FLAG_IS_STMT;
+
+ const MDNode *Scope = DL.getScope();
+ recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
+
+ // If we're not at line 0, remember this location.
+ if (DL.getLine())
+ PrevInstLoc = DL;
}
static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Thu Oct 11 16:37:58 2018
@@ -723,9 +723,6 @@ public:
bool tuneForLLDB() const { return DebuggerTuning == DebuggerKind::LLDB; }
bool tuneForSCE() const { return DebuggerTuning == DebuggerKind::SCE; }
/// @}
-
-private:
- void emitDebugLoc(const DebugLoc &DL);
};
} // end namespace llvm
Modified: llvm/trunk/test/DebugInfo/AArch64/line-header.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/line-header.ll?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/AArch64/line-header.ll (original)
+++ llvm/trunk/test/DebugInfo/AArch64/line-header.ll Thu Oct 11 16:37:58 2018
@@ -3,4 +3,4 @@
; check line table length is correctly calculated for both big and little endian
CHECK-LABEL: .debug_line contents:
-CHECK: total_length: 0x0000003c
+CHECK: total_length: 0x0000003f
Modified: llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll (original)
+++ llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll Thu Oct 11 16:37:58 2018
@@ -31,10 +31,11 @@ if.then:
if.end: ; preds = %entry
; Materialize the constant.
-; CHECK: .loc 1 7 5
+; CHECK: .loc 1 0
; CHECK-NEXT: mvn r0, #0
; The backend performs the store to %retval first, for some reason.
+; CHECK-NEXT: .loc 1 7 5
; CHECK-NEXT: str r0, [sp, #4]
store i32 -1, i32* %x, align 4, !dbg !19
Modified: llvm/trunk/test/DebugInfo/Mips/delay-slot.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/delay-slot.ll?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/Mips/delay-slot.ll (original)
+++ llvm/trunk/test/DebugInfo/Mips/delay-slot.ll Thu Oct 11 16:37:58 2018
@@ -16,7 +16,7 @@
; CHECK: 0x0000000000000004 2 0 1 0 0 is_stmt prologue_end
; CHECK: 0x0000000000000024 3 0 1 0 0 is_stmt
; CHECK: 0x0000000000000034 4 0 1 0 0 is_stmt
-; CHECK: 0x0000000000000044 5 0 1 0 0 is_stmt
+; CHECK: 0x0000000000000048 5 0 1 0 0 is_stmt
; CHECK: 0x0000000000000058 5 0 1 0 0 is_stmt end_sequence
Modified: llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll (original)
+++ llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll Thu Oct 11 16:37:58 2018
@@ -36,7 +36,6 @@
; CHECK: setp.ge.s32 %p{{.+}}, %r{{.+}}, %r{{.+}};
; CHECK: .loc [[DEBUG_INFO_CU]] 7 7
; CHECK: @%p{{.+}} bra [[BB:.+]];
-; CHECK: .loc [[DEBUG_INFO_CU]] 8 13
; CHECK: ld.param.f32 %f{{.+}}, [{{.+}}];
; CHECK: ld.param.u64 %rd{{.+}}, [{{.+}}];
; CHECK: cvta.to.global.u64 %rd{{.+}}, %rd{{.+}};
@@ -44,6 +43,7 @@
; CHECK: cvta.to.global.u64 %rd{{.+}}, %rd{{.+}};
; CHECK: mul.wide.u32 %rd{{.+}}, %r{{.+}}, 4;
; CHECK: add.s64 %rd{{.+}}, %rd{{.+}}, %rd{{.+}};
+; CHECK: .loc [[DEBUG_INFO_CU]] 8 13
; CHECK: ld.global.f32 %f{{.+}}, [%rd{{.+}}];
; CHECK: add.s64 %rd{{.+}}, %rd{{.+}}, %rd{{.+}};
; CHECK: .loc [[DEBUG_INFO_CU]] 8 19
Modified: llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll?rev=344318&r1=344317&r2=344318&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll Thu Oct 11 16:37:58 2018
@@ -40,14 +40,15 @@ if.end:
ret void, !dbg !14
}
-; CHECK: .loc 1 7 7 prologue_end
+; CHECK: .loc 1 7 7
; CHECK-NOT: .loc
-; CHECK: # %bb.1
-; CHECK-NEXT: .file 2 "/tests{{[/\]+}}include.h"
-; CHECK-NEXT: .loc 2 20 5
+; CHECK: .loc 1 0 7 is_stmt 0
; CHECK-NOT: .loc
+; CHECK: .loc 2 20 5 is_stmt 1
; CHECK: .LBB0_2:
-; CHECK: .loc 1 10 3
+; CHECK-NEXT: .loc 2 0 5 is_stmt 0
+; CHECK-NOT: .loc
+; CHECK: .loc 1 10 3 is_stmt 1
;
; DISABLE-NOT: .loc 1 0
Removed: llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir?rev=344317&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir (original)
+++ llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir (removed)
@@ -1,74 +0,0 @@
-# RUN: llc -o - %s -start-before=patchable-function -use-unknown-locations=Default | FileCheck %s --check-prefixes=CHECK,DEFAULT
-# RUN: llc -o - %s -start-before=patchable-function -use-unknown-locations=Enable | FileCheck %s --check-prefixes=CHECK,ENABLE
-# RUN: llc -o - %s -start-before=patchable-function -use-unknown-locations=Disable | FileCheck %s --check-prefixes=CHECK,DISABLE
---- |
- target triple = "x86_64--"
-
- !0 = !DIFile(filename: "dwarf-no-source-loc.mir", directory: "/")
- !1 = distinct !DICompileUnit(file: !0, language: DW_LANG_C, emissionKind: LineTablesOnly)
- !2 = distinct !DISubprogram(name: "func", unit: !1)
- !3 = !DILocation(line: 17, scope: !2)
- !4 = !DILocation(line: 42, scope: !2)
-
- !llvm.dbg.cu = !{!1}
- !llvm.module.flags = !{!10, !11}
- !10 = !{i32 2, !"Dwarf Version", i32 4}
- !11 = !{i32 2, !"Debug Info Version", i32 3}
-
- define void @func() !dbg !2 {
- unreachable
- }
-...
----
-name: func
-body: |
- bb.0:
- NOOP
- NOOP
- $eax = MOV32ri 1, debug-location !3
- ; CHECK-LABEL: bb.0
- ; CHECK: nop
- ; CHECK: nop
- ; CHECK: .loc 1 17 0 prologue_end
- ; CHECK: movl $1, %eax
-
- bb.1:
- NOOP
- $ebx = MOV32ri 2, debug-location !4
- ; CHECK-LABEL: bb.1
- ; DEFAULT: .loc 1 42 0
- ; ENABLE: .loc 1 0
- ; DISABLE-NOT: .loc 1 0
- ; CHECK: nop
- ; ENABLE: .loc 1 42 0
- ; CHECK: movl $2, %ebx
-
- bb.2:
- NOOP
- ; CHECK-LABEL: bb.2
- ; DEFAULT: .loc 1 0 0 is_stmt 0
- ; ENABLE: .loc 1 0 0 is_stmt 0
- ; DISABLE-NOT: .loc 1 0
- ; CHECK: nop
-
- bb.3:
- NOOP
- $ecx = MOV32ri 3, debug-location !3
- ; CHECK-LABEL: bb.3
- ; CHECK: nop
- ; DEFAULT: .loc 1 17 0 is_stmt 1
- ; ENABLE: .loc 1 17 0 is_stmt 1
- ; DISABLE-NOT: .loc 1 0
- ; CHECK: movl $3, %ecx
-
- bb.4:
- NOOP
- $edx = MOV32ri 4, debug-location !4
- ; CHECK: bb.4
- ; DEFAULT: .loc 1 42 0
- ; ENABLE: .loc 1 0 0 is_stmt 0
- ; DISABLE-NOT: .loc 1 0
- ; CHECK: nop
- ; ENABLE: .loc 1 42 0 is_stmt 1
- ; CHECK: movl $4, %edx
-...
More information about the llvm-commits
mailing list