diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 2b823114a03576..b8b214596cd94d 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -9926,7 +9926,7 @@ multiclass avx512_trunc opc, string OpcodeStr, SDNode OpNode128, SDPatternOperator MaskNode128, SDPatternOperator MaskNode256, SDPatternOperator MaskNode512, - X86FoldableSchedWrite sched, + X86SchedWriteWidths sched, AVX512VLVectorVTInfo VTSrcInfo, X86VectorVTInfo DestInfoZ128, X86VectorVTInfo DestInfoZ256, X86VectorVTInfo DestInfoZ, @@ -9935,25 +9935,25 @@ multiclass avx512_trunc opc, string OpcodeStr, SDNode OpNode128, PatFrag mtruncFrag, Predicate prd = HasAVX512>{ let Predicates = [HasVLX, prd] in { - defm Z128: avx512_trunc_common, avx512_trunc_mr_lowering, EVEX_V128; - defm Z256: avx512_trunc_common, avx512_trunc_mr_lowering, EVEX_V256; } let Predicates = [prd] in - defm Z: avx512_trunc_common, avx512_trunc_mr_lowering, EVEX_V512; } multiclass avx512_trunc_qb opc, string OpcodeStr, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, multiclass avx512_trunc_qw opc, string OpcodeStr, SDNode OpNode, SDPatternOperator MaskNode, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, SDNode OpNode, multiclass avx512_trunc_qd opc, string OpcodeStr, SDNode OpNode, SDPatternOperator MaskNode, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, SDNode OpNode, multiclass avx512_trunc_db opc, string OpcodeStr, SDNode OpNode, SDPatternOperator MaskNode, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, SDNode OpNode, multiclass avx512_trunc_dw opc, string OpcodeStr, SDNode OpNode, SDPatternOperator MaskNode, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, SDNode OpNode, multiclass avx512_trunc_wb opc, string OpcodeStr, SDNode OpNode, SDPatternOperator MaskNode, - X86FoldableSchedWrite sched, PatFrag StoreNode, + X86SchedWriteWidths sched, PatFrag StoreNode, PatFrag MaskedStoreNode, SDNode InVecNode, SDPatternOperator InVecMaskNode> { defm NAME: avx512_trunc opc, string OpcodeStr, SDNode OpNode, } defm VPMOVQB : avx512_trunc_qb<0x32, "vpmovqb", - WriteVPMOV256, truncstorevi8, + SchedWriteVecTruncate, truncstorevi8, masked_truncstorevi8, X86vtrunc, X86vmtrunc>; defm VPMOVSQB : avx512_trunc_qb<0x22, "vpmovsqb", - WriteVPMOV256, truncstore_s_vi8, + SchedWriteVecTruncate, truncstore_s_vi8, masked_truncstore_s_vi8, X86vtruncs, X86vmtruncs>; defm VPMOVUSQB : avx512_trunc_qb<0x12, "vpmovusqb", - WriteVPMOV256, truncstore_us_vi8, + SchedWriteVecTruncate, truncstore_us_vi8, masked_truncstore_us_vi8, X86vtruncus, X86vmtruncus>; defm VPMOVQW : avx512_trunc_qw<0x34, "vpmovqw", trunc, select_trunc, - WriteVPMOV256, truncstorevi16, + SchedWriteVecTruncate, truncstorevi16, masked_truncstorevi16, X86vtrunc, X86vmtrunc>; defm VPMOVSQW : avx512_trunc_qw<0x24, "vpmovsqw", X86vtruncs, select_truncs, - WriteVPMOV256, truncstore_s_vi16, + SchedWriteVecTruncate, truncstore_s_vi16, masked_truncstore_s_vi16, X86vtruncs, X86vmtruncs>; defm VPMOVUSQW : avx512_trunc_qw<0x14, "vpmovusqw", X86vtruncus, - select_truncus, WriteVPMOV256, + select_truncus, SchedWriteVecTruncate, truncstore_us_vi16, masked_truncstore_us_vi16, X86vtruncus, X86vmtruncus>; defm VPMOVQD : avx512_trunc_qd<0x35, "vpmovqd", trunc, select_trunc, - WriteVPMOV256, truncstorevi32, + SchedWriteVecTruncate, truncstorevi32, masked_truncstorevi32, X86vtrunc, X86vmtrunc>; defm VPMOVSQD : avx512_trunc_qd<0x25, "vpmovsqd", X86vtruncs, select_truncs, - WriteVPMOV256, truncstore_s_vi32, + SchedWriteVecTruncate, truncstore_s_vi32, masked_truncstore_s_vi32, X86vtruncs, X86vmtruncs>; defm VPMOVUSQD : avx512_trunc_qd<0x15, "vpmovusqd", X86vtruncus, - select_truncus, WriteVPMOV256, + select_truncus, SchedWriteVecTruncate, truncstore_us_vi32, masked_truncstore_us_vi32, X86vtruncus, X86vmtruncus>; defm VPMOVDB : avx512_trunc_db<0x31, "vpmovdb", trunc, select_trunc, - WriteVPMOV256, truncstorevi8, + SchedWriteVecTruncate, truncstorevi8, masked_truncstorevi8, X86vtrunc, X86vmtrunc>; defm VPMOVSDB : avx512_trunc_db<0x21, "vpmovsdb", X86vtruncs, select_truncs, - WriteVPMOV256, truncstore_s_vi8, + SchedWriteVecTruncate, truncstore_s_vi8, masked_truncstore_s_vi8, X86vtruncs, X86vmtruncs>; defm VPMOVUSDB : avx512_trunc_db<0x11, "vpmovusdb", X86vtruncus, - select_truncus, WriteVPMOV256, + select_truncus, SchedWriteVecTruncate, truncstore_us_vi8, masked_truncstore_us_vi8, X86vtruncus, X86vmtruncus>; defm VPMOVDW : avx512_trunc_dw<0x33, "vpmovdw", trunc, select_trunc, - WriteVPMOV256, truncstorevi16, + SchedWriteVecTruncate, truncstorevi16, masked_truncstorevi16, X86vtrunc, X86vmtrunc>; defm VPMOVSDW : avx512_trunc_dw<0x23, "vpmovsdw", X86vtruncs, select_truncs, - WriteVPMOV256, truncstore_s_vi16, + SchedWriteVecTruncate, truncstore_s_vi16, masked_truncstore_s_vi16, X86vtruncs, X86vmtruncs>; defm VPMOVUSDW : avx512_trunc_dw<0x13, "vpmovusdw", X86vtruncus, - select_truncus, WriteVPMOV256, + select_truncus, SchedWriteVecTruncate, truncstore_us_vi16, masked_truncstore_us_vi16, X86vtruncus, X86vmtruncus>; defm VPMOVWB : avx512_trunc_wb<0x30, "vpmovwb", trunc, select_trunc, - WriteVPMOV256, truncstorevi8, + SchedWriteVecTruncate, truncstorevi8, masked_truncstorevi8, X86vtrunc, X86vmtrunc>; defm VPMOVSWB : avx512_trunc_wb<0x20, "vpmovswb", X86vtruncs, select_truncs, - WriteVPMOV256, truncstore_s_vi8, + SchedWriteVecTruncate, truncstore_s_vi8, masked_truncstore_s_vi8, X86vtruncs, X86vmtruncs>; defm VPMOVUSWB : avx512_trunc_wb<0x10, "vpmovuswb", X86vtruncus, - select_truncus, WriteVPMOV256, + select_truncus, SchedWriteVecTruncate, truncstore_us_vi8, masked_truncstore_us_vi8, X86vtruncus, X86vmtruncus>; diff --git a/llvm/lib/Target/X86/X86Schedule.td b/llvm/lib/Target/X86/X86Schedule.td index b1563966608058..3321ed737a4448 100644 --- a/llvm/lib/Target/X86/X86Schedule.td +++ b/llvm/lib/Target/X86/X86Schedule.td @@ -681,6 +681,9 @@ def SchedWritePSADBW def SchedWriteVecExtend : X86SchedWriteWidths; +def SchedWriteVecTruncate + : X86SchedWriteWidths; def SchedWriteShuffle : X86SchedWriteWidths;