[llvm-commits] [llvm] r78318 - in /llvm/trunk: include/llvm/CodeGen/RegisterScavenging.h lib/CodeGen/RegisterScavenging.cpp
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Aug 6 11:42:06 PDT 2009
On 06/08/2009, at 19.23, Jakob Stoklund Olesen wrote:
>> void RegScavenger::enterBasicBlock(MachineBasicBlock *mbb) {
>> MachineFunction &MF = *mbb->getParent();
>> const TargetMachine &TM = MF.getTarget();
>> @@ -94,6 +117,7 @@
>> assert((NumPhysRegs == 0 || NumPhysRegs == TRI->getNumRegs()) &&
>> "Target changed?");
>>
>> + // Self-initialize.
>> if (!MBB) {
>> NumPhysRegs = TRI->getNumRegs();
>> RegsAvailable.resize(NumPhysRegs);
>> @@ -104,29 +128,23 @@
>> // Create callee-saved registers bitvector.
>> CalleeSavedRegs.resize(NumPhysRegs);
>> const unsigned *CSRegs = TRI->getCalleeSavedRegs();
>> - if (CSRegs != NULL)
>> - for (unsigned i = 0; CSRegs[i]; ++i)
>> - CalleeSavedRegs.set(CSRegs[i]);
>> - }
>
> Perhaps CalleeSavedRegs could be renamed to UsedCalleeSavedRegs or
> something along those lines? Just so it is clear it doesn't correspond
> to TRI->getCalleeSavedRegs().
One more thing: FindUnusedReg takes an ExCalleeSaved parameter. When
that is set, all the non-spilled CSRs must be excluded. Otherwise a
non-spilled CSR could be used without being spilled first.
From ARMLoadStoreOptimizer.cpp:
// Find a scratch register. Make sure it's a call clobbered
register or
// a spilled callee-saved register.
unsigned Scratch = RS->FindUnusedReg(&ARM::GPRRegClass, true);
I think what you want is a FreeCalleeSavedRegs variable.
/jakob
More information about the llvm-commits
mailing list