[llvm] r258161 - [AVX512] Adding VPERMT2B and VPERMI2B instruction .
Michael Zuckerman via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 19 10:47:05 PST 2016
Author: mzuckerm
Date: Tue Jan 19 12:47:02 2016
New Revision: 258161
URL: http://llvm.org/viewvc/llvm-project?rev=258161&view=rev
Log:
[AVX512] Adding VPERMT2B and VPERMI2B instruction .
Differential Revision: http://reviews.llvm.org/D16297
Modified:
llvm/trunk/lib/Target/X86/X86InstrAVX512.td
llvm/trunk/test/MC/X86/avx512vbmi-encoding.s
Modified: llvm/trunk/lib/Target/X86/X86InstrAVX512.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrAVX512.td?rev=258161&r1=258160&r2=258161&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrAVX512.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrAVX512.td Tue Jan 19 12:47:02 2016
@@ -1184,13 +1184,14 @@ multiclass avx512_perm_i_sizes<bits<8> o
}
}
-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<0x7
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> o
}
}
-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<0x7
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",
Modified: llvm/trunk/test/MC/X86/avx512vbmi-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/avx512vbmi-encoding.s?rev=258161&r1=258160&r2=258161&view=diff
==============================================================================
--- llvm/trunk/test/MC/X86/avx512vbmi-encoding.s (original)
+++ llvm/trunk/test/MC/X86/avx512vbmi-encoding.s Tue Jan 19 12:47:02 2016
@@ -120,4 +120,243 @@
//CHECK: vpermb 4660(%rax,%r14,8), %zmm29, %zmm30
//CHECK: encoding: [0x62,0x22,0x15,0x40,0x8d,0xb4,0xf0,0x34,0x12,0x00,0x00]
+ vpermt2b %xmm28, %xmm29, %xmm30
+//CHECK: vpermt2b %xmm28, %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x02,0x15,0x00,0x7d,0xf4]
+
+ vpermt2b %xmm28, %xmm29, %xmm30 {%k7}
+//CHECK: vpermt2b %xmm28, %xmm29, %xmm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x07,0x7d,0xf4]
+
+ vpermt2b %xmm28, %xmm29, %xmm30 {%k7} {z}
+//CHECK: vpermt2b %xmm28, %xmm29, %xmm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0x87,0x7d,0xf4]
+
+ vpermt2b (%rcx), %xmm29, %xmm30
+//CHECK: vpermt2b (%rcx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x7d,0x31]
+
+ vpermt2b 0x123(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: vpermt2b 291(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x00,0x7d,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermt2b 0x7f0(%rdx), %xmm29, %xmm30
+//CHECK: vpermt2b 2032(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x7d,0x72,0x7f]
+
+ vpermt2b 0x800(%rdx), %xmm29, %xmm30
+//CHECK: vpermt2b 2048(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x7d,0xb2,0x00,0x08,0x00,0x00]
+
+ vpermt2b -0x800(%rdx), %xmm29, %xmm30
+//CHECK: vpermt2b -2048(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x7d,0x72,0x80]
+
+ vpermt2b -0x810(%rdx), %xmm29, %xmm30
+//CHECK: vpermt2b -2064(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x7d,0xb2,0xf0,0xf7,0xff,0xff]
+
+ vpermt2b %ymm28, %ymm29, %ymm30
+//CHECK: vpermt2b %ymm28, %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x02,0x15,0x20,0x7d,0xf4]
+
+ vpermt2b %ymm28, %ymm29, %ymm30 {%k7}
+//CHECK: vpermt2b %ymm28, %ymm29, %ymm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x27,0x7d,0xf4]
+
+ vpermt2b %ymm28, %ymm29, %ymm30 {%k7} {z}
+//CHECK: vpermt2b %ymm28, %ymm29, %ymm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0xa7,0x7d,0xf4]
+
+ vpermt2b (%rcx), %ymm29, %ymm30
+//CHECK: vpermt2b (%rcx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x7d,0x31]
+
+ vpermt2b 0x123(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: vpermt2b 291(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x22,0x15,0x20,0x7d,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermt2b 0xfe0(%rdx), %ymm29, %ymm30
+//CHECK: vpermt2b 4064(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x7d,0x72,0x7f]
+
+ vpermt2b 0x1000(%rdx), %ymm29, %ymm30
+//CHECK: vpermt2b 4096(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x7d,0xb2,0x00,0x10,0x00,0x00]
+
+ vpermt2b -0x1000(%rdx), %ymm29, %ymm30
+//CHECK: vpermt2b -4096(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x7d,0x72,0x80]
+
+ vpermt2b -0x1020(%rdx), %ymm29, %ymm30
+//CHECK: vpermt2b -4128(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x7d,0xb2,0xe0,0xef,0xff,0xff]
+
+ vpermt2b 0x1234(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: vpermt2b 4660(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x00,0x7d,0xb4,0xf0,0x34,0x12,0x00,0x00]
+
+ vpermt2b 0x1234(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: vpermt2b 4660(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x22,0x15,0x20,0x7d,0xb4,0xf0,0x34,0x12,0x00,0x00]
+
+ vpermt2b %zmm28, %zmm29, %zmm30
+//CHECK: vpermt2b %zmm28, %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x02,0x15,0x40,0x7d,0xf4]
+
+ vpermt2b %zmm28, %zmm29, %zmm30 {%k7}
+//CHECK: vpermt2b %zmm28, %zmm29, %zmm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x47,0x7d,0xf4]
+
+ vpermt2b %zmm28, %zmm29, %zmm30 {%k7} {z}
+//CHECK: vpermt2b %zmm28, %zmm29, %zmm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0xc7,0x7d,0xf4]
+
+ vpermt2b (%rcx), %zmm29, %zmm30
+//CHECK: vpermt2b (%rcx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x7d,0x31]
+
+ vpermt2b 0x123(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: vpermt2b 291(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x40,0x7d,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermt2b 0x1fc0(%rdx), %zmm29, %zmm30
+//CHECK: vpermt2b 8128(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x7d,0x72,0x7f]
+
+ vpermt2b 0x2000(%rdx), %zmm29, %zmm30
+//CHECK: vpermt2b 8192(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x7d,0xb2,0x00,0x20,0x00,0x00]
+
+ vpermt2b -0x2000(%rdx), %zmm29, %zmm30
+//CHECK: vpermt2b -8192(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x7d,0x72,0x80]
+
+ vpermt2b -0x2040(%rdx), %zmm29, %zmm30
+//CHECK: vpermt2b -8256(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x7d,0xb2,0xc0,0xdf,0xff,0xff]
+
+ vpermt2b 0x1234(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: vpermt2b 4660(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x40,0x7d,0xb4,0xf0,0x34,0x12,0x00,0x00]
+
+ vpermi2b %xmm28, %xmm29, %xmm30
+//CHECK: vpermi2b %xmm28, %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x02,0x15,0x00,0x75,0xf4]
+
+ vpermi2b %xmm28, %xmm29, %xmm30 {%k7}
+//CHECK: vpermi2b %xmm28, %xmm29, %xmm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x07,0x75,0xf4]
+
+ vpermi2b %xmm28, %xmm29, %xmm30 {%k7} {z}
+//CHECK: vpermi2b %xmm28, %xmm29, %xmm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0x87,0x75,0xf4]
+
+ vpermi2b (%rcx), %xmm29, %xmm30
+//CHECK: vpermi2b (%rcx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x75,0x31]
+
+ vpermi2b 0x123(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: vpermi2b 291(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x00,0x75,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermi2b 0x7f0(%rdx), %xmm29, %xmm30
+//CHECK: vpermi2b 2032(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x75,0x72,0x7f]
+
+ vpermi2b 0x800(%rdx), %xmm29, %xmm30
+//CHECK: vpermi2b 2048(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x75,0xb2,0x00,0x08,0x00,0x00]
+
+ vpermi2b -0x800(%rdx), %xmm29, %xmm30
+//CHECK: vpermi2b -2048(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x75,0x72,0x80]
+
+ vpermi2b -0x810(%rdx), %xmm29, %xmm30
+//CHECK: vpermi2b -2064(%rdx), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x00,0x75,0xb2,0xf0,0xf7,0xff,0xff]
+
+ vpermi2b %ymm28, %ymm29, %ymm30
+//CHECK: vpermi2b %ymm28, %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x02,0x15,0x20,0x75,0xf4]
+
+ vpermi2b %ymm28, %ymm29, %ymm30 {%k7}
+//CHECK: vpermi2b %ymm28, %ymm29, %ymm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x27,0x75,0xf4]
+
+ vpermi2b %ymm28, %ymm29, %ymm30 {%k7} {z}
+//CHECK: vpermi2b %ymm28, %ymm29, %ymm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0xa7,0x75,0xf4]
+
+ vpermi2b (%rcx), %ymm29, %ymm30
+//CHECK: vpermi2b (%rcx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x75,0x31]
+
+ vpermi2b 0x123(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: vpermi2b 291(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x22,0x15,0x20,0x75,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermi2b 0xfe0(%rdx), %ymm29, %ymm30
+//CHECK: vpermi2b 4064(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x75,0x72,0x7f]
+
+ vpermi2b 0x1000(%rdx), %ymm29, %ymm30
+//CHECK: vpermi2b 4096(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x75,0xb2,0x00,0x10,0x00,0x00]
+
+ vpermi2b -0x1000(%rdx), %ymm29, %ymm30
+//CHECK: vpermi2b -4096(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x75,0x72,0x80]
+
+ vpermi2b -0x1020(%rdx), %ymm29, %ymm30
+//CHECK: vpermi2b -4128(%rdx), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x62,0x15,0x20,0x75,0xb2,0xe0,0xef,0xff,0xff]
+
+ vpermi2b 0x1234(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: vpermi2b 4660(%rax,%r14,8), %xmm29, %xmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x00,0x75,0xb4,0xf0,0x34,0x12,0x00,0x00]
+
+ vpermi2b 0x1234(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: vpermi2b 4660(%rax,%r14,8), %ymm29, %ymm30
+//CHECK: encoding: [0x62,0x22,0x15,0x20,0x75,0xb4,0xf0,0x34,0x12,0x00,0x00]
+
+ vpermi2b %zmm28, %zmm29, %zmm30
+//CHECK: vpermi2b %zmm28, %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x02,0x15,0x40,0x75,0xf4]
+
+ vpermi2b %zmm28, %zmm29, %zmm30 {%k7}
+//CHECK: vpermi2b %zmm28, %zmm29, %zmm30 {%k7}
+//CHECK: encoding: [0x62,0x02,0x15,0x47,0x75,0xf4]
+
+ vpermi2b %zmm28, %zmm29, %zmm30 {%k7} {z}
+//CHECK: vpermi2b %zmm28, %zmm29, %zmm30 {%k7} {z}
+//CHECK: encoding: [0x62,0x02,0x15,0xc7,0x75,0xf4]
+
+ vpermi2b (%rcx), %zmm29, %zmm30
+//CHECK: vpermi2b (%rcx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x75,0x31]
+
+ vpermi2b 0x123(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: vpermi2b 291(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x40,0x75,0xb4,0xf0,0x23,0x01,0x00,0x00]
+
+ vpermi2b 0x1fc0(%rdx), %zmm29, %zmm30
+//CHECK: vpermi2b 8128(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x75,0x72,0x7f]
+
+ vpermi2b 0x2000(%rdx), %zmm29, %zmm30
+//CHECK: vpermi2b 8192(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x75,0xb2,0x00,0x20,0x00,0x00]
+
+ vpermi2b -0x2000(%rdx), %zmm29, %zmm30
+//CHECK: vpermi2b -8192(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x75,0x72,0x80]
+
+ vpermi2b -0x2040(%rdx), %zmm29, %zmm30
+//CHECK: vpermi2b -8256(%rdx), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x62,0x15,0x40,0x75,0xb2,0xc0,0xdf,0xff,0xff]
+
+ vpermi2b 0x1234(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: vpermi2b 4660(%rax,%r14,8), %zmm29, %zmm30
+//CHECK: encoding: [0x62,0x22,0x15,0x40,0x75,0xb4,0xf0,0x34,0x12,0x00,0x00]
More information about the llvm-commits
mailing list