[llvm-commits] [llvm] r56326 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/RegAllocLinearScan.cpp

Dale Johannesen dalej at apple.com
Fri Sep 19 11:26:00 PDT 2008


On Sep 19, 2008, at 11:04 AMPDT, Evan Cheng wrote:

>
> On Sep 19, 2008, at 10:50 AM, Dale Johannesen wrote:
>
>>
>> On Sep 19, 2008, at 10:48 AMPDT, Evan Cheng wrote:
>>>>
>>>>  float weight;        // weight of this interval
>>>> +    bool isEarlyClobber;
>>>> +    bool overlapsEarlyClobber;
>>>
>>> Hi Dale,
>>>
>>> I don't think we want two bits. I'd rather go with one bit and have
>>> register allocator look at both use and def operands. What do you
>>> think?
>>
>> The comment explains why I don't want to do this:
>
> Sorry, I don't follow. Can you provide an example?

void foo (int x, int y) {
   int z=x+y;
   int w=x+y;
   int t;
   asm volatile ("%0 %1 %2" : "=&r"(t) : "r"(z), "r"(w));
}

%1 and %2 can share a register, but if there is no way to distinguish  
between earlyclobber and overlaps-earlyclobber, we can't do this.
In theory this is a matter of correctness, it is possible to construct  
cases where you run out of registers if you don't share.




More information about the llvm-commits mailing list