[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