[LLVMdev] splat instruction

Tobias Grosser tobias at grosser.es
Thu Apr 5 06:55:04 PDT 2012


On 04/05/2012 02:50 PM, Jochen Wilhelmy wrote:
> Hi!
>
> as highlevel languages (like opencl) support operations with a vector
> on one side and a scalar on the other side (e.g. vector * scalar) it would
> be convenient if llvm ir would have a splat instruction that takes
> a scalar and produces a vector with all elements filled with the scalar.
>
> i assume that i'm not the first one who has this idea so what was
> the reason not to include such an instruction?
>
> a splat instruction would also be handy to scalarize the code as much
> as possible before outputting it again to a highlevel language.

Hi Jochen,

this can be modeled like this:

%single = insertelement <1 x i32> undef, i32 %scalar, i32 0
%vector = shufflevector <1 x i32> %single, <1 x i32> undef,
                           <8 x i32> zeroinitializer

As any new instruction needs special treatment all over LLVM, people in 
general tend to avoid new special-case instructions if the same 
computation can easily be expressed with existing instructions.

Cheers
Tobi



More information about the llvm-dev mailing list