================
@@ -555,29 +660,37 @@ void GCNUpwardRPTracker::recede(const MachineInstr &MI) {
GCNRegPressure DefPressure, ECDefPressure;
bool HasECDefs = false;
for (const MachineOperand &MO : MI.all_defs()) {
- if (!MO.getReg().isVirtual())
- continue;
-
Register Reg = MO.getReg();
- LaneBitmask DefMask = getDefRegMask(MO, *MRI);
- // Treat a def as fully live at the moment of definition: keep a record.
- if (MO.isEarlyClobber()) {
- ECDefPressure.inc(Reg, LaneBitmask::getNone(), DefMask, *MRI);
- HasECDefs = true;
- } else
- DefPressure.inc(Reg, LaneBitmask::getNone(), DefMask, *MRI);
+ if (Reg.isVirtual()) {
+ LaneBitmask DefMask = getDefRegMask(MO, *MRI);
- auto I = VirtLiveRegs.find(Reg);
- if (I == VirtLiveRegs.end())
- continue;
+ if (MO.isEarlyClobber()) {
+ ECDefPressure.inc(Reg, LaneBitmask::getNone(), DefMask, *MRI);
+ HasECDefs = true;
+ } else
+ DefPressure.inc(Reg, LaneBitmask::getNone(), DefMask, *MRI);
+
+ auto I = VirtLiveRegs.find(Reg);
+ if (I == VirtLiveRegs.end())
+ continue;
+
+ LaneBitmask &LiveMask = I->second;
+ LaneBitmask PrevMask = LiveMask;
+ LiveMask &= ~DefMask;
+ CurPressure.inc(Reg, PrevMask, LiveMask, *MRI);
+ if (LiveMask.none())
+ VirtLiveRegs.erase(I);
+ } else if (TrackPhysRegs && Reg.isPhysical() && MRI->isAllocatable(Reg)) {
----------------
macurtis-amd wrote:
nit: This conditional is repeated a few times. Might be nice to create a helper
for it.
https://github.com/llvm/llvm-project/pull/184275
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits