Complex patterns in .td file - a question

Demikhovsky, Elena elena.demikhovsky at intel.com
Wed Aug 13 00:01:48 PDT 2014


Hi Nadav, Craig, Adam,

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?
Or on some stage it becomes unreadable?

Thank you.

multiclass avx512_int_broadcast_reg_pat<string InstName, SDNode OpNode,
                                        RegisterClass KRC, RegisterClass DestRC,
                                        RegisterClass SrcRC, ValueType vt,
                                        ValueType ivt, ValueType svt,
                                        string SubRI = ""> {
  def : Pat<(vt (OpNode  (svt SrcRC:$src))),
           (!cast<Instruction>(InstName##"r")
           !if(!eq(SubRI, ""), (svt SrcRC:$src),
             (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;
  let AddedComplexity = 30 in {
    def : Pat<(vt (vselect KRC:$mask, (OpNode (svt SrcRC:$src)),
                                       DestRC:$src0)),
              (!cast<Instruction>(InstName##"rk") DestRC:$src0, KRC:$mask,
              !if(!eq(SubRI, ""), (svt SrcRC:$src),
              (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;

    def : Pat<(vt (vselect KRC:$mask, (OpNode (svt SrcRC:$src)),
                                      (vt (bitconvert (ivt immAllZerosV))))),
              (!cast<Instruction>(InstName##"rkz") KRC:$mask,
              !if(!eq(SubRI, ""), (svt SrcRC:$src),
              (SUBREG_TO_REG (i32 0), SrcRC:$src, !cast<SubRegIndex>(SubRI))))>;
  }
}

multiclass avx512_int_broadcast_reg_pat_vl<string InstName, string elsz,
                                           string vsz, string vsz256,
                                           string vsz128, Predicate prd,
                                           string SubRI = ""> {
  let Predicates = [prd] in
    defm : avx512_int_broadcast_reg_pat<InstName##"Z", X86VBroadcast,
                                   !cast<RegisterClass>("VK"##vsz##"WM"),
                                   VR512, !cast<RegisterClass>("GR"##elsz),
                                   !cast<ValueType>("v"##vsz##"i"##elsz),
                                   v16i32, !cast<ValueType>("i"##elsz), SubRI>;
  let Predicates = [prd, HasVLX] in {
    defm : avx512_int_broadcast_reg_pat<InstName##"Z256", X86VBroadcast,
                                   !cast<RegisterClass>("VK"##vsz256##"WM"),
                                   VR256X, !cast<RegisterClass>("GR"##elsz),
                                   !cast<ValueType>("v"##vsz256##"i"##elsz),
                                   v8i32, !cast<ValueType>("i"##elsz), SubRI>;
    defm : avx512_int_broadcast_reg_pat<InstName##"Z128", X86VBroadcast,
                                   !cast<RegisterClass>("VK"##vsz128##"WM"),
                                   VR128X, !cast<RegisterClass>("GR"##elsz),
                                   !cast<ValueType>("v"##vsz128##"i"##elsz),
                                   v4i32, !cast<ValueType>("i"##elsz), SubRI>;
  }
}

defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTBr", "8", "64", "32", "16",
                                       HasBWI, "sub_8bit">;
defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTWr", "16", "32", "16", "8",
                                       HasBWI, "sub_16bit">;
defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTDr", "32", "16", "8", "4",
                                       HasAVX512>;
defm : avx512_int_broadcast_reg_pat_vl<"VPBROADCASTQr", "64", "8", "4", "2",
                                       HasAVX512>, VEX_W;

-        Elena



---------------------------------------------------------------------
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140813/ae1e3be8/attachment.html>


More information about the llvm-commits mailing list