[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