From: Simon Pilgrim Date: Wed, 29 Nov 2017 17:21:15 +0000 (+0000) Subject: [X86][AVX512] Add itinerary argument to all AVX512_maskable_* wrappers. NFCI X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c969b0dcc70a36fd256fe5ab4272dd401002467;p=llvm [X86][AVX512] Add itinerary argument to all AVX512_maskable_* wrappers. NFCI All default to NoItinerary git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319326 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 5eedd471f60..2a522402af3 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -323,7 +323,8 @@ multiclass AVX512_maskable_scalar O, Format F, X86VectorVTInfo _, multiclass AVX512_maskable_3src O, Format F, X86VectorVTInfo _, dag Outs, dag NonTiedIns, string OpcodeStr, string AttSrcAsm, string IntelSrcAsm, - dag RHS, bit IsCommutable = 0, + dag RHS, InstrItinClass itin = NoItinerary, + bit IsCommutable = 0, bit IsKCommutable = 0, SDNode Select = vselect, bit MaskOnly = 0> : @@ -334,16 +335,17 @@ multiclass AVX512_maskable_3src O, Format F, X86VectorVTInfo _, OpcodeStr, AttSrcAsm, IntelSrcAsm, !if(MaskOnly, (null_frag), RHS), (Select _.KRCWM:$mask, RHS, _.RC:$src1), - Select, "", NoItinerary, IsCommutable, IsKCommutable>; + Select, "", itin, IsCommutable, IsKCommutable>; multiclass AVX512_maskable_3src_scalar O, Format F, X86VectorVTInfo _, dag Outs, dag NonTiedIns, string OpcodeStr, string AttSrcAsm, string IntelSrcAsm, - dag RHS, bit IsCommutable = 0, + dag RHS, InstrItinClass itin = NoItinerary, + bit IsCommutable = 0, bit IsKCommutable = 0, bit MaskOnly = 0> : AVX512_maskable_3src; multiclass AVX512_maskable_in_asm O, Format F, X86VectorVTInfo _, @@ -1576,14 +1578,14 @@ let Constraints = "$src1 = $dst", ExeDomain = _.ExeDomain in { defm rr: AVX512_maskable_3src, EVEX_4V, - AVX5128IBase; + (_.VT (X86VPermi2X _.RC:$src1, _.RC:$src2, _.RC:$src3)), + NoItinerary, 1>, EVEX_4V, AVX5128IBase; defm rm: AVX512_maskable_3src, + (_.VT (bitconvert (_.LdFrag addr:$src3))))), NoItinerary, 1>, EVEX_4V, AVX5128IBase; } } @@ -1596,7 +1598,7 @@ multiclass avx512_perm_i_mb opc, string OpcodeStr, !strconcat("$src2, ${src3}", _.BroadcastStr ), (_.VT (X86VPermi2X _.RC:$src1, _.RC:$src2,(_.VT (X86VBroadcast (_.ScalarLdFrag addr:$src3))))), - 1>, AVX5128IBase, EVEX_4V, EVEX_B; + NoItinerary, 1>, AVX5128IBase, EVEX_4V, EVEX_B; } multiclass avx512_perm_i_sizes opc, string OpcodeStr, @@ -1644,14 +1646,14 @@ let Constraints = "$src1 = $dst", ExeDomain = _.ExeDomain in { defm rr: AVX512_maskable_3src, - EVEX_4V, AVX5128IBase; + (_.VT (X86VPermt2 _.RC:$src1, IdxVT.RC:$src2, _.RC:$src3)), + NoItinerary, 1>, EVEX_4V, AVX5128IBase; defm rm: AVX512_maskable_3src, + (bitconvert (_.LdFrag addr:$src3)))), NoItinerary, 1>, EVEX_4V, AVX5128IBase; } } @@ -1664,7 +1666,7 @@ multiclass avx512_perm_t_mb opc, string OpcodeStr, !strconcat("$src2, ${src3}", _.BroadcastStr ), (_.VT (X86VPermt2 _.RC:$src1, IdxVT.RC:$src2,(_.VT (X86VBroadcast (_.ScalarLdFrag addr:$src3))))), - 1>, AVX5128IBase, EVEX_4V, EVEX_B; + NoItinerary, 1>, AVX5128IBase, EVEX_4V, EVEX_B; } multiclass avx512_perm_t_sizes opc, string OpcodeStr, @@ -5797,22 +5799,23 @@ multiclass avx512_fma3p_213_rm opc, string OpcodeStr, SDNode OpNode, defm r: AVX512_maskable_3src, + (_.VT (OpNode _.RC:$src2, _.RC:$src1, _.RC:$src3)), NoItinerary, 1, 1>, AVX512FMA3Base, Sched<[WriteFMA]>; defm m: AVX512_maskable_3src, - AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; + (_.VT (OpNode _.RC:$src2, _.RC:$src1, (_.LdFrag addr:$src3))), + NoItinerary, 1, 0>, AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; defm mb: AVX512_maskable_3src, - AVX512FMA3Base, EVEX_B, Sched<[WriteFMA, ReadAfterLd]>; + _.RC:$src1,(_.VT (X86VBroadcast (_.ScalarLdFrag addr:$src3)))), + NoItinerary, 1, 0>, AVX512FMA3Base, EVEX_B, + Sched<[WriteFMA, ReadAfterLd]>; } } @@ -5822,8 +5825,8 @@ multiclass avx512_fma3_213_round opc, string OpcodeStr, SDNode OpNode, defm rb: AVX512_maskable_3src, - AVX512FMA3Base, EVEX_B, EVEX_RC, Sched<[WriteFMA]>; + (_.VT ( OpNode _.RC:$src2, _.RC:$src1, _.RC:$src3, (i32 imm:$rc))), + NoItinerary, 1, 1>, AVX512FMA3Base, EVEX_B, EVEX_RC, Sched<[WriteFMA]>; } multiclass avx512_fma3p_213_common opc, string OpcodeStr, SDNode OpNode, @@ -5864,14 +5867,14 @@ multiclass avx512_fma3p_231_rm opc, string OpcodeStr, SDNode OpNode, defm r: AVX512_maskable_3src, - AVX512FMA3Base, Sched<[WriteFMA]>; + (_.VT (OpNode _.RC:$src2, _.RC:$src3, _.RC:$src1)), NoItinerary, 1, 1, + vselect, 1>, AVX512FMA3Base, Sched<[WriteFMA]>; defm m: AVX512_maskable_3src, - AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; + (_.VT (OpNode _.RC:$src2, (_.LdFrag addr:$src3), _.RC:$src1)), + NoItinerary, 1, 0>, AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; defm mb: AVX512_maskable_3src opc, string OpcodeStr, SDNode OpNode, "$src2, ${src3}"##_.BroadcastStr, (_.VT (OpNode _.RC:$src2, (_.VT (X86VBroadcast(_.ScalarLdFrag addr:$src3))), - _.RC:$src1)), 1, 0>, AVX512FMA3Base, EVEX_B, + _.RC:$src1)), NoItinerary, 1, 0>, AVX512FMA3Base, EVEX_B, Sched<[WriteFMA, ReadAfterLd]>; } } @@ -5890,8 +5893,8 @@ multiclass avx512_fma3_231_round opc, string OpcodeStr, SDNode OpNode, defm rb: AVX512_maskable_3src, + (_.VT ( OpNode _.RC:$src2, _.RC:$src3, _.RC:$src1, (i32 imm:$rc))), + NoItinerary, 1, 1, vselect, 1>, AVX512FMA3Base, EVEX_B, EVEX_RC, Sched<[WriteFMA]>; } @@ -5932,16 +5935,16 @@ multiclass avx512_fma3p_132_rm opc, string OpcodeStr, SDNode OpNode, defm r: AVX512_maskable_3src, - AVX512FMA3Base, Sched<[WriteFMA]>; + (_.VT (OpNode _.RC:$src1, _.RC:$src3, _.RC:$src2)), NoItinerary, + 1, 1, vselect, 1>, AVX512FMA3Base, Sched<[WriteFMA]>; // Pattern is 312 order so that the load is in a different place from the // 213 and 231 patterns this helps tablegen's duplicate pattern detection. defm m: AVX512_maskable_3src, - AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; + (_.VT (OpNode (_.LdFrag addr:$src3), _.RC:$src1, _.RC:$src2)), + NoItinerary, 1, 0>, AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; // Pattern is 312 order so that the load is in a different place from the // 213 and 231 patterns this helps tablegen's duplicate pattern detection. @@ -5950,8 +5953,8 @@ multiclass avx512_fma3p_132_rm opc, string OpcodeStr, SDNode OpNode, OpcodeStr, "${src3}"##_.BroadcastStr##", $src2", "$src2, ${src3}"##_.BroadcastStr, (_.VT (OpNode (_.VT (X86VBroadcast(_.ScalarLdFrag addr:$src3))), - _.RC:$src1, _.RC:$src2)), 1, 0>, AVX512FMA3Base, EVEX_B, - Sched<[WriteFMA, ReadAfterLd]>; + _.RC:$src1, _.RC:$src2)), NoItinerary, 1, 0>, + AVX512FMA3Base, EVEX_B, Sched<[WriteFMA, ReadAfterLd]>; } } @@ -5961,8 +5964,8 @@ multiclass avx512_fma3_132_round opc, string OpcodeStr, SDNode OpNode, defm rb: AVX512_maskable_3src, + (_.VT ( OpNode _.RC:$src1, _.RC:$src3, _.RC:$src2, (i32 imm:$rc))), + NoItinerary, 1, 1, vselect, 1>, AVX512FMA3Base, EVEX_B, EVEX_RC, Sched<[WriteFMA]>; } @@ -6004,18 +6007,19 @@ multiclass avx512_fma3s_common opc, string OpcodeStr, X86VectorVTInfo _, let Constraints = "$src1 = $dst", hasSideEffects = 0 in { defm r_Int: AVX512_maskable_3src_scalar, AVX512FMA3Base, - Sched<[WriteFMA]>; + "$src3, $src2", "$src2, $src3", RHS_VEC_r, NoItinerary, 1, 1>, + AVX512FMA3Base, Sched<[WriteFMA]>; defm m_Int: AVX512_maskable_3src_scalar, AVX512FMA3Base, - Sched<[WriteFMA, ReadAfterLd]>; + "$src3, $src2", "$src2, $src3", RHS_VEC_m, NoItinerary, 1, 1>, + AVX512FMA3Base, Sched<[WriteFMA, ReadAfterLd]>; defm rb_Int: AVX512_maskable_3src_scalar, - AVX512FMA3Base, EVEX_B, EVEX_RC, Sched<[WriteFMA, ReadAfterLd]>; + OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc", RHS_VEC_rb, + NoItinerary, 1, 1>, AVX512FMA3Base, EVEX_B, EVEX_RC, + Sched<[WriteFMA, ReadAfterLd]>; let isCodeGenOnly = 1, isCommutable = 1 in { def r : AVX512FMA3S opc, string OpcodeStr, SDNode OpNode, defm r: AVX512_maskable_3src, + (_.VT (OpNode _.RC:$src2, _.RC:$src3, _.RC:$src1)), NoItinerary, 1, 1>, AVX512FMA3Base; defm m: AVX512_maskable_3src opc, string OpcodeStr, SDNode OpNode, (OpNode (_.VT _.RC:$src1), (_.VT _.RC:$src2), (_.VT _.RC:$src3), - (i8 imm:$src4)), 1, 1>, AVX512AIi8Base, EVEX_4V; + (i8 imm:$src4)), NoItinerary, 1, 1>, + AVX512AIi8Base, EVEX_4V; defm rmi : AVX512_maskable_3src, + (i8 imm:$src4)), NoItinerary, 1, 0>, AVX512AIi8Base, EVEX_4V, EVEX_CD8<_.EltSize, CD8VF>; defm rmbi : AVX512_maskable_3src opc, string OpcodeStr, SDNode OpNode, (OpNode (_.VT _.RC:$src1), (_.VT _.RC:$src2), (_.VT (X86VBroadcast(_.ScalarLdFrag addr:$src3))), - (i8 imm:$src4)), 1, 0>, EVEX_B, + (i8 imm:$src4)), NoItinerary, 1, 0>, EVEX_B, AVX512AIi8Base, EVEX_4V, EVEX_CD8<_.EltSize, CD8VF>; }// Constraints = "$src1 = $dst"