[llvm] [AMDGPU] Physical register tracking in GCN trackers. (PR #177223)

Dhruva Chakrabarti via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 5 05:58:44 PST 2026


================
@@ -779,30 +957,92 @@ GCNDownwardRPTracker::bumpDownwardPressure(const MachineInstr *MI,
     if (LastUseMask.none())
       continue;
 
-    auto It = LiveRegs.find(Reg);
-    LaneBitmask LiveMask = It != LiveRegs.end() ? It->second : LaneBitmask(0);
+    auto It = VirtLiveRegs.find(Reg);
+    LaneBitmask LiveMask =
+        It != VirtLiveRegs.end() ? It->second : LaneBitmask(0);
     LaneBitmask NewMask = LiveMask & ~LastUseMask;
-    TempPressure.inc(Reg, LiveMask, NewMask, *MRI);
+    TempVirtPressure.inc(Reg, LiveMask, NewMask, *MRI);
   }
 
-  // Generate liveness for defs.
+  // Generate liveness for virtual register defs.
   for (const VRegMaskOrUnit &Def : RegOpers.Defs) {
     if (!Def.VRegOrUnit.isVirtualReg())
       continue;
     Register Reg = Def.VRegOrUnit.asVirtualReg();
-    auto It = LiveRegs.find(Reg);
-    LaneBitmask LiveMask = It != LiveRegs.end() ? It->second : LaneBitmask(0);
+    auto It = VirtLiveRegs.find(Reg);
+    LaneBitmask LiveMask =
+        It != VirtLiveRegs.end() ? It->second : LaneBitmask(0);
     LaneBitmask NewMask = LiveMask | Def.LaneMask;
-    TempPressure.inc(Reg, LiveMask, NewMask, *MRI);
+    TempVirtPressure.inc(Reg, LiveMask, NewMask, *MRI);
+  }
+
+  // Process physical registers (only if enabled).
+  if (TrackPhysRegs) {
+    const SIRegisterInfo *STRI = static_cast<const SIRegisterInfo *>(TRI);
+    SmallSet<Register, 8> SeenRegs;
+
+    // Process physical register defs.
+    for (const auto &MO : MI->all_defs()) {
+      Register Reg = MO.getReg();
+      if (!STRI->shouldTrackRegisterForPressure(*MRI, Reg) ||
+          !SeenRegs.insert(Reg).second)
+        continue;
+
+      // Check if any unit of this register is not currently live.
+      bool WasNotLive = false;
+      for (MCRegUnit Unit : TRI->regunits(Reg)) {
+        if (PhysLiveRegs.contains(VirtRegOrUnit(static_cast<MCRegUnit>(Unit)))
+                .none()) {
+          WasNotLive = true;
+          break;
+        }
+      }
----------------
dhruvachak wrote:

Refactored the code.

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


More information about the llvm-commits mailing list