diff options
author | Chris Lattner <sabre@nondot.org> | 2004-02-17 04:08:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-02-17 04:08:37 +0000 |
commit | ba9e3e2fb13996ef568ee5688d9846b5271192a2 (patch) | |
tree | 0806d6c14ed2652c4fc0fea1078477c576e40a37 /llvm/lib/CodeGen/RegAllocLocal.cpp | |
parent | 4f7c2d9e5e21c6e4ac87a877f642727b72afb01a (diff) | |
download | bcm5719-llvm-ba9e3e2fb13996ef568ee5688d9846b5271192a2.tar.gz bcm5719-llvm-ba9e3e2fb13996ef568ee5688d9846b5271192a2.zip |
Once we have a way to fold spill code reloads into instructions, we have a way to use it. :)
llvm-svn: 11517
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocLocal.cpp')
-rw-r--r-- | llvm/lib/CodeGen/RegAllocLocal.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/RegAllocLocal.cpp b/llvm/lib/CodeGen/RegAllocLocal.cpp index de12c6a5732..dc375cc54e6 100644 --- a/llvm/lib/CodeGen/RegAllocLocal.cpp +++ b/llvm/lib/CodeGen/RegAllocLocal.cpp @@ -487,9 +487,24 @@ MachineInstr *RA::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *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); + 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); markVirtRegModified(VirtReg, false); // Note that this reg was just reloaded |