<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>Hi Nadav, Craig, Adam,</div>
<div> </div>
<div>Robert works on SKX and I’m reviewing the code. I have a question about the form of patterns. Let’s assume that everything is correct here. Do you think that it is the suitable form? And shorter is better?</div>
<div>Or on some stage it becomes unreadable? </div>
<div> </div>
<div>Thank you.</div>
<div> </div>
<div>multiclass avx512_int_broadcast_reg_pat<string InstName, SDNode OpNode,</div>
<div>                                        RegisterClass KRC, RegisterClass DestRC,</div>
<div>                                        RegisterClass SrcRC, ValueType vt,</div>
<div>                                        ValueType ivt, ValueType svt,</div>
<div>                                        string SubRI = ""> {</div>
<div>  def : Pat<(vt (OpNode  (svt SrcRC:$src))),</div>
<div>           (!cast<Instruction>(InstName##"r")</div>
<div>           !if(!eq(SubRI, ""), (svt SrcRC:$src),</div>
<div>             (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;</div>
<div>  let AddedComplexity = 30 in {</div>
<div>    def : Pat<(vt (vselect KRC:$mask, (OpNode (svt SrcRC:$src)),</div>
<div>                                       DestRC:$src0)),</div>
<div>              (!cast<Instruction>(InstName##"rk") DestRC:$src0, KRC:$mask,</div>
<div>              !if(!eq(SubRI, ""), (svt SrcRC:$src),</div>
<div>              (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;</div>
<div> </div>
<div>    def : Pat<(vt (vselect KRC:$mask, (OpNode (svt SrcRC:$src)),</div>
<div>                                      (vt (bitconvert (ivt immAllZerosV))))),</div>
<div>              (!cast<Instruction>(InstName##"rkz") KRC:$mask,</div>
<div>              !if(!eq(SubRI, ""), (svt SrcRC:$src),</div>
<div>              (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;</div>
<div>  }</div>
<div>}</div>
<div> </div>
<div>multiclass avx512_int_broadcast_reg_pat_vl<string InstName, string elsz,</div>
<div>                                           string vsz, string vsz256,</div>
<div>                                           string vsz128, Predicate prd,</div>
<div>                                           string SubRI = ""> {</div>
<div>  let Predicates = [prd] in</div>
<div>    defm : avx512_int_broadcast_reg_pat<InstName##"Z", X86VBroadcast,</div>
<div>                                   !cast<RegisterClass>("VK"##vsz##"WM"),</div>
<div>                                   VR512, !cast<RegisterClass>("GR"##elsz),</div>
<div>                                   !cast<ValueType>("v"##vsz##"i"##elsz),</div>
<div>                                   v16i32, !cast<ValueType>("i"##elsz), SubRI>;</div>
<div>  let Predicates = [prd, HasVLX] in {</div>
<div>    defm : avx512_int_broadcast_reg_pat<InstName##"Z256", X86VBroadcast,</div>
<div>                                   !cast<RegisterClass>("VK"##vsz256##"WM"),</div>
<div>                                   VR256X, !cast<RegisterClass>("GR"##elsz),</div>
<div>                                   !cast<ValueType>("v"##vsz256##"i"##elsz),</div>
<div>                                   v8i32, !cast<ValueType>("i"##elsz), SubRI>;</div>
<div>    defm : avx512_int_broadcast_reg_pat<InstName##"Z128", X86VBroadcast,</div>
<div>                                   !cast<RegisterClass>("VK"##vsz128##"WM"),</div>
<div>                                   VR128X, !cast<RegisterClass>("GR"##elsz),</div>
<div>                                   !cast<ValueType>("v"##vsz128##"i"##elsz),</div>
<div>                                   v4i32, !cast<ValueType>("i"##elsz), SubRI>;</div>
<div>  }</div>
<div>}</div>
<div> </div>
<div>defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTBr", "8", "64", "32", "16",</div>
<div>                                       HasBWI, "sub_8bit">;</div>
<div>defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTWr", "16", "32", "16", "8",</div>
<div>                                       HasBWI, "sub_16bit">;</div>
<div>defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTDr", "32", "16", "8", "4",</div>
<div>                                       HasAVX512>;</div>
<div>defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTQr", "64", "8", "4", "2",</div>
<div>                                       HasAVX512>, VEX_W;</div>
<div> </div>
<ul style="margin:0;padding-left:36pt;">
<font face="Times New Roman" size="3" color="#31849B"><span style="font-size:12pt;">
<li><b><i> Elena</i></b></li></span></font>
</ul>
<div> </div>
<div> </div>
<div> </div>
</span></font>
<p>---------------------------------------------------------------------<br>
Intel Israel (74) Limited</p>

<p>This e-mail and any attachments may contain confidential material for<br>
the sole use of the intended recipient(s). Any review or distribution<br>
by others is strictly prohibited. If you are not the intended<br>
recipient, please contact the sender and delete all copies.</p></body>
</html>