[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