diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2002-12-13 12:33:31 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2002-12-13 12:33:31 +0000 |
commit | 0868667f78bb712a1b307cf525df105b35699924 (patch) | |
tree | 56d861758a0cceeec56d3f94a709a17025e111b0 /lib/CodeGen/RegAllocSimple.cpp | |
parent | 84b7207df89ba65a20f392891569c493f6918751 (diff) |
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
Diffstat (limited to 'lib/CodeGen/RegAllocSimple.cpp')
-rw-r--r-- | lib/CodeGen/RegAllocSimple.cpp | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/lib/CodeGen/RegAllocSimple.cpp b/lib/CodeGen/RegAllocSimple.cpp index 6def3a178a..cbe131c81d 100644 --- a/lib/CodeGen/RegAllocSimple.cpp +++ b/lib/CodeGen/RegAllocSimple.cpp @@ -253,7 +253,7 @@ bool RegAllocSimple::runOnMachineFunction(MachineFunction &Fn) { 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 @@ bool RegAllocSimple::runOnMachineFunction(MachineFunction &Fn) { ++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(); |