Revert2 "[DebugInfo][DWARF] Set is_stmt on first non-line-0 instruction in BB (#105524)"
Reverted due to large .debug_line size regressions for some configurations; work currently in place to improve the output of this behaviour in PR #108251. This patch also modifies two tests that were created or modified after the original commit landed and are affected by the revert: llvm/test/CodeGen/X86/pseudo_cmov_lower2.ll llvm/test/DebugInfo/X86/empty-line-info.ll This reverts commit 5fef40c2c477e92187bd4e5c18091eca6b8465cc.
This commit is contained in:
parent
090850f15d
commit
51a29b5f16
@ -2061,8 +2061,10 @@ void DwarfDebug::beginInstruction(const MachineInstr *MI) {
|
||||
unsigned LastAsmLine =
|
||||
Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
|
||||
|
||||
bool PrevInstInDiffBB = PrevInstBB && PrevInstBB != MI->getParent();
|
||||
if (DL == PrevInstLoc && !PrevInstInDiffBB) {
|
||||
bool PrevInstInSameSection =
|
||||
(!PrevInstBB ||
|
||||
PrevInstBB->getSectionID() == MI->getParent()->getSectionID());
|
||||
if (DL == PrevInstLoc && PrevInstInSameSection) {
|
||||
// If we have an ongoing unspecified location, nothing to do here.
|
||||
if (!DL)
|
||||
return;
|
||||
@ -2091,7 +2093,8 @@ void DwarfDebug::beginInstruction(const MachineInstr *MI) {
|
||||
// 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 || PrevInstInDiffBB) {
|
||||
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.
|
||||
@ -2116,11 +2119,9 @@ void DwarfDebug::beginInstruction(const MachineInstr *MI) {
|
||||
PrologEndLoc = nullptr;
|
||||
}
|
||||
// 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. We also
|
||||
// mark is_stmt for the first non-0 line in each BB, in case a predecessor BB
|
||||
// ends with a different line.
|
||||
// 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 || PrevInstInDiffBB))
|
||||
if (DL.getLine() && DL.getLine() != OldLine)
|
||||
Flags |= DWARF2_FLAG_IS_STMT;
|
||||
|
||||
const MDNode *Scope = DL.getScope();
|
||||
|
@ -24,7 +24,6 @@ define i32 @test(ptr %arg, ptr %arg1, ptr %arg2) #0 !dbg !6 {
|
||||
; CHECK-NEXT: movs r3, #0
|
||||
; CHECK-NEXT: LBB0_1: @ %bb3
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: .loc 1 0 0 is_stmt 0 @ :0:0
|
||||
; CHECK-NEXT: adds r5, r3, #1
|
||||
; CHECK-NEXT: str.w lr, [r2]
|
||||
; CHECK-NEXT: cmp.w lr, #0
|
||||
@ -37,7 +36,7 @@ define i32 @test(ptr %arg, ptr %arg1, ptr %arg2) #0 !dbg !6 {
|
||||
; CHECK-NEXT: movne r6, #0
|
||||
; CHECK-NEXT: Ltmp0:
|
||||
; CHECK-NEXT: @DEBUG_VALUE: test:this <- [DW_OP_LLVM_arg 0, DW_OP_plus_uconst 135168, DW_OP_LLVM_arg 1, DW_OP_constu 4, DW_OP_mul, DW_OP_plus, DW_OP_plus_uconst 4, DW_OP_stack_value] $r0, $r5
|
||||
; CHECK-NEXT: .loc 1 28 24 prologue_end is_stmt 1 @ test.cpp:28:24
|
||||
; CHECK-NEXT: .loc 1 28 24 prologue_end @ test.cpp:28:24
|
||||
; CHECK-NEXT: strne.w r6, [r8]
|
||||
; CHECK-NEXT: moveq r6, #1
|
||||
; CHECK-NEXT: ldr r4, [r4, #4]
|
||||
|
@ -4,9 +4,9 @@
|
||||
; Check that fs-afdo discriminators are generated.
|
||||
; V01: .loc 1 7 3 is_stmt 0 discriminator 2 # foo.c:7:3
|
||||
; V01: .loc 1 9 5 is_stmt 1 discriminator 2 # foo.c:9:5
|
||||
; V0: .loc 1 9 5 is_stmt 1 discriminator 11266 # foo.c:9:5
|
||||
; V0: .loc 1 9 5 discriminator 11266 # foo.c:9:5
|
||||
; V0: .loc 1 7 3 is_stmt 1 discriminator 11266 # foo.c:7:3
|
||||
; V1: .loc 1 9 5 is_stmt 1 discriminator 514 # foo.c:9:5
|
||||
; V1: .loc 1 9 5 discriminator 514 # foo.c:9:5
|
||||
; V1: .loc 1 7 3 is_stmt 1 discriminator 258 # foo.c:7:3
|
||||
; Check that variable __llvm_fs_discriminator__ is generated.
|
||||
; V01: .type __llvm_fs_discriminator__,@object # @__llvm_fs_discriminator__
|
||||
|
@ -7,8 +7,8 @@
|
||||
; CHECK: .loc 1 0 3 # foo.c:0:3
|
||||
; CHECK: .loc 1 9 5 is_stmt 1 discriminator 2 # foo.c:9:5
|
||||
; CHECK: .loc 1 0 5 is_stmt 0 # :0:5
|
||||
; CHECK: .loc 1 9 5 is_stmt 1 discriminator 2 # foo.c:9:5
|
||||
; CHECK: .loc 1 0 5 is_stmt 0 # :0:5
|
||||
; CHECK: .loc 1 9 5 discriminator 2 # foo.c:9:5
|
||||
; CHECK: .loc 1 0 5 # :0:5
|
||||
; CHECK: .loc 1 7 3 is_stmt 1 discriminator 2 # foo.c:7:3
|
||||
; CHECK: .loc 1 14 3 # foo.c:14:3
|
||||
; Check that variable __llvm_fs_discriminator__ is NOT generated.
|
||||
|
@ -198,9 +198,6 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
; Like the test for @foo1, but check that the inserted dbg.value does not
|
||||
; affect codegen. The CHECK items below should always be identical to @foo1,
|
||||
; minus the DEBUG_VALUE line and changes in labels..
|
||||
; We produce a scope-line source location for the entry block, and then
|
||||
; explicitly terminate it in the second block, as there are no other source
|
||||
; locations in the function.
|
||||
define double @foo1_g(float %p1, double %p2, double %p3) nounwind !dbg !4 {
|
||||
; CHECK-LABEL: foo1_g:
|
||||
; CHECK: .file 1 "." "test.c"
|
||||
@ -211,7 +208,6 @@ define double @foo1_g(float %p1, double %p2, double %p3) nounwind !dbg !4 {
|
||||
; CHECK-NEXT: movsd {{.*#+}} xmm0 = [1.25E+0,0.0E+0]
|
||||
; CHECK-NEXT: jae .LBB6_1
|
||||
; CHECK-NEXT: # %bb.2: # %entry
|
||||
; CHECK-NEXT: .loc 1 0 0 is_stmt 0
|
||||
; CHECK-NEXT: addsd %xmm2, %xmm0
|
||||
; CHECK-NEXT: jmp .LBB6_3
|
||||
; CHECK-NEXT: .LBB6_1:
|
||||
|
@ -14,9 +14,7 @@
|
||||
# CHECK: Address Line Column File ISA Discriminator OpIndex Flags
|
||||
# CHECK-NEXT: ---
|
||||
# CHECK-NEXT: 25 0 1 0 0 0 is_stmt
|
||||
# CHECK-NEXT: 0 0 1 0 0 0
|
||||
# CHECK-NEXT: 29 28 1 0 0 0 is_stmt prologue_end
|
||||
# CHECK-NEXT: 29 28 1 0 0 0 is_stmt
|
||||
# CHECK-NEXT: 29 28 1 0 0 0 is_stmt end_sequence
|
||||
--- |
|
||||
source_filename = "t.ll"
|
||||
|
@ -59,4 +59,4 @@ attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "frame-pointer"=
|
||||
|
||||
; CHECK: Address Line Column File ISA Discriminator OpIndex Flags
|
||||
; CHECK: ------------------ ------ ------ ------ --- ------------- ------- -------------
|
||||
; CHECK: 0x000000000000000a 2 0 1 0 42 0 is_stmt{{$}}
|
||||
; CHECK: 0x000000000000000a 2 0 1 0 42 0 {{$}}
|
||||
|
@ -19,9 +19,8 @@ entry:
|
||||
}
|
||||
|
||||
;; In a function with no source location, but multiple blocks, there will be
|
||||
;; an opening scope-line, but it'll be automagically terminated when we switch
|
||||
;; to a new block. Test for this behaviour, and preserve the unconditional
|
||||
;; branch by compiling -O0.
|
||||
;; an opening scope-line. Test for this behaviour, and preserve the
|
||||
;; unconditional branch by compiling -O0.
|
||||
|
||||
; UNOPT-LABEL: bar:
|
||||
; UNOPT-NEXT: .Lfunc_begin1:
|
||||
@ -30,7 +29,6 @@ entry:
|
||||
; UNOPT-NEXT: movq %rdi, -8(%rsp)
|
||||
; UNOPT-NEXT: jmp .LBB1_1
|
||||
; UNOPT-LABEL: .LBB1_1:
|
||||
; UNOPT-NEXT: .loc 1 0 0 is_stmt 0
|
||||
; UNOPT-NEXT: movq -8(%rsp), %rax
|
||||
|
||||
define dso_local noundef i32 @bar(ptr nocapture noundef writeonly %baz) local_unnamed_addr !dbg !20 {
|
||||
|
@ -1,37 +0,0 @@
|
||||
;; Checks that when an instruction at the start of a BasicBlock has the same
|
||||
;; DebugLoc as the instruction at the end of the previous BasicBlock, we add
|
||||
;; is_stmt to the new line, to ensure that we still step on it if we arrive from
|
||||
;; a BasicBlock other than the immediately preceding one.
|
||||
|
||||
; RUN: %llc_dwarf -mtriple=x86_64-unknown-linux -O0 -filetype=obj < %s | llvm-dwarfdump --debug-line - | FileCheck %s
|
||||
|
||||
; CHECK: {{0x[0-9a-f]+}} 13 5 {{.+}} is_stmt
|
||||
; CHECK-NEXT: {{0x[0-9a-f]+}} 13 5 {{.+}} is_stmt
|
||||
|
||||
define void @_Z1fi(i1 %cond) !dbg !21 {
|
||||
entry:
|
||||
br i1 %cond, label %if.then2, label %if.else4
|
||||
|
||||
if.then2: ; preds = %entry
|
||||
br label %if.end8, !dbg !24
|
||||
|
||||
if.else4: ; preds = %entry
|
||||
%0 = load i32, ptr null, align 4, !dbg !24
|
||||
%call5 = call i1 null(i32 %0)
|
||||
ret void
|
||||
|
||||
if.end8: ; preds = %if.then2
|
||||
ret void
|
||||
}
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!20}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 20.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
|
||||
!1 = !DIFile(filename: "test.cpp", directory: "/home/gbtozers/dev/upstream-llvm")
|
||||
!20 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!21 = distinct !DISubprogram(name: "f", linkageName: "_Z1fi", scope: !1, file: !1, line: 7, type: !22, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0)
|
||||
!22 = distinct !DISubroutineType(types: !23)
|
||||
!23 = !{null}
|
||||
!24 = !DILocation(line: 13, column: 5, scope: !25)
|
||||
!25 = distinct !DILexicalBlock(scope: !21, file: !1, line: 11, column: 27)
|
Loading…
x
Reference in New Issue
Block a user