[PATCH][X86] AVX512: Add vbroadcasti*

Adam Nemet anemet at apple.com
Thu Jun 26 22:28:51 PDT 2014


On Jun 26, 2014, at 6:38 AM, Demikhovsky, Elena <elena.demikhovsky at intel.com> wrote:

> 
> I just suggest to separate broadcasting of one element from broadcasting of sub-vector.
> If you are not masking, the same broadcast instruction may be used for multiple types
> 
> (v8i64 (X86SubVectorBroadcast (v4i64 (load ..))) - VBROADCASTI64X4
> (v16i32 (X86SubVectorBroadcast (v8i32 (load ..))) - VBROADCASTI64X4

Hi Elena,

Just wanted to also comment on this part specifically.  I am not sure why this wouldn’t work with X86VBroadcast as well:

(v16i32 (X86VBroadcast (v8i32 (load ..))) - VBROADCASTI64X4

Unless of course you are alluding to the same issue I describe in the other email.

Adam

> multiclass avx512_int_subvec_broadcast_rm<bits<8> opc, string OpcodeStr,
>                          X86MemOperand x86memop, PatFrag ld_frag,
>                          RegisterClass DstRC, ValueType OpVT, ValueType SrcVT,
>                          RegisterClass KRC> {
>  let mayLoad = 1 in {
>  def rm : AVX5128I<opc, MRMSrcMem, (outs DstRC:$dst), (ins x86memop:$src),
>                  !strconcat(OpcodeStr, " \t{$src, $dst|$dst, $src}"),
>                  [(set DstRC:$dst, 
>                    (OpVT (X86SubVectorBroadcast (ld_frag addr:$src))))]>, EVEX;
>  def krm : AVX5128I<opc, MRMSrcMem, (outs DstRC:$dst), (ins KRC:$mask,
>                                                         x86memop:$src),
>                  !strconcat(OpcodeStr, 
>                      " \t{$src, ${dst} {${mask}} {z}|${dst} {${mask}} {z}, $src}"),
>                  [(set DstRC:$dst, (OpVT (X86SubVectorBroadcast KRC:$mask, 
>                                     (ld_frag addr:$src))))]>, EVEX, EVEX_KZ;
>  }
> }
> 
> -  Elena
> 
> 
> -----Original Message-----
> From: Adam Nemet [mailto:anemet at apple.com] 
> Sent: Wednesday, June 25, 2014 21:40
> To: Demikhovsky, Elena
> Cc: llvm-commits
> Subject: Re: [PATCH][X86] AVX512: Add vbroadcasti*
> 
> Hi Elena,
> 
> On Jun 25, 2014, at 12:35 AM, Demikhovsky, Elena <elena.demikhovsky at intel.com> wrote:
> 
>> Hi Adam,
>> 
>> I don't think that we should mix instructions like VBROADCASTI32X4 to regular, one element, broadcast.
>> 
>> I suggest to write one more template specially for these 2 instructions. It may be used for inserting sub-vector, where sub-vector is loaded from memory.
>> I want to say  that lowering model of these 2 instructions is different. You can leave the substitution pattern empty.
> 
> Can you please be elaborate?  In this patch I just applied my conclusions from my AVX2 broadcast work (http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140526/106526.html and the first patch in http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140526/219238.html).
> 
> To summarize, I was suggesting to use the same lowering for all broadcasts there without using LLVM intrinsics.  At least that is the plan I outlined there for VBROADCAST[IF]128 which correspond to these instructions.  The main benefit is that exposing the memory loads rather than hiding them in an intrinsic opens them up to optimizations (e.g. LICM).
> 
> The idea is to use generic nodes to implement these front-end builtins then combine them into X86VBroadcast SDNodes.  In the case of vbroadcasti4x64 this would amount to: (v8i64 (X86VBroadcast (v4i64 (load ...)))).
> 
> Do you disagree with this direction for codegen?
> 
> I can of course keep them separate for now until I have prototyped either AVX2's vbroadcasti128 or the AVX512 counterparts.  What I want to make sure at this point that we're on the same page moving toward more of the codegen work.
> 
> Thanks,
> Adam
> 
>> -  Elena
>> 
>> -----Original Message-----
>> From: Adam Nemet [mailto:anemet at apple.com]
>> Sent: Wednesday, June 25, 2014 00:07
>> To: Demikhovsky, Elena
>> Cc: llvm-commits
>> Subject: [PATCH][X86] AVX512: Add vbroadcasti*
>> 
>> Hi Elena,
>> 
>> I have modified the avx512_int_broadcast_rm multiclass to fit these instructions as well.
>> 
>> The individual patches provide a bit more information.  Please let me know if it looks good to you.
>> 
>> Thanks,
>> Adam
>> 
>> ---------------------------------------------------------------------
>> Intel Israel (74) Limited
>> 
>> This e-mail and any attachments may contain confidential material for 
>> the sole use of the intended recipient(s). Any review or distribution 
>> by others is strictly prohibited. If you are not the intended 
>> recipient, please contact the sender and delete all copies.
>> 
> 
> ---------------------------------------------------------------------
> Intel Israel (74) Limited
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 





More information about the llvm-commits mailing list