mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-04 21:30:49 +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;
|
regs = Desc.ImplicitDefs;
|
||||||
while (*regs)
|
while (*regs)
|
||||||
RegsUsed[*regs++] = 1;
|
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() {
|
void cleanupAfterFunction() {
|
||||||
@ -297,6 +282,16 @@ bool RegAllocSimple::runOnMachineFunction(MachineFunction &Fn) {
|
|||||||
MachineBasicBlock::iterator opI = opBlock->end();
|
MachineBasicBlock::iterator opI = opBlock->end();
|
||||||
MachineInstr *opMI = *(--opI);
|
MachineInstr *opMI = *(--opI);
|
||||||
const MachineInstrInfo &MII = TM.getInstrInfo();
|
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
|
// insert the move just before the return/branch
|
||||||
if (MII.isReturn(opMI->getOpcode()) || MII.isBranch(opMI->getOpcode()))
|
if (MII.isReturn(opMI->getOpcode()) || MII.isBranch(opMI->getOpcode()))
|
||||||
|
Loading…
Reference in New Issue
Block a user