Once we have a way to fold spill code reloads into instructions, we have a way to...
authorChris Lattner <sabre@nondot.org>
Tue, 17 Feb 2004 04:08:37 +0000 (04:08 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 17 Feb 2004 04:08:37 +0000 (04:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11517 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocLocal.cpp

index de12c6a5732734ba51c5be6f0869bda7ac7efc5d..dc375cc54e69659961c4f2edd7133312ac2d65f6 100644 (file)
@@ -487,9 +487,24 @@ MachineInstr *RA::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
     return MI;
   }
 
-  unsigned PhysReg = getReg(MBB, MI, VirtReg);
-
+  // Otherwise, we need to fold it into the current instruction, or reload it.
+  // If we have registers available to hold the value, use them.
   const TargetRegisterClass *RC = MF->getSSARegMap()->getRegClass(VirtReg);
+  unsigned PhysReg = getFreeReg(RC);
+
+  if (PhysReg == 0) {  // No registers available...
+    /// If we can fold this spill into this instruction, do so now.
+    if (0) {
+      // TODO
+      return MI;
+    }
+
+    // It looks like we can't fold this virtual register load into this
+    // instruction.  Force some poor hapless value out of the register file to
+    // make room for the new register, and reload it.
+    PhysReg = getReg(MBB, MI, VirtReg);
+  }
+
   int FrameIndex = getStackSpaceFor(VirtReg, RC);
 
   markVirtRegModified(VirtReg, false);   // Note that this reg was just reloaded