From: Adam Nemet Date: Mon, 27 Oct 2014 23:08:40 +0000 (+0000) Subject: [AVX512] Add vpermil variable version X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=6bc8d95153d1f311a02cf48ca0e5735c80a531a3 [AVX512] Add vpermil variable version This is implemented via a multiclass that derives from the vperm imm multiclass. Fixes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220737 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 07fe310d039..1d1abcfb40f 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -783,14 +783,37 @@ multiclass avx512_perm_imm opc, string OpcodeStr, SDNode OpNode, } } +multiclass avx512_permil OpcImm, bits<8> OpcVar, X86VectorVTInfo _, + X86VectorVTInfo Ctrl> : + avx512_perm_imm { + let ExeDomain = _.ExeDomain in { + def rr : AVX5128I, + EVEX_4V; + def rm : AVX5128I, + EVEX_4V; + } +} + defm VPERMQZ : avx512_perm_imm<0x00, "vpermq", X86VPermi, v8i64_info>, EVEX_V512, VEX_W; defm VPERMPDZ : avx512_perm_imm<0x01, "vpermpd", X86VPermi, v8f64_info>, EVEX_V512, VEX_W; -defm VPERMILPSZ : avx512_perm_imm<0x04, "vpermilps", X86VPermilpi, v16f32_info>, +defm VPERMILPSZ : avx512_permil<0x04, 0x0C, v16f32_info, v16i32_info>, EVEX_V512; -defm VPERMILPDZ : avx512_perm_imm<0x05, "vpermilpd", X86VPermilpi, v8f64_info>, +defm VPERMILPDZ : avx512_permil<0x05, 0x0D, v8f64_info, v8i64_info>, EVEX_V512, VEX_W; def : Pat<(v16i32 (X86VPermilpi VR512:$src1, (i8 imm:$imm))), diff --git a/test/MC/X86/avx512-encodings.s b/test/MC/X86/avx512-encodings.s index 6b2acf6d40d..b60b72fd6bb 100644 --- a/test/MC/X86/avx512-encodings.s +++ b/test/MC/X86/avx512-encodings.s @@ -4375,3 +4375,19 @@ vfnmadd231ps %zmm5, %zmm6, %zmm7 // CHECK: vfnmsub231pd // CHECK: encoding: [0x62,0xf2,0xcd,0x48,0xbe,0xfd] vfnmsub231pd %zmm5, %zmm6, %zmm7 + +// CHECK: vpermilps +// CHECK: encoding: [0x62,0xf2,0x6d,0x48,0x0c,0xd9] +vpermilps %zmm1, %zmm2, %zmm3 + +// CHECK: vpermilpd +// CHECK: encoding: [0x62,0xf2,0xed,0x48,0x0d,0x5b,0x10] +vpermilpd 0x400(%rbx), %zmm2, %zmm3 + +// CHECK: vpermilps +// CHECK: encoding: [0x62,0xf2,0x6d,0x48,0x0c,0x5b,0x10] +vpermilps 0x400(%rbx), %zmm2, %zmm3 + +// CHECK: vpermilpd +// CHECK: encoding: [0x62,0xf3,0xfd,0x48,0x05,0x53,0x10,0x23] +vpermilpd $0x23, 0x400(%rbx), %zmm2