Need to insert all moves due to PHI nodes before *ALL* jumps in a predecessor

basic block, as there could be multiple.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5016 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Misha Brukman 2002-12-13 11:55:59 +00:00
parent 920536333c
commit 74676da6f1

View File

@ -92,21 +92,6 @@ namespace {
regs = Desc.ImplicitDefs;
while (*regs)
RegsUsed[*regs++] = 1;
/*
for (int i = MI->getNumOperands() - 1; i >= 0; --i) {
const MachineOperand &op = MI->getOperand(i);
if (op.isMachineRegister())
RegsUsed[op.getAllocatedRegNum()] = 1;
}
for (int i = MI->getNumImplicitRefs() - 1; i >= 0; --i) {
const MachineOperand &op = MI->getImplicitOp(i);
if (op.isMachineRegister())
RegsUsed[op.getAllocatedRegNum()] = 1;
}
*/
}
void cleanupAfterFunction() {
@ -297,6 +282,16 @@ bool RegAllocSimple::runOnMachineFunction(MachineFunction &Fn) {
MachineBasicBlock::iterator opI = opBlock->end();
MachineInstr *opMI = *(--opI);
const MachineInstrInfo &MII = TM.getInstrInfo();
// must backtrack over ALL the branches in the previous block, until no more
while ((MII.isBranch(opMI->getOpcode()) || MII.isReturn(opMI->getOpcode()))
&& opI != opBlock->begin())
{
opMI = *(--opI);
}
// move back to the first branch instruction so new instructions
// are inserted right in front of it and not in front of a non-branch
++opI;
// insert the move just before the return/branch
if (MII.isReturn(opMI->getOpcode()) || MII.isBranch(opMI->getOpcode()))