[llvm] [RegAlloc] Add additional tracing in InlineSpiller::rematerializeFor (PR #160761)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 25 12:14:02 PDT 2025
https://github.com/preames created https://github.com/llvm/llvm-project/pull/160761
We didn't have trace logging for two cases in this routine which makes it sometimes hard to tell what is going on. In addition to debug trace statements, add comments to explain the logic behind the early exits which don't mark the virtual register live. Suggestions on how to word these more precisely very welcome; I'm not clear I understand all the intrinicies of this code myself.
>From 65ab27245466e7bd5eb609206332ccfb0c69067a Mon Sep 17 00:00:00 2001
From: Philip Reames <preames at rivosinc.com>
Date: Thu, 25 Sep 2025 12:05:33 -0700
Subject: [PATCH] [RegAlloc] Add additional tracing in
InlineSpiller::rematerializeFor
We didn't have trace logging for two cases in this routine which makes
it sometimes hard to tell what is going on. In addition to debug trace
statements, add comments to explain the logic behind the early exits
which don't mark the virtual register live. Suggestions on how to
word these more precisely very welcome; I'm not clear I understand all
the intrinicies of this code myself.
---
llvm/lib/CodeGen/InlineSpiller.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp
index 98c56f739ad4e..0c2b74c907d2a 100644
--- a/llvm/lib/CodeGen/InlineSpiller.cpp
+++ b/llvm/lib/CodeGen/InlineSpiller.cpp
@@ -642,8 +642,12 @@ bool InlineSpiller::reMaterializeFor(LiveInterval &VirtReg, MachineInstr &MI) {
SmallVector<std::pair<MachineInstr *, unsigned>, 8> Ops;
VirtRegInfo RI = AnalyzeVirtRegInBundle(MI, VirtReg.reg(), &Ops);
- if (!RI.Reads)
+ // Defs without reads will be deleted if unused after remat is
+ // completed for other users of the virtual register.
+ if (!RI.Reads) {
+ LLVM_DEBUG(dbgs() << "\tskipping remat of def " << MI);
return false;
+ }
SlotIndex UseIdx = LIS.getInstructionIndex(MI).getRegSlot(true);
VNInfo *ParentVNI = VirtReg.getVNInfoAt(UseIdx.getBaseIndex());
@@ -657,8 +661,13 @@ bool InlineSpiller::reMaterializeFor(LiveInterval &VirtReg, MachineInstr &MI) {
return true;
}
- if (SnippetCopies.count(&MI))
+ // Snippets copies are ignored for remat, and will be deleted if they
+ // don't feed a live user after rematerialization completes.
+ if (SnippetCopies.count(&MI)) {
+ LLVM_DEBUG(dbgs() << "\tskipping remat snippet copy for " << UseIdx << '\t'
+ << MI);
return false;
+ }
LiveInterval &OrigLI = LIS.getInterval(Original);
VNInfo *OrigVNI = OrigLI.getVNInfoAt(UseIdx);
More information about the llvm-commits
mailing list