From 108967b172611cfb3d8486aa9d598d0ab2e56e44 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sat, 16 Jul 2016 03:42:59 +0000 Subject: [PATCH] [AVX512] Remove CodeGenOnly VBROADCAST m_Int instructions. They can be implemented with patterns selecting existing instructions. NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275671 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrAVX512.td | 75 ++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 4c9cf38d318..de4129f8654 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -827,7 +827,7 @@ multiclass avx512_broadcast_scalar opc, string OpcodeStr, multiclass avx512_broadcast_rm opc, string OpcodeStr, X86VectorVTInfo DestInfo, X86VectorVTInfo SrcInfo> { - + let ExeDomain = DestInfo.ExeDomain in { defm r : AVX512_maskable, @@ -837,22 +837,36 @@ multiclass avx512_broadcast_rm opc, string OpcodeStr, (DestInfo.VT (X86VBroadcast (SrcInfo.ScalarLdFrag addr:$src)))>, T8PD, EVEX, EVEX_CD8; + } - let isCodeGenOnly = 1 in - defm m_Int : AVX512_maskable, - T8PD, EVEX, EVEX_CD8; -} - -multiclass avx512_fp_broadcast_vl opc, string OpcodeStr, + def : Pat<(DestInfo.VT (X86VBroadcast + (SrcInfo.VT (scalar_to_vector + (SrcInfo.ScalarLdFrag addr:$src))))), + (!cast(NAME#DestInfo.ZSuffix#m) addr:$src)>; + let AddedComplexity = 20 in + def : Pat<(DestInfo.VT (vselect DestInfo.KRCWM:$mask, + (X86VBroadcast + (SrcInfo.VT (scalar_to_vector + (SrcInfo.ScalarLdFrag addr:$src)))), + DestInfo.RC:$src0)), + (!cast(NAME#DestInfo.ZSuffix#mk) + DestInfo.RC:$src0, DestInfo.KRCWM:$mask, addr:$src)>; + let AddedComplexity = 30 in + def : Pat<(DestInfo.VT (vselect DestInfo.KRCWM:$mask, + (X86VBroadcast + (SrcInfo.VT (scalar_to_vector + (SrcInfo.ScalarLdFrag addr:$src)))), + DestInfo.ImmAllZerosV)), + (!cast(NAME#DestInfo.ZSuffix#mkz) + DestInfo.KRCWM:$mask, addr:$src)>; +} + +multiclass avx512_fp_broadcast_sd opc, string OpcodeStr, AVX512VLVectorVTInfo _> { - defm Z : avx512_broadcast_rm, - avx512_broadcast_scalar, - EVEX_V512; + let Predicates = [HasAVX512] in + defm Z : avx512_broadcast_rm, + avx512_broadcast_scalar, + EVEX_V512; let Predicates = [HasVLX] in { defm Z256 : avx512_broadcast_rm, @@ -861,21 +875,26 @@ multiclass avx512_fp_broadcast_vl opc, string OpcodeStr, } } -let ExeDomain = SSEPackedSingle in { - defm VBROADCASTSS : avx512_fp_broadcast_vl<0x18, "vbroadcastss", - avx512vl_f32_info>; - let Predicates = [HasVLX] in { - defm VBROADCASTSSZ128 : - avx512_broadcast_rm<0x18, "vbroadcastss", v4f32x_info, v4f32x_info>, - avx512_broadcast_scalar<0x18, "vbroadcastss", v4f32x_info, v4f32x_info>, - EVEX_V128; - } -} +multiclass avx512_fp_broadcast_ss opc, string OpcodeStr, + AVX512VLVectorVTInfo _> { + let Predicates = [HasAVX512] in + defm Z : avx512_broadcast_rm, + avx512_broadcast_scalar, + EVEX_V512; -let ExeDomain = SSEPackedDouble in { - defm VBROADCASTSD : avx512_fp_broadcast_vl<0x19, "vbroadcastsd", - avx512vl_f64_info>, VEX_W; + let Predicates = [HasVLX] in { + defm Z256 : avx512_broadcast_rm, + avx512_broadcast_scalar, + EVEX_V256; + defm Z128 : avx512_broadcast_rm, + avx512_broadcast_scalar, + EVEX_V128; + } } +defm VBROADCASTSS : avx512_fp_broadcast_ss<0x18, "vbroadcastss", + avx512vl_f32_info>; +defm VBROADCASTSD : avx512_fp_broadcast_sd<0x19, "vbroadcastsd", + avx512vl_f64_info>, VEX_W; def : Pat<(int_x86_avx512_vbroadcast_ss_512 addr:$src), (VBROADCASTSSZm addr:$src)>; -- 2.40.0