Allow the register scavenger to spill multiple registers
authorHal Finkel <hfinkel@anl.gov>
Fri, 22 Mar 2013 23:32:27 +0000 (23:32 +0000)
committerHal Finkel <hfinkel@anl.gov>
Fri, 22 Mar 2013 23:32:27 +0000 (23:32 +0000)
commitdc3beb90178fc316f63790812b22201884eaa017
treed3574ac59a9d120549452dd0f94db575bb04096e
parenta2e3834d1644889484ef3a8a94189b7369e3eaf9
Allow the register scavenger to spill multiple registers

This patch lets the register scavenger make use of multiple spill slots in
order to guarantee that it will be able to provide multiple registers
simultaneously.

To support this, the RS's API has changed slightly: setScavengingFrameIndex /
getScavengingFrameIndex have been replaced by addScavengingFrameIndex /
isScavengingFrameIndex / getScavengingFrameIndices.

In forthcoming commits, the PowerPC backend will use this capability in order
to implement the spilling of condition registers, and some special-purpose
registers, without relying on r0 being reserved. In some cases, spilling these
registers requires two GPRs: one for addressing and one to hold the value being
transferred.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177774 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/RegisterScavenging.h
lib/CodeGen/PrologEpilogInserter.cpp
lib/CodeGen/RegisterScavenging.cpp
lib/Target/AArch64/AArch64FrameLowering.cpp
lib/Target/ARM/ARMBaseRegisterInfo.cpp
lib/Target/ARM/ARMFrameLowering.cpp
lib/Target/ARM/Thumb1RegisterInfo.cpp
lib/Target/Mips/MipsSEFrameLowering.cpp
lib/Target/PowerPC/PPCFrameLowering.cpp
lib/Target/XCore/XCoreFrameLowering.cpp