@@ -6800,19 +6800,22 @@ multiclass avx512_fma3p_132_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
68006800 (_.VT (OpNode _.RC:$src1, _.RC:$src3, _.RC:$src2)), 1, 1, vselect, 1>,
68016801 AVX512FMA3Base;
68026802
6803+ // Pattern is 312 order so that the load is in a different place from the
6804+ // 213 and 231 patterns this helps tablegen's duplicate pattern detection.
68036805 defm m: AVX512_maskable_3src<opc, MRMSrcMem, _, (outs _.RC:$dst),
68046806 (ins _.RC:$src2, _.MemOp:$src3),
68056807 OpcodeStr, "$src3, $src2", "$src2, $src3",
6806- (_.VT (OpNode _.RC:$src1, (_.LdFrag addr:$src3), _.RC:$src2)), 1, 0>,
6808+ (_.VT (OpNode (_.LdFrag addr:$src3), _.RC:$src1 , _.RC:$src2)), 1, 0>,
68076809 AVX512FMA3Base;
68086810
6811+ // Pattern is 312 order so that the load is in a different place from the
6812+ // 213 and 231 patterns this helps tablegen's duplicate pattern detection.
68096813 defm mb: AVX512_maskable_3src<opc, MRMSrcMem, _, (outs _.RC:$dst),
68106814 (ins _.RC:$src2, _.ScalarMemOp:$src3),
68116815 OpcodeStr, "${src3}"##_.BroadcastStr##", $src2",
68126816 "$src2, ${src3}"##_.BroadcastStr,
6813- (_.VT (OpNode _.RC:$src1,
6814- (_.VT (X86VBroadcast(_.ScalarLdFrag addr:$src3))),
6815- _.RC:$src2)), 1, 0>, AVX512FMA3Base, EVEX_B;
6817+ (_.VT (OpNode (_.VT (X86VBroadcast(_.ScalarLdFrag addr:$src3))),
6818+ _.RC:$src1, _.RC:$src2)), 1, 0>, AVX512FMA3Base, EVEX_B;
68166819 }
68176820}
68186821
@@ -6861,22 +6864,20 @@ defm VFNMSUB132 : avx512_fma3p_132_f<0x9E, "vfnmsub132", X86Fnmsub, X86FnmsubR
68616864// Scalar FMA
68626865multiclass avx512_fma3s_common<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
68636866 dag RHS_VEC_r, dag RHS_VEC_m, dag RHS_VEC_rb,
6864- dag RHS_r, dag RHS_m, bit MaskOnlyReg,
6865- bit MaskOnlyRegInt> {
6867+ dag RHS_r, dag RHS_m, bit MaskOnlyReg> {
68666868let Constraints = "$src1 = $dst", hasSideEffects = 0 in {
68676869 defm r_Int: AVX512_maskable_3src_scalar<opc, MRMSrcReg, _, (outs _.RC:$dst),
68686870 (ins _.RC:$src2, _.RC:$src3), OpcodeStr,
6869- "$src3, $src2", "$src2, $src3", RHS_VEC_r, 1, 1, MaskOnlyRegInt>,
6870- AVX512FMA3Base;
6871+ "$src3, $src2", "$src2, $src3", RHS_VEC_r, 1, 1>, AVX512FMA3Base;
68716872
68726873 defm m_Int: AVX512_maskable_3src_scalar<opc, MRMSrcMem, _, (outs _.RC:$dst),
68736874 (ins _.RC:$src2, _.IntScalarMemOp:$src3), OpcodeStr,
68746875 "$src3, $src2", "$src2, $src3", RHS_VEC_m, 1, 1>, AVX512FMA3Base;
68756876
68766877 defm rb_Int: AVX512_maskable_3src_scalar<opc, MRMSrcReg, _, (outs _.RC:$dst),
68776878 (ins _.RC:$src2, _.RC:$src3, AVX512RC:$rc),
6878- OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc", RHS_VEC_rb, 1, 1,
6879- MaskOnlyRegInt>, AVX512FMA3Base, EVEX_B, EVEX_RC;
6879+ OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc", RHS_VEC_rb, 1, 1> ,
6880+ AVX512FMA3Base, EVEX_B, EVEX_RC;
68806881
68816882 let isCodeGenOnly = 1, isCommutable = 1 in {
68826883 def r : AVX512FMA3<opc, MRMSrcReg, (outs _.FRC:$dst),
@@ -6909,7 +6910,7 @@ multiclass avx512_fma3s_all<bits<8> opc213, bits<8> opc231, bits<8> opc132,
69096910 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src2, _.FRC:$src1,
69106911 _.FRC:$src3))),
69116912 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src2, _.FRC:$src1,
6912- (_.ScalarLdFrag addr:$src3)))), 0, 0 >;
6913+ (_.ScalarLdFrag addr:$src3)))), 0>;
69136914
69146915 defm NAME#231#SUFF#Z: avx512_fma3s_common<opc231, OpcodeStr#"231"#_.Suffix, _,
69156916 (_.VT (OpNodeRnds3 _.RC:$src2, _.RC:$src3, _.RC:$src1,
@@ -6921,19 +6922,17 @@ multiclass avx512_fma3s_all<bits<8> opc213, bits<8> opc231, bits<8> opc132,
69216922 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src2, _.FRC:$src3,
69226923 _.FRC:$src1))),
69236924 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src2,
6924- (_.ScalarLdFrag addr:$src3), _.FRC:$src1))), 1, 0 >;
6925+ (_.ScalarLdFrag addr:$src3), _.FRC:$src1))), 1>;
69256926
69266927 defm NAME#132#SUFF#Z: avx512_fma3s_common<opc132, OpcodeStr#"132"#_.Suffix, _,
6927- (_.VT (OpNodeRnds1 _.RC:$src1, _.RC:$src3, _.RC:$src2,
6928- (i32 FROUND_CURRENT))),
6928+ (null_frag),
69296929 (_.VT (OpNodeRnds1 _.RC:$src1, _.ScalarIntMemCPat:$src3,
69306930 _.RC:$src2, (i32 FROUND_CURRENT))),
6931- (_.VT (OpNodeRnds1 _.RC:$src1, _.RC:$src3, _.RC:$src2,
6932- (i32 imm:$rc))),
6931+ (null_frag),
69336932 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src1, _.FRC:$src3,
69346933 _.FRC:$src2))),
69356934 (set _.FRC:$dst, (_.EltVT (OpNode _.FRC:$src1,
6936- (_.ScalarLdFrag addr:$src3), _.FRC:$src2))), 1, 1 >;
6935+ (_.ScalarLdFrag addr:$src3), _.FRC:$src2))), 1>;
69376936 }
69386937}
69396938
0 commit comments