================
@@ -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

Reply via email to