[LLVMdev] proposal to add MVT::vAny type

Evan Cheng evan.cheng at apple.com
Sun Aug 9 15:42:49 PDT 2009


SSE is suffering from the same issue. We end up with a lot of def :  
Pat  patterns. I am not sure whether having vAny will solve it though.  
We don't want to match to any vector type rather any vector type of a  
given size. It would be nice if we can use PatFrag to specify type  
matching code for dagisel.

Evan

On Aug 9, 2009, at 1:41 PM, Bob Wilson <bob.wilson at apple.com> wrote:

>
> On Aug 9, 2009, at 8:37 AM, Chris Lattner wrote:
>> I really do think that bitcast is the right way to go here.  I ran
>> into a couple of similar problems when bringing up the altivec port.
>> For example, at one time we'd get "all zero vectors" of different
>> MVTs, which would not be CSEd.
>>
>> The fix for this was to be really disciplined about what types to  
>> make
>> things in, and use bitcasts to convert the types when appropriate.
>> For example, the all zeros vector is now only created as a <4 x i32>
>> (IIRC) and bitcasted to the desired type.
>
> Yes, I used that approach, at least to some extent, for Neon.  There
> may be more to do to make sure things are getting CSEd the way we  
> want.
>
>> If this is impacting
>> intrinsics, it seems that the front-end could do a similar thing to
>> canonicalize the intrinsics early.  As you know, we do prefer to have
>> as few intrinsics as possible.
>
> That is exactly what I'm trying to accomplish here (fewer
> intrinsics).  I think I can do it with bitcasts, though.
>
>>
>> Can you describe a bit more about what fAny would do for you, maybe
>> with an example?  I'm sorry that I don't know much at all about
>> neon...
>
> It doesn't do anything fundamental.  It just seems like a better fit.
> Neon has vectors of both integers and floats.  Currently my choices
> for describing the type constraints for a Neon intrinsic are iAny or
> fAny, but those also allow scalars.  vAny would more accurately
> indicate that only vector types are allowed, and it would also avoid
> the need for bitcasting.
>
> It sounds like it is not a popular idea, so I'll let it rest.
>
>>
>> -Chris
>>
>>
>>>
>>> I had been thinking about trying to bitcast my way out of this, but
>>> it
>>> struck me that it would make a lot more sense to have a new  
>>> MVT::vAny
>>> type that TableGen would match to any vector type.  That would more
>>> accurately reflect the type constraints on these intrinsics.
>>>
>>> It seems like since these "*Any" types are confined to TableGen, it
>>> should be pretty easy to add another one.  I looked at the places
>>> using iAny and fAny and they seem pretty easy to extend to handle a
>>> new vAny type.  Does this seem like a good idea?  Any objections?
>>>
>>> I'd like to get the Neon intrinsics finalized before the 2.6  
>>> release,
>>> since it may be harder to change them later.
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> 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