[PATCH] D114365: [DebugInfo][6/N][InstrRef] Ignore stack-pointer clobbers on call instructions even more

Jeremy Morse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 22 09:06:43 PST 2021


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

(Add a CHECK-NOT: line to actually ensure that this behaviour doesn't regress)


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

https://reviews.llvm.org/D114365

Files:
  llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
  llvm/test/DebugInfo/X86/dbg-addr.ll


Index: llvm/test/DebugInfo/X86/dbg-addr.ll
===================================================================
--- llvm/test/DebugInfo/X86/dbg-addr.ll
+++ llvm/test/DebugInfo/X86/dbg-addr.ll
@@ -1,4 +1,4 @@
-; RUN: llc %s -o %t.s -experimental-debug-variable-locations=false
+; RUN: llc %s -o %t.s -experimental-debug-variable-locations=true
 ; RUN: llvm-mc -triple x86_64--linux %t.s -filetype=obj -o %t.o
 ; RUN: FileCheck < %t.s %s
 ; RUN: llvm-dwarfdump %t.o | FileCheck %s --check-prefix=DWARF
@@ -8,6 +8,7 @@
 
 ; CHECK-LABEL: use_dbg_addr:
 ; CHECK: #DEBUG_VALUE: use_dbg_addr:o <- [$rsp+0]
+; CHECK-NOT: #DEBUG_VALUE:
 
 ; DWARF: DW_TAG_variable
 ; DWARF-NEXT:              DW_AT_location (DW_OP_fbreg +0)
Index: llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
===================================================================
--- llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
+++ llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
@@ -1288,6 +1288,10 @@
   } else if (MI.isMetaInstruction())
     return;
 
+  auto IgnoreSPAlias = [this, &MI] (Register R) -> bool {
+    return MI.isCall() && MTracker->SPAliases.count(R);
+  };
+
   // Find the regs killed by MI, and find regmasks of preserved regs.
   // Max out the number of statically allocated elements in `DeadRegs`, as this
   // prevents fallback to std::set::count() operations.
@@ -1298,7 +1302,7 @@
     // Determine whether the operand is a register def.
     if (MO.isReg() && MO.isDef() && MO.getReg() &&
         Register::isPhysicalRegister(MO.getReg()) &&
-        !(MI.isCall() && MTracker->SPAliases.count(MO.getReg()))) {
+        !IgnoreSPAlias(MO.getReg())) {
       // Remove ranges of all aliased registers.
       for (MCRegAliasIterator RAI(MO.getReg(), TRI, true); RAI.isValid(); ++RAI)
         // FIXME: Can we break out of this loop early if no insertion occurs?
@@ -1342,11 +1346,14 @@
   // Look for any clobbers performed by a register mask. Only test locations
   // that are actually being tracked.
   for (auto L : MTracker->locations()) {
-    // Stack locations can't be clobbered by regmasks.
+    // Stack locations can't be clobbered by regmasks
     if (MTracker->isSpill(L.Idx))
       continue;
 
     Register Reg = MTracker->LocIdxToLocID[L.Idx];
+    if (IgnoreSPAlias(Reg))
+      continue;
+
     for (auto *MO : RegMaskPtrs)
       if (MO->clobbersPhysReg(Reg))
         TTracker->clobberMloc(L.Idx, MI.getIterator(), false);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114365.388941.patch
Type: text/x-patch
Size: 2459 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211122/b6995f5f/attachment-0001.bin>


More information about the llvm-commits mailing list