[llvm-branch-commits] [llvm] [CodeGen][AMDGPU] Prepare rematerializer for multi-def remat support (NFC) (PR #197579)

Lucas Ramirez via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jun 9 07:47:48 PDT 2026


================
@@ -202,34 +202,37 @@ void Rematerializer::updateLiveIntervals() {
     });
 
     // Update intervals for unrematerializable operands.
-    for (unsigned MOIdx : getUnrematableOprds(RegIdx)) {
-      Register UnrematReg = UpdateReg.DefMI->getOperand(MOIdx).getReg();
+    for (const auto &[UnrematReg, Mask] : getUnrematableDeps(RegIdx)) {
       if (!SeenUnrematRegs.insert(UnrematReg).second)
         continue;
       LIS.removeInterval(UnrematReg);
       LIS.createAndComputeVirtRegInterval(UnrematReg);
       LLVM_DEBUG(
-          dbgs() << "  Re-computed interval for register "
-                 << printReg(UnrematReg, &TRI,
-                             UpdateReg.DefMI->getOperand(MOIdx).getSubReg(),
-                             &MRI)
-                 << '\n');
+          dbgs() << "  Re-computed interval for unrematerializable register "
+                 << printReg(UnrematReg, &TRI, 0, &MRI) << " with lanemask "
+                 << Mask << '\n');
     }
   }
   LISUpdates.clear();
 }
 
 bool Rematerializer::isMOIdenticalAtUses(MachineOperand &MO,
                                          ArrayRef<SlotIndex> Uses) const {
-  if (Uses.empty())
-    return true;
-  Register Reg = MO.getReg();
   unsigned SubIdx = MO.getSubReg();
   LaneBitmask Mask = SubIdx ? TRI.getSubRegIndexLaneMask(SubIdx)
-                            : MRI.getMaxLaneMaskForVReg(Reg);
+                            : MRI.getMaxLaneMaskForVReg(MO.getReg());
+  return isRegIdenticalAtUses(
+      MO.getReg(), Mask,
+      LIS.getInstructionIndex(*MO.getParent()).getRegSlot(true), Uses);
+}
+
+bool Rematerializer::isRegIdenticalAtUses(Register Reg, LaneBitmask Mask,
+                                          SlotIndex RefSlot,
+                                          ArrayRef<SlotIndex> Uses) const {
+  if (Uses.empty())
----------------
lucas-rami wrote:

It doesn't happen currently but felt semantically correct to me. I will remove the check as the rest of the function produces the same result anyway.

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


More information about the llvm-branch-commits mailing list