Fixed a bug where moves due to phis were being neglected.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5019 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/RegAllocSimple.cpp b/lib/CodeGen/RegAllocSimple.cpp
index 6def3a1..cbe131c 100644
--- a/lib/CodeGen/RegAllocSimple.cpp
+++ b/lib/CodeGen/RegAllocSimple.cpp
@@ -253,7 +253,7 @@
       if (targetReg.isVirtualRegister()) {
         physReg = getFreeReg(virtualReg);
       } else {
-        physReg = targetReg.getAllocatedRegNum();
+        physReg = virtualReg;
       }
 
       // Find the register class of the target register: should be the
@@ -293,29 +293,25 @@
         ++opI; 
 
 
-        // insert the move just before the return/branch
-        if (MII.isReturn(opMI->getOpcode()) || MII.isBranch(opMI->getOpcode()))
+        // Retrieve the constant value from this op, move it to target
+        // register of the phi
+        if (opVal.getType() == MachineOperand::MO_SignExtendedImmed ||
+            opVal.getType() == MachineOperand::MO_UnextendedImmed)
         {
-          // Retrieve the constant value from this op, move it to target
-          // register of the phi
-          if (opVal.getType() == MachineOperand::MO_SignExtendedImmed ||
-              opVal.getType() == MachineOperand::MO_UnextendedImmed)
-          {
-            opI = RegInfo->moveImm2Reg(opBlock, opI, physReg,
-                                       (unsigned) opVal.getImmedValue(),
-                                       dataSize);
-            saveVirtRegToStack(opBlock, opI, virtualReg, physReg);
-          } else {
-            // Allocate a physical register and add a move in the BB
-            unsigned opVirtualReg = (unsigned) opVal.getAllocatedRegNum();
-            unsigned opPhysReg; // = getFreeReg(opVirtualReg);
-            opI = moveUseToReg(opBlock, opI, opVirtualReg, opPhysReg);
-            opI = RegInfo->moveReg2Reg(opBlock, opI, physReg, opPhysReg,
-                                       dataSize);
-            // Save that register value to the stack of the TARGET REG
-            saveVirtRegToStack(opBlock, opI, virtualReg, opPhysReg);
-          }
-        } 
+          opI = RegInfo->moveImm2Reg(opBlock, opI, physReg,
+                                     (unsigned) opVal.getImmedValue(),
+                                     dataSize);
+          saveVirtRegToStack(opBlock, opI, virtualReg, physReg);
+        } else {
+          // Allocate a physical register and add a move in the BB
+          unsigned opVirtualReg = (unsigned) opVal.getAllocatedRegNum();
+          unsigned opPhysReg; // = getFreeReg(opVirtualReg);
+          opI = moveUseToReg(opBlock, opI, opVirtualReg, physReg);
+          //opI = RegInfo->moveReg2Reg(opBlock, opI, physReg, opPhysReg,
+          //                           dataSize);
+          // Save that register value to the stack of the TARGET REG
+          saveVirtRegToStack(opBlock, opI, virtualReg, physReg);
+        }
 
         // make regs available to other instructions
         clearAllRegs();