[LLVMdev] Ideas for representing vector gather/scatter and masks in LLVM IR

Evan Cheng evan.cheng at apple.com
Mon Aug 4 15:02:48 PDT 2008

I agree with David. I don't like the implicit use of masks. That seems  
to unnecessarily complicate LLVM IR.


On Aug 4, 2008, at 2:02 PM, David Greene wrote:
>> While adding a mask operand to every instruction that needs it would
>> serve the intended purpose, it would also enlarge and complicate IR,
>> even in code that doesn't need masks. It's a common use-case to  
>> have a
>> single mask used by many adjacent instructions, so this would also be
>> highly redundant.
> But explicit is better than implicit in my experience.  It's also  
> the LLVM
> philosophy to be as explicit as possible.
>> An alternative that exploits this common use-case is to add a new
>> applymask instruction:
>>  %w = applymask <2 x f32> %v, <2 x i1> %m
>> The semantics would be to copy %v into %w, and implicitly apply  
>> mask %m
>> to all users (recursively) of %w, unless overridden by another
>> applymask. For example:
>>  %p = applymask <2 x f32*> %q, <2 x i1> %m
>>  %x = load <2 x f32*>* %p                   ; implicitly masked by %m
>>  %y = add <2 x f32> %x, %w                  ; implicitly masked by %m
>>  %z = mul <2 x f32> %y, %y                  ; implicitly masked by %m
> Yuck.  I don't like this at all.  It makes reading the IR harder  
> because now
> you need to worry about context.  Not all dependencies are readily  
> expressed
> in the instructions.  How would one express TableGen patterns for such
> things?
> My understanding is that we came away with a general agreement to add
> mask support to operations that can trap and to memory operations,   
> That
> would mean adding masks to floating-point arithmetic and memory  
> operations.
> As I recall, Chris experssed some interest in create separate  
> integer and fp
> arithmetic instructions anyway, so it doesn't seem to be a lot of  
> additional
> work to add masks to the fp side since instcombine, et. al. will  
> need to know
> about entirely new operations anyway.
> We concluded that operation results would be undefined for vector  
> elements
> corresponding to a zero mask bit.
> We also talked about adding a vector select, which is crucial for  
> any code
> that uses masks.
>                                                                -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