[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.
Evan
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