[llvm-commits] [llvm] r98048 - /llvm/trunk/lib/CodeGen/MachineCSE.cpp

Evan Cheng evan.cheng at apple.com
Mon Mar 8 22:38:18 PST 2010


Author: evancheng
Date: Tue Mar  9 00:38:17 2010
New Revision: 98048

URL: http://llvm.org/viewvc/llvm-project?rev=98048&view=rev
Log:
Allow more cross-rc coalescing.

Modified:
    llvm/trunk/lib/CodeGen/MachineCSE.cpp

Modified: llvm/trunk/lib/CodeGen/MachineCSE.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineCSE.cpp?rev=98048&r1=98047&r2=98048&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineCSE.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineCSE.cpp Tue Mar  9 00:38:17 2010
@@ -93,16 +93,19 @@
     if (TII->isMoveInstr(*DefMI, SrcReg, DstReg, SrcSubIdx, DstSubIdx) &&
         TargetRegisterInfo::isVirtualRegister(SrcReg) &&
         !SrcSubIdx && !DstSubIdx) {
-      const TargetRegisterClass *SRC = MRI->getRegClass(SrcReg);
-      const TargetRegisterClass *RC  = MRI->getRegClass(Reg);
-      if (SRC == RC || RC->hasSubClass(SRC)) {
-        DEBUG(dbgs() << "Coalescing: " << *DefMI);
-        DEBUG(dbgs() << "*** to: " << *MI);
-        MO.setReg(SrcReg);
-        DefMI->eraseFromParent();
-        ++NumCoalesces;
-        Changed = true;
-      }
+      const TargetRegisterClass *SRC   = MRI->getRegClass(SrcReg);
+      const TargetRegisterClass *RC    = MRI->getRegClass(Reg);
+      const TargetRegisterClass *NewRC = getCommonSubClass(RC, SRC);
+      if (!NewRC)
+        continue;
+      DEBUG(dbgs() << "Coalescing: " << *DefMI);
+      DEBUG(dbgs() << "*** to: " << *MI);
+      MO.setReg(SrcReg);
+      if (NewRC != SRC)
+        MRI->setRegClass(SrcReg, NewRC);
+      DefMI->eraseFromParent();
+      ++NumCoalesces;
+      Changed = true;
     }
   }
 





More information about the llvm-commits mailing list