forked from OSchip/llvm-project
Once we have a way to fold spill code reloads into instructions, we have a way to use it. :)
llvm-svn: 11517
This commit is contained in:
parent
4f7c2d9e5e
commit
ba9e3e2fb1
|
@ -487,9 +487,24 @@ MachineInstr *RA::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
|
||||||
return MI;
|
return MI;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned PhysReg = getReg(MBB, MI, VirtReg);
|
// Otherwise, we need to fold it into the current instruction, or reload it.
|
||||||
|
// If we have registers available to hold the value, use them.
|
||||||
const TargetRegisterClass *RC = MF->getSSARegMap()->getRegClass(VirtReg);
|
const TargetRegisterClass *RC = MF->getSSARegMap()->getRegClass(VirtReg);
|
||||||
|
unsigned PhysReg = getFreeReg(RC);
|
||||||
|
|
||||||
|
if (PhysReg == 0) { // No registers available...
|
||||||
|
/// If we can fold this spill into this instruction, do so now.
|
||||||
|
if (0) {
|
||||||
|
// TODO
|
||||||
|
return MI;
|
||||||
|
}
|
||||||
|
|
||||||
|
// It looks like we can't fold this virtual register load into this
|
||||||
|
// instruction. Force some poor hapless value out of the register file to
|
||||||
|
// make room for the new register, and reload it.
|
||||||
|
PhysReg = getReg(MBB, MI, VirtReg);
|
||||||
|
}
|
||||||
|
|
||||||
int FrameIndex = getStackSpaceFor(VirtReg, RC);
|
int FrameIndex = getStackSpaceFor(VirtReg, RC);
|
||||||
|
|
||||||
markVirtRegModified(VirtReg, false); // Note that this reg was just reloaded
|
markVirtRegModified(VirtReg, false); // Note that this reg was just reloaded
|
||||||
|
|
Loading…
Reference in New Issue