[llvm] [PHIElimination] Verify reappropriated COPY is of similar register class (PR #146337)

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 1 00:30:40 PDT 2025


================
@@ -584,9 +584,13 @@ void PHIEliminationImpl::LowerPHINode(MachineBasicBlock &MBB,
     // Reuse an existing copy in the block if possible.
     if (IncomingReg.isVirtual()) {
       MachineInstr *DefMI = MRI->getUniqueVRegDef(SrcReg);
+      const TargetRegisterClass *RC1 = MRI->getRegClass(SrcReg);
+      const TargetRegisterClass *RC2 = MRI->getRegClass(IncomingReg);
       if (DefMI && DefMI->isCopy() && DefMI->getParent() == &opBlock &&
-          MRI->use_empty(SrcReg)) {
+          MRI->use_empty(SrcReg) && RC2->hasSuperClassEq(RC1)) {
         DefMI->getOperand(0).setReg(IncomingReg);
+        if (LV)
+          LV->getVarInfo(SrcReg).AliveBlocks.clear();
----------------
mikaelholmen wrote:

This seems to solve the bbi-108462_3_aarch64.mir problem 

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


More information about the llvm-commits mailing list