[PATCH][AVX512] Generate masking instruction variants with tablegen
Robert Khasanov
rob.khasanov at gmail.com
Thu Aug 7 04:04:06 PDT 2014
Hi Adam,
I have some notes to your change.
* Some instructions have masking versions, but don't have zero-masking
(e.g. stores and other write memory instructions). I think there are two
different ways to take into account:
1) make separate multiclasses for (r +rk + rkz) and (r+rk);
2) Propose new feature to TableGen to create conditional def/defm in
multiclasses. This feature will be suitable also for embedded broadcasts:
only instructions w/ 32 and 64 bit element size have embedded broadcast
feature. However, I don't know how it can look in syntax, I have just an
idea and I'm not sure the community will accept this.
* There are some instructions that have not lowering patterns from LLVM IR
instructions. I suggest to use !if(x,[(set RC:$dst, RHS)],[]) where x is
some condition or bit that is passed from multiclass arg.
You can fix last item in this patch or later in separate patch.
LGTM
2014-08-07 9:28 GMT+04:00 Adam Nemet <anemet at apple.com>:
> Hi,
>
> After adding the masking variants to several instructions, I have decided
> to
> experiment with generating these from the non-masking/unconditional
> variant. This will hopefully reduce the amount repetition that we currently
> have in order to define an instruction with all its variants (for a reg/mem
> instruction this would be 6 instruction defs and 2 Pat<> for the
> intrinsic).
>
> The patch is the first cut that is currently only applied to valignd/q to
> keep
> the patch small.
>
> A few notes on the approach:
>
> * In order to stitch together the dag for both the conditional and the
> unconditional patterns I pass the RHS of the set rather than the full
> pattern (set dest, RHS).
> * Rather than subclassing each instruction base class (e.g. AVX512AIi8),
> with a masking variant which wouldn't scale, I derived the masking
> instructions from a new base class AVX512 (this is just I<> with
> Requires<HasAVX512>). The instructions derive from this now, plus a new
> set
> of classes that add the format bits and everything else that instruction
> base class provided (i.e. AVX512AIi8 vs. AVX512AIi8Base).
>
> I hope we can go incrementally from here. I expect that:
>
> * We will need different variants of the masking class. One example is
> instructions requiring three vector sources. In this case we tie one of
> the
> source operands to dest rather than a new implicit source operand ($src0)
> * Add the zero-masking variant
> * Add more AVX512*Base classes as new uses are added
>
> I've looked at X86.td.expanded before and after to make sure that nothing
> got
> lost for valignd/q.
>
> Please let me know if it looks good.
>
> Adam
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140807/78f00abf/attachment.html>
More information about the llvm-commits
mailing list