mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 07:59:57 +00:00
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:
parent
920536333c
commit
74676da6f1
@ -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()))
|
||||
|
Loading…
Reference in New Issue
Block a user