[llvm-commits] [llvm] r62144 - in /llvm/trunk: lib/CodeGen/SimpleRegisterCoalescing.cpp test/CodeGen/X86/2009-01-12-CoalescerBug.ll

Evan Cheng echeng at apple.com
Mon Jan 12 22:08:49 PST 2009


Fixed.

Evan
On Jan 12, 2009, at 8:01 PM, Nick Lewycky wrote:

> Evan Cheng wrote:
>> Author: evancheng
>> Date: Mon Jan 12 21:57:45 2009
>> New Revision: 62144
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=62144&view=rev
>> Log:
>> FIX llvm-gcc bootstrap on x86_64 linux. If a virtual register is  
>> copied to a physical register, it's not necessarily defined by a  
>> copy. We have to watch out it doesn't clobber any sub-register that  
>> might be live during its live interval. If the live interval  
>> crosses a basic block, then it's not safe to check with the less  
>> conservative check (by scanning uses and defs) because it's  
>> possible a sub-register might be live out of the block.
>>
>> Added:
>>    llvm/trunk/test/CodeGen/X86/2009-01-12-CoalescerBug.ll
>> Modified:
>>    llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp
>>
>> Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=62144&r1=62143&r2=62144&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Mon Jan 12  
>> 21:57:45 2009
>> @@ -1731,7 +1731,20 @@
>>     // If it's coalescing a virtual register to a physical  
>> register, estimate
>>     // its live interval length. This is the *cost* of scanning an  
>> entire live
>>     // interval. If the cost is low, we'll do an exhaustive check  
>> instead.
>> +
>> +    // If this is something like this:
>> +    // BB1:
>> +    // v1024 = op
>> +    // ...
>> +    // BB2:
>> +    // ...
>> +    // RAX   = v1024
>> +    //
>> +    // That is, the live interval of v1024 crosses a bb. Then we  
>> can't rely on
>> +    // less conservative check. It's possible a sub-register is  
>> defined before
>> +    // v1024 (or live in) and live out of BB1.
>>     if (RHS.containsOneValue() &&
>> +	li_->intervalIsInOneMBB(RHS) &&
>
> Tab!
>
>>         li_->getApproximateInstructionCount(RHS) <= 10) {
>>       // Perform a more exhaustive check for some common cases.
>>       if (li_->conflictsWithPhysRegRef(RHS, LHS.reg, true,  
>> JoinedCopies))
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list