[LLVMdev] Extend SLPVectorizer to struct operations that are isomorphic to vector operations?

Nadav Rotem nrotem at apple.com
Thu Apr 17 16:03:48 PDT 2014


On Apr 17, 2014, at 3:41 PM, Robison, Arch <arch.robison at intel.com> wrote:

> While playing with SLPVectorizer, I notice that it will happily vectorize cases involving extractelement/insertelement, but won't vectorize isomorphic cases involving extractvalue/insertvalue (such as the attached example).  Is that something that could be straightforward to add to SLPVectorizer, or are there some hard issue?  In particular, the transformation would seem to require casts of structures to vectors and back.  The bitcast instruction requires a non-aggregate value.
> 
> I'm thinking such vectorization might be useful for codes that use structs for tuples, like (x,y,z) coordinates or complex numbers.

Vectorization of struct values is not supported because it is not something we considered until now. It never showed up in any workload I looked at. It should not be too difficult to implement. We already insert casts when we vectorize loads and stores from memory. 

> 
> - Arch D. Robison
> 
> 
> <vec4.ll>_______________________________________________
> 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