[llvm-commits] [llvm] r113016 - /llvm/trunk/lib/CodeGen/RegAllocFast.cpp

Jim Grosbach grosbach at apple.com
Fri Sep 3 17:11:59 PDT 2010


Houston, we have lift-off.

(Sep 03 14:53) rev=[113016] success #3868: build successful

On Sep 3, 2010, at 3:04 PM, Dale Johannesen wrote:

> Jim believes this will fix the PPC buildbot.  I've started a run, ETA around 5 PM (Pacific).
> 
> On Sep 3, 2010, at 2:45 PMPDT, Jim Grosbach wrote:
> 
>> Author: grosbach
>> Date: Fri Sep  3 16:45:15 2010
>> New Revision: 113016
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=113016&view=rev
>> Log:
>> previous patch was a little too tricky for its own good. Don't try to
>> overload UserInInstr. Explicitly check Allocatable. The early exit in the
>> condition will mean the performance impact of the extra test should be
>> minimal.
>> 
>> Modified:
>>   llvm/trunk/lib/CodeGen/RegAllocFast.cpp
>> 
>> Modified: llvm/trunk/lib/CodeGen/RegAllocFast.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocFast.cpp?rev=113016&r1=113015&r2=113016&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/RegAllocFast.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/RegAllocFast.cpp Fri Sep  3 16:45:15 2010
>> @@ -113,9 +113,6 @@
>>    // Allocatable - vector of allocatable physical registers.
>>    BitVector Allocatable;
>> 
>> -    // Reserved - vector of reserved physical registers.
>> -    BitVector Reserved;
>> -
>>    // SkippedInstrs - Descriptors of instructions whose clobber list was
>>    // ignored because all registers were spilled. It is still necessary to
>>    // mark all the clobbered registers as used by the function.
>> @@ -501,7 +498,8 @@
>>  // First try to find a completely free register.
>>  for (TargetRegisterClass::iterator I = AOB; I != AOE; ++I) {
>>    unsigned PhysReg = *I;
>> -    if (PhysRegState[PhysReg] == regFree && !UsedInInstr.test(PhysReg))
>> +    if (PhysRegState[PhysReg] == regFree && !UsedInInstr.test(PhysReg) &&
>> +        Allocatable.test(PhysReg))
>>      return assignVirtToPhysReg(LRE, PhysReg);
>>  }
>> 
>> @@ -510,6 +508,8 @@
>> 
>>  unsigned BestReg = 0, BestCost = spillImpossible;
>>  for (TargetRegisterClass::iterator I = AOB; I != AOE; ++I) {
>> +    if (!Allocatable.test(*I))
>> +      continue;
>>    unsigned Cost = calcSpillCost(*I);
>>    // Cost is 0 when all aliases are already disabled.
>>    if (Cost == 0)
>> @@ -712,7 +712,7 @@
>>  }
>> 
>>  // Restore UsedInInstr to a state usable for allocating normal virtual uses.
>> -  UsedInInstr = Reserved;
>> +  UsedInInstr.reset();
>>  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
>>    MachineOperand &MO = MI->getOperand(i);
>>    if (!MO.isReg() || (MO.isDef() && !MO.isEarlyClobber())) continue;
>> @@ -838,7 +838,7 @@
>>    }
>> 
>>    // Track registers used by instruction.
>> -    UsedInInstr = Reserved;
>> +    UsedInInstr.reset();
>> 
>>    // First scan.
>>    // Mark physreg uses and early clobbers as used.
>> @@ -916,7 +916,7 @@
>> 
>>    // Track registers defined by instruction - early clobbers and tied uses at
>>    // this point.
>> -    UsedInInstr = Reserved;
>> +    UsedInInstr.reset();
>>    if (hasEarlyClobbers) {
>>      for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
>>        MachineOperand &MO = MI->getOperand(i);
>> @@ -1014,7 +1014,6 @@
>> 
>>  UsedInInstr.resize(TRI->getNumRegs());
>>  Allocatable = TRI->getAllocatableSet(*MF);
>> -  Reserved = TRI->getReservedRegs(*MF);
>> 
>>  // initialize the virtual->physical register map to have a 'null'
>>  // mapping for all virtual registers
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20100903/854b4552/attachment.html>


More information about the llvm-commits mailing list