From eab92f74e7d58af2ee7c59a8b02535d6d655b021 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 14 Aug 2017 01:53:10 +0000 Subject: [PATCH] [AVX512] Simplify the instruction defintion for VEXTRACT. NFCI The comment about why we couldn't use avx512_maskable appears to have been incorrect. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310808 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrAVX512.td | 49 +++++++++++--------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 65af84c9513..2a270b54502 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -656,12 +656,11 @@ multiclass vextract_for_size, + (vextract_extract:$idx (From.VT From.RC:$src1), (iPTR imm))>, AVX512AIi8Base, EVEX; def mr : AVX512AIi8, EVEX_K, EVEX; } - - def : Pat<(To.VT (vselect To.KRCWM:$mask, - (vextract_extract:$ext (From.VT From.RC:$src1), - (iPTR imm)), - To.RC:$src0)), - (!cast(NAME # To.EltSize # "x" # To.NumElts # - From.ZSuffix # "rrk") - To.RC:$src0, To.KRCWM:$mask, From.RC:$src1, - (EXTRACT_get_vextract_imm To.RC:$ext))>; - - def : Pat<(To.VT (vselect To.KRCWM:$mask, - (vextract_extract:$ext (From.VT From.RC:$src1), - (iPTR imm)), - To.ImmAllZerosV)), - (!cast(NAME # To.EltSize # "x" # To.NumElts # - From.ZSuffix # "rrkz") - To.KRCWM:$mask, From.RC:$src1, - (EXTRACT_get_vextract_imm To.RC:$ext))>; } // Codegen pattern for the alternative types @@ -718,18 +699,20 @@ multiclass vextract_for_size_lowering { - defm NAME # "32x4Z" : vextract_for_size, - X86VectorVTInfo< 4, EltVT32, VR128X>, - vextract128_extract, - EXTRACT_get_vextract128_imm>, - EVEX_V512, EVEX_CD8<32, CD8VT4>; - defm NAME # "64x4Z" : vextract_for_size, - X86VectorVTInfo< 4, EltVT64, VR256X>, - vextract256_extract, - EXTRACT_get_vextract256_imm>, - VEX_W, EVEX_V512, EVEX_CD8<64, CD8VT4>; + let Predicates = [HasAVX512] in { + defm NAME # "32x4Z" : vextract_for_size, + X86VectorVTInfo< 4, EltVT32, VR128X>, + vextract128_extract, + EXTRACT_get_vextract128_imm>, + EVEX_V512, EVEX_CD8<32, CD8VT4>; + defm NAME # "64x4Z" : vextract_for_size, + X86VectorVTInfo< 4, EltVT64, VR256X>, + vextract256_extract, + EXTRACT_get_vextract256_imm>, + VEX_W, EVEX_V512, EVEX_CD8<64, CD8VT4>; + } let Predicates = [HasVLX] in defm NAME # "32x4Z256" : vextract_for_size, -- 2.50.1