[PATCH] D62314: [DebugInfo] Use FrameDestroy to extend stack locations to the end of a function

Jeremy Morse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 24 05:55:07 PDT 2019


jmorse updated this revision to Diff 201209.
jmorse added a comment.

Move the change in a comment into this patch; remove an un-necessary test comment.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62314/new/

https://reviews.llvm.org/D62314

Files:
  lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
  test/DebugInfo/COFF/pieces.ll
  test/DebugInfo/X86/dbg-addr.ll
  test/DebugInfo/X86/debug-loc-offset.mir
  test/DebugInfo/X86/pr19307.mir


Index: test/DebugInfo/X86/pr19307.mir
===================================================================
--- test/DebugInfo/X86/pr19307.mir
+++ test/DebugInfo/X86/pr19307.mir
@@ -1,11 +1,5 @@
 # RUN: llc -o - %s -start-after=patchable-function -O0 | FileCheck %s
 
-# XFAIL: *
-# Marked XFail due to the removal of "ChangingRegs" from
-# DbgEntityHistoryCalculator, shortening the checked range to not reach the
-# end of the function. Fixed by an about-to-land patch using the FrameDestroy
-# flag to identify the end of functions.
-
 # Generated from the source file pr19307.cc:
 # #include <string>
 # void parse_range(unsigned long long &offset, unsigned long long &limit,
Index: test/DebugInfo/X86/debug-loc-offset.mir
===================================================================
--- test/DebugInfo/X86/debug-loc-offset.mir
+++ test/DebugInfo/X86/debug-loc-offset.mir
@@ -1,11 +1,5 @@
 # RUN: llc -o - %s -start-after=patchable-function -filetype=obj -O0 -mtriple=i386-unknown-linux-gnu -dwarf-version=4 | llvm-dwarfdump -v - | FileCheck %s
 
-# XFAIL: *
-# Marked XFail due to the removal of "ChangingRegs" from
-# DbgEntityHistoryCalculator, shortening the checked range to not reach the
-# end of the function. Fixed by an about-to-land patch using the FrameDestroy
-# flag to identify the end of functions.
-
 # From the code:
 #
 # debug-loc-offset1.cc
Index: test/DebugInfo/X86/dbg-addr.ll
===================================================================
--- test/DebugInfo/X86/dbg-addr.ll
+++ test/DebugInfo/X86/dbg-addr.ll
@@ -9,12 +9,8 @@
 ; CHECK-LABEL: use_dbg_addr:
 ; CHECK: #DEBUG_VALUE: use_dbg_addr:o <- [$rsp+0]
 
-; FIXME: Avoid the use of a single-location location list and use
-; DW_AT_start_offset instead.
-
 ; DWARF: DW_TAG_variable
-; DWARF-NEXT:              DW_AT_location (0x00000000
-; DWARF-NEXT:                          [0x{{.*}}, 0x{{.*}}): DW_OP_breg7 RSP+0)
+; DWARF-NEXT:              DW_AT_location (DW_OP_fbreg +0)
 ; DWARF-NEXT:              DW_AT_name ("o")
 
 
Index: test/DebugInfo/COFF/pieces.ll
===================================================================
--- test/DebugInfo/COFF/pieces.ll
+++ test/DebugInfo/COFF/pieces.ll
@@ -104,8 +104,9 @@
 ; ASM:         #APP
 ; ASM:         #NO_APP
 ; ASM:         movl    [[offset_o_x]](%rsp), %eax          # 4-byte Reload
-; ASM: [[spill_o_x_end:\.Ltmp[0-9]+]]:
 ; ASM:         retq
+; ASM-NEXT: [[spill_o_x_end:\.Ltmp[0-9]+]]:
+; ASM-NEXT: .Lfunc_end4:
 
 
 ; ASM-LABEL:  .short  4423                    # Record kind: S_GPROC32_ID
@@ -231,7 +232,7 @@
 ; ASM:        .asciz  "bitpiece_spill"        # Function name
 ; ASM:        .short  4414                    # Record kind: S_LOCAL
 ; ASM:        .asciz  "o"
-; ASM:        .cv_def_range    [[spill_o_x_start]] [[spill_o_x_end]], "E\021O\001A\000$\000\000\000"
+; ASM:        .cv_def_range    [[spill_o_x_start]] .Lfunc_end4, "E\021O\001A\000$\000\000\000"
 
 ; OBJ-LABEL: GlobalProcIdSym {
 ; OBJ:         Kind: S_GPROC32_ID (0x1147)
Index: lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
+++ lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
@@ -275,9 +275,12 @@
             clobberRegisterUses(RegVars, MO.getReg(), DbgValues, LiveEntries,
                                 MI);
           // If this is a register def operand, it may end a debug value
-          // range. Ignore defs of the frame register in the prologue.
+          // range. Ignore frame-register defs in the epilogue and prologue,
+          // we expect debuggers to understand that stack-locations are
+          // invalid outside of the function body.
           else if (MO.getReg() != FrameReg ||
-                   !MI.getFlag(MachineInstr::FrameSetup)) {
+                   (!MI.getFlag(MachineInstr::FrameDestroy) &&
+                   !MI.getFlag(MachineInstr::FrameSetup))) {
             for (MCRegAliasIterator AI(MO.getReg(), TRI, true); AI.isValid();
                  ++AI)
               clobberRegisterUses(RegVars, *AI, DbgValues, LiveEntries, MI);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62314.201209.patch
Type: text/x-patch
Size: 4146 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190524/73f37167/attachment.bin>


More information about the llvm-commits mailing list