[llvm-branch-commits] [llvm] [AMDGPU] Physical register tracking in GCN trackers. (PR #184275)

Dhruva Chakrabarti via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Mar 5 12:49:56 PST 2026


================
@@ -471,6 +493,77 @@ LaneBitmask llvm::getLiveLaneMask(unsigned Reg, SlotIndex SI,
   return getLiveLaneMask(LIS.getInterval(Reg), SI, MRI, LaneMaskFilter);
 }
 
+bool GCNRPTracker::isUnitLiveAt(MCRegUnit Unit, SlotIndex SI) const {
+  const LiveRange *LR = LIS.getCachedRegUnit(Unit);
+  if (!LR)
+    return false;
+  return LR->liveAt(SI);
+}
+
+bool GCNRPTracker::allRegUnitsLive(Register Reg) const {
+  assert(MRI && "MRI not initialized");
+  const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
+  return llvm::all_of(TRI->regunits(Reg), [&](MCRegUnit Unit) {
+    return PhysLiveRegs.contains(VirtRegOrUnit(Unit)).any();
+  });
+}
+
+bool GCNRPTracker::checkRegKilled(Register Reg, SlotIndex SI) const {
+  assert(MRI && "MRI not initialized");
+  const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
+  return llvm::any_of(TRI->regunits(Reg), [&](MCRegUnit Unit) {
+    return PhysLiveRegs.contains(VirtRegOrUnit(Unit)).any() &&
+           !isUnitLiveAt(Unit, SI);
+  });
+}
+
+bool GCNRPTracker::eraseKilledUnits(Register Reg, SlotIndex SI) {
+  assert(MRI && "MRI not initialized");
+  const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
----------------
dhruvachak wrote:

I don't know what you mean here.

https://github.com/llvm/llvm-project/pull/184275


More information about the llvm-branch-commits mailing list