[llvm-commits] [llvm] r56384 - in /llvm/trunk/lib/CodeGen: RegAllocLinearScan.cpp SimpleRegisterCoalescing.cpp

Evan Cheng evan.cheng at apple.com
Sun Sep 21 23:52:10 PDT 2008


On Sep 21, 2008, at 11:19 PM, Chris Lattner wrote:

> On Sep 21, 2008, at 11:17 PM, Evan Cheng wrote:
>>>> While that's the correct approach, it breaks all kinds of
>>>> assumptions
>>>> in liveintervals and the coalescer. It will make the problem much
>>>> more
>>>> complicated. I don't think it's worth the effort.
>>>
>>> What sorts of assumptions?
>>
>> That use must be 1 cycle after instruction cycle, def must be 2  
>> cycles
>> after it.
>
> What code makes this sort of assumption?  It seems fragile.

It's all over the place in coalescer. I'd prefer to fix it only when  
it's necessary. Not for early clobber.

>
>
>>> It typically doesn't have anything to do with a micro architecture,
>>> it
>>> has to do with the fact that an inline asm has multiple  
>>> instructions.
>>> For example if you had an inline asm with:
>>>
>>> "$out0 = inst1 $in1, 4
>>>  $out1 = inst2 $in2, 142"
>>>
>>> Then you'd have to mark $out0 as being an early clobber, because it
>>> is
>>> stored to before $in2 is read.
>>
>> Ewwww.
>
> Eww what? You don't like asms with multiple instructions?  Or you
> prefer CPUs that have instructions that would require this? ;-)

Ewww multi- instruction asm with this horribleness.

Some in-order execution cpu's may require this. Usually it would  
require HW bypass for reads to completed early enough for def to  
target the same registers. It's quite common for some instructions to  
not have the benefit of bypass in some in-order machines.

Evan

>
>
> -Chris
> _______________________________________________
> 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