[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