[LLVMdev] undefs in phis

Evan Cheng evan.cheng at apple.com
Fri Jan 30 14:54:38 PST 2009


On Jan 30, 2009, at 1:52 PM, David Greene wrote:

> On Friday 30 January 2009 15:10, David Greene wrote:
>
>> This still looks correct.  The coalescer then says:
>>
>> 4360	%reg1177<def> = FsMOVAPSrr %reg1176<kill>	 ; srcLine 0
>> 		Inspecting %reg1176,0 = [2702,4362:0)  0 at 2702-(4362) and  
>> %reg1177,0 =
>> [2700,3712:0)[3768,3878:0)[4362,4372:0)  0 at 4362-(3878):
>> 		Joined.  Result = %reg1177,0 = [2700,4372:0)  0 at 2702-(4362)
>>
>> Eh?  How can it coalesce these two?  Doesn't %reg1176:[2702,4362:0)  
>> overlap
>> %reg1177:[2700,3712:0)?
>>
>> I will look into this further.  Just wanted to check in and make  
>> sure.
>
> Ok, the Coalescer thinks %reg1177 value number 0 is defined by a  
> copy from
> %reg1176.  I guess that could be considered correct because %reg1177  
> is
> defined by a copy from %reg1176 in bb108.  It thus considers the  
> intervals to
> not interfere.
>
> But this can't be right.  I think the problem is that there should  
> be two
> value numbers for %reg1177.  We already have VN 0 defined from  
> %reg1176.
> What coalescing is missing is that %reg1177 is ALSO defined by an  
> implicit def
> from bb134.  That's the value number we're missing and is why  
> coalescing
> incorrectly removed the copy.

I don't have the whole context to understand why you think this is a  
bug. An implicit_def doesn't actually define any value. So we don't  
care if a live interval overlaps live ranges defined by an implicit_def.

That said, the way we models undef in machine instruction has always  
bugged me. I thought about adding a MachineOperand type to represent  
undef. Then we don't have to muddle the semantics of a "def". To me,  
that's a cleaner representation, but it will require work.

Evan

>
>
> So it appears we can't get rid of the IMPLICIT DEF.  Evan, do you  
> agree?
>
>                                            -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