[LLVMdev] undefs in phis
Evan Cheng
evan.cheng at apple.com
Mon Feb 2 15:54:10 PST 2009
On Feb 2, 2009, at 1:05 PM, David Greene wrote:
> On Monday 02 February 2009 14:29, Evan Cheng wrote:
>> On Feb 2, 2009, at 12:12 PM, David Greene wrote:
>>> On Monday 02 February 2009 13:14, Evan Cheng wrote:
>>>> I am sorry I don't really follow it. Is this what you are
>>>> describing?
>>>>
>>>> %v1177 = undef
>>>> ...
>>>> loop:
>>>> ...
>>>> %v1176 = op ...
>>>> = %v1177
>>>> %v1177 = %v1176
>>>> jmp loop
>>>>
>>>> Why is not safe to coalesce the 2 registers?
>>>
>>> Not quite. The original code is:
>>>
>>> %v1177 = undef
>>> %v1645 = ...
>>> loop:
>>> %v1176 = %v1645
>>> ...
>>> = %v1176
>>> = %v1177
>>> %v1645 = op ...
>>> %v1177 = %v1176
>>> jmp loop
>>>
>>> We can't coalesce %v1177 and %v1176 legally. But we do.
>>
>> Seriously, why not? In the first iteration, it's totally legal for
>> v1177 has the same value as v1176. It's defined by an undef, it's
>> allowed to have contain any value.
>
> Think about what will happen the 2nd iteration. %v1177 will have
> the value of
> %v1645 which is wrong. This is because %v1176 in bb74 will be
> replaced with
> %v1177. That's incorrect.
Ok, right. The trick to fixing is to make sure the valno of the def of
v1177 hasPHIKill to true and make sure the coalescer checks it.
Evan
>
>
> -Dave
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list