diff options
| author | Michael Zuckerman <Michael.zuckerman@intel.com> | 2016-01-19 18:47:02 +0000 |
|---|---|---|
| committer | Michael Zuckerman <Michael.zuckerman@intel.com> | 2016-01-19 18:47:02 +0000 |
| commit | 4582bdab12c0f2ece03a6c2790dd554b671217a0 (patch) | |
| tree | 773af6b857c66e7e87565489e2fc88e165e17a90 /llvm/lib/Target | |
| parent | feaa967ee813be3fa34ebc2b7a4751f2ec821df5 (diff) | |
| download | bcm5719-llvm-4582bdab12c0f2ece03a6c2790dd554b671217a0.tar.gz bcm5719-llvm-4582bdab12c0f2ece03a6c2790dd554b671217a0.zip | |
[AVX512] Adding VPERMT2B and VPERMI2B instruction .
Differential Revision: http://reviews.llvm.org/D16297
llvm-svn: 258161
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index fd6c124dc42..80ec5006146 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -1184,13 +1184,14 @@ multiclass avx512_perm_i_sizes<bits<8> opc, string OpcodeStr, } } -multiclass avx512_perm_i_sizes_w<bits<8> opc, string OpcodeStr, +multiclass avx512_perm_i_sizes_bw<bits<8> opc, string OpcodeStr, AVX512VLVectorVTInfo VTInfo, - AVX512VLVectorVTInfo Idx> { - let Predicates = [HasBWI] in + AVX512VLVectorVTInfo Idx, + Predicate Prd> { + let Predicates = [Prd] in defm NAME: avx512_perm_i<opc, OpcodeStr, VTInfo.info512, Idx.info512>, EVEX_V512; - let Predicates = [HasBWI, HasVLX] in { + let Predicates = [Prd, HasVLX] in { defm NAME#128: avx512_perm_i<opc, OpcodeStr, VTInfo.info128, Idx.info128>, EVEX_V128; defm NAME#256: avx512_perm_i<opc, OpcodeStr, VTInfo.info256, @@ -1202,8 +1203,12 @@ defm VPERMI2D : avx512_perm_i_sizes<0x76, "vpermi2d", avx512vl_i32_info, avx512vl_i32_info>, EVEX_CD8<32, CD8VF>; defm VPERMI2Q : avx512_perm_i_sizes<0x76, "vpermi2q", avx512vl_i64_info, avx512vl_i64_info>, VEX_W, EVEX_CD8<64, CD8VF>; -defm VPERMI2W : avx512_perm_i_sizes_w<0x75, "vpermi2w", - avx512vl_i16_info, avx512vl_i16_info>, VEX_W, EVEX_CD8<16, CD8VF>; +defm VPERMI2W : avx512_perm_i_sizes_bw<0x75, "vpermi2w", + avx512vl_i16_info, avx512vl_i16_info, HasBWI>, + VEX_W, EVEX_CD8<16, CD8VF>; +defm VPERMI2B : avx512_perm_i_sizes_bw<0x75, "vpermi2b", + avx512vl_i8_info, avx512vl_i8_info, HasVBMI>, + EVEX_CD8<8, CD8VF>; defm VPERMI2PS : avx512_perm_i_sizes<0x77, "vpermi2ps", avx512vl_f32_info, avx512vl_i32_info>, EVEX_CD8<32, CD8VF>; defm VPERMI2PD : avx512_perm_i_sizes<0x77, "vpermi2pd", @@ -1259,13 +1264,14 @@ multiclass avx512_perm_t_sizes<bits<8> opc, string OpcodeStr, } } -multiclass avx512_perm_t_sizes_w<bits<8> opc, string OpcodeStr, +multiclass avx512_perm_t_sizes_bw<bits<8> opc, string OpcodeStr, AVX512VLVectorVTInfo VTInfo, - AVX512VLVectorVTInfo Idx> { - let Predicates = [HasBWI] in + AVX512VLVectorVTInfo Idx, + Predicate Prd> { + let Predicates = [Prd] in defm NAME: avx512_perm_t<opc, OpcodeStr, VTInfo.info512, Idx.info512>, EVEX_V512; - let Predicates = [HasBWI, HasVLX] in { + let Predicates = [Prd, HasVLX] in { defm NAME#128: avx512_perm_t<opc, OpcodeStr, VTInfo.info128, Idx.info128>, EVEX_V128; defm NAME#256: avx512_perm_t<opc, OpcodeStr, VTInfo.info256, @@ -1277,8 +1283,12 @@ defm VPERMT2D : avx512_perm_t_sizes<0x7E, "vpermt2d", avx512vl_i32_info, avx512vl_i32_info>, EVEX_CD8<32, CD8VF>; defm VPERMT2Q : avx512_perm_t_sizes<0x7E, "vpermt2q", avx512vl_i64_info, avx512vl_i64_info>, VEX_W, EVEX_CD8<64, CD8VF>; -defm VPERMT2W : avx512_perm_t_sizes_w<0x7D, "vpermt2w", - avx512vl_i16_info, avx512vl_i16_info>, VEX_W, EVEX_CD8<16, CD8VF>; +defm VPERMT2W : avx512_perm_t_sizes_bw<0x7D, "vpermt2w", + avx512vl_i16_info, avx512vl_i16_info, HasBWI>, + VEX_W, EVEX_CD8<16, CD8VF>; +defm VPERMT2B : avx512_perm_t_sizes_bw<0x7D, "vpermt2b", + avx512vl_i8_info, avx512vl_i8_info, HasVBMI>, + EVEX_CD8<8, CD8VF>; defm VPERMT2PS : avx512_perm_t_sizes<0x7F, "vpermt2ps", avx512vl_f32_info, avx512vl_i32_info>, EVEX_CD8<32, CD8VF>; defm VPERMT2PD : avx512_perm_t_sizes<0x7F, "vpermt2pd", |

