[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
Thu Jun 13 03:02:32 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL363245: [DebugInfo] Use FrameDestroy to extend stack locations to end-of-function (authored by jmorse, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D62314?vs=201209&id=204462#toc

Repository:
  rL LLVM

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

https://reviews.llvm.org/D62314

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


Index: llvm/trunk/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
+++ llvm/trunk/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);
Index: llvm/trunk/test/DebugInfo/COFF/pieces.ll
===================================================================
--- llvm/trunk/test/DebugInfo/COFF/pieces.ll
+++ llvm/trunk/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: llvm/trunk/test/DebugInfo/X86/dbg-addr.ll
===================================================================
--- llvm/trunk/test/DebugInfo/X86/dbg-addr.ll
+++ llvm/trunk/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: llvm/trunk/test/DebugInfo/X86/pr19307.mir
===================================================================
--- llvm/trunk/test/DebugInfo/X86/pr19307.mir
+++ llvm/trunk/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: llvm/trunk/test/DebugInfo/X86/debug-loc-offset.mir
===================================================================
--- llvm/trunk/test/DebugInfo/X86/debug-loc-offset.mir
+++ llvm/trunk/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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62314.204462.patch
Type: text/x-patch
Size: 4311 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190613/8e211879/attachment-0001.bin>


More information about the llvm-commits mailing list