From 00915333a90509315898ca5faf8fb6cbaf85fd9e Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 16 Jan 2017 00:55:58 +0000 Subject: [PATCH] [AVX-512] Correct memory operand size for VPGATHERQPS and VPGATHERQD with ZMM index. Similar for SCATTER and the prefetch gather and scatter instructions. Fixes PR31618. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292088 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86Operand.h | 3 + lib/Target/X86/X86InstrAVX512.td | 12 +-- lib/Target/X86/X86InstrInfo.td | 2 + test/MC/X86/intel-syntax-avx512.s | 112 ++++++++++++------------ utils/TableGen/X86RecognizableInstr.cpp | 2 + 5 files changed, 69 insertions(+), 62 deletions(-) diff --git a/lib/Target/X86/AsmParser/X86Operand.h b/lib/Target/X86/AsmParser/X86Operand.h index 9db1a8483be..6672cbfe981 100644 --- a/lib/Target/X86/AsmParser/X86Operand.h +++ b/lib/Target/X86/AsmParser/X86Operand.h @@ -271,6 +271,9 @@ struct X86Operand : public MCParsedAsmOperand { bool isMem256_RC256X() const { return isMem256() && isMemIndexReg(X86::YMM0, X86::YMM31); } + bool isMem256_RC512() const { + return isMem256() && isMemIndexReg(X86::ZMM0, X86::ZMM31); + } bool isMem512_RC256X() const { return isMem512() && isMemIndexReg(X86::YMM0, X86::YMM31); } diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index f916ab29018..d2b9b1f45b1 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -7837,7 +7837,7 @@ multiclass avx512_gather_d_ps dopc, bits<8> qopc, AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> { defm NAME##D##SUFF##Z: avx512_gather, EVEX_V512; - defm NAME##Q##SUFF##Z: avx512_gather, EVEX_V512; let Predicates = [HasVLX] in { defm NAME##D##SUFF##Z256: avx512_gather dopc, bits<8> qopc, AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> { defm NAME##D##SUFF##Z: avx512_scatter, EVEX_V512; - defm NAME##Q##SUFF##Z: avx512_scatter, EVEX_V512; let Predicates = [HasVLX] in { defm NAME##D##SUFF##Z256: avx512_scatter, EVEX_V512, EVEX_CD8<32, CD8VT1>; defm VGATHERPF0QPS: avx512_gather_scatter_prefetch<0xC7, MRM1m, "vgatherpf0qps", - VK8WM, vz512mem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; + VK8WM, vz256xmem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; defm VGATHERPF0DPD: avx512_gather_scatter_prefetch<0xC6, MRM1m, "vgatherpf0dpd", VK8WM, vy512mem>, EVEX_V512, VEX_W, EVEX_CD8<32, CD8VT1>; @@ -7939,7 +7939,7 @@ defm VGATHERPF1DPS: avx512_gather_scatter_prefetch<0xC6, MRM2m, "vgatherpf1dps", VK16WM, vz512mem>, EVEX_V512, EVEX_CD8<32, CD8VT1>; defm VGATHERPF1QPS: avx512_gather_scatter_prefetch<0xC7, MRM2m, "vgatherpf1qps", - VK8WM, vz512mem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; + VK8WM, vz256xmem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; defm VGATHERPF1DPD: avx512_gather_scatter_prefetch<0xC6, MRM2m, "vgatherpf1dpd", VK8WM, vy512mem>, EVEX_V512, VEX_W, EVEX_CD8<32, CD8VT1>; @@ -7951,7 +7951,7 @@ defm VSCATTERPF0DPS: avx512_gather_scatter_prefetch<0xC6, MRM5m, "vscatterpf0dps VK16WM, vz512mem>, EVEX_V512, EVEX_CD8<32, CD8VT1>; defm VSCATTERPF0QPS: avx512_gather_scatter_prefetch<0xC7, MRM5m, "vscatterpf0qps", - VK8WM, vz512mem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; + VK8WM, vz256xmem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; defm VSCATTERPF0DPD: avx512_gather_scatter_prefetch<0xC6, MRM5m, "vscatterpf0dpd", VK8WM, vy512mem>, EVEX_V512, VEX_W, EVEX_CD8<32, CD8VT1>; @@ -7963,7 +7963,7 @@ defm VSCATTERPF1DPS: avx512_gather_scatter_prefetch<0xC6, MRM6m, "vscatterpf1dps VK16WM, vz512mem>, EVEX_V512, EVEX_CD8<32, CD8VT1>; defm VSCATTERPF1QPS: avx512_gather_scatter_prefetch<0xC7, MRM6m, "vscatterpf1qps", - VK8WM, vz512mem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; + VK8WM, vz256xmem>, EVEX_V512, EVEX_CD8<64, CD8VT1>; defm VSCATTERPF1DPD: avx512_gather_scatter_prefetch<0xC6, MRM6m, "vscatterpf1dpd", VK8WM, vy512mem>, EVEX_V512, VEX_W, EVEX_CD8<32, CD8VT1>; diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 2796be79a16..27a9adf4963 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -318,6 +318,7 @@ let RenderMethod = "addMemOperands", SuperClasses = [X86MemAsmOperand] in { def X86Mem128_RC256XOperand : AsmOperandClass { let Name = "Mem128_RC256X"; } def X86Mem256_RC256XOperand : AsmOperandClass { let Name = "Mem256_RC256X"; } def X86Mem512_RC256XOperand : AsmOperandClass { let Name = "Mem512_RC256X"; } + def X86Mem256_RC512Operand : AsmOperandClass { let Name = "Mem256_RC512"; } def X86Mem512_RC512Operand : AsmOperandClass { let Name = "Mem512_RC512"; } } @@ -377,6 +378,7 @@ def vx256xmem : X86VMemOperand; def vy128xmem : X86VMemOperand; def vy256xmem : X86VMemOperand; def vy512mem : X86VMemOperand; +def vz256xmem : X86VMemOperand; def vz512mem : X86VMemOperand; // A version of i8mem for use on x86-64 and x32 that uses a NOREX GPR instead diff --git a/test/MC/X86/intel-syntax-avx512.s b/test/MC/X86/intel-syntax-avx512.s index bf6e2ea9893..528920ef4c3 100644 --- a/test/MC/X86/intel-syntax-avx512.s +++ b/test/MC/X86/intel-syntax-avx512.s @@ -37936,17 +37936,17 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0x62,0xfd,0x49,0x93,0xac,0x91,0x00,0x04,0x00,0x00] vgatherqpd zmm29{k1},ZMMWORD PTR [rcx+zmm2*4+0x400] -// CHECK: vgatherqps ymm18 {k1}, zmmword ptr [r14 + 8*zmm4 + 123] +// CHECK: vgatherqps ymm18 {k1}, ymmword ptr [r14 + 8*zmm4 + 123] // CHECK: encoding: [0x62,0xc2,0x7d,0x49,0x93,0x94,0xe6,0x7b,0x00,0x00,0x00] - vgatherqps ymm18{k1},ZMMWORD PTR [r14+zmm4*8+0x7b] + vgatherqps ymm18{k1},YMMWORD PTR [r14+zmm4*8+0x7b] -// CHECK: vgatherqps ymm18 {k1}, zmmword ptr [r9 + zmm4 + 256] +// CHECK: vgatherqps ymm18 {k1}, ymmword ptr [r9 + zmm4 + 256] // CHECK: encoding: [0x62,0xc2,0x7d,0x49,0x93,0x54,0x21,0x40] - vgatherqps ymm18{k1},ZMMWORD PTR [r9+zmm4*1+0x100] + vgatherqps ymm18{k1},YMMWORD PTR [r9+zmm4*1+0x100] -// CHECK: vgatherqps ymm18 {k1}, zmmword ptr [rcx + 4*zmm4 + 1024] +// CHECK: vgatherqps ymm18 {k1}, ymmword ptr [rcx + 4*zmm4 + 1024] // CHECK: encoding: [0x62,0xe2,0x7d,0x49,0x93,0x94,0xa1,0x00,0x04,0x00,0x00] - vgatherqps ymm18{k1},ZMMWORD PTR [rcx+zmm4*4+0x400] + vgatherqps ymm18{k1},YMMWORD PTR [rcx+zmm4*4+0x400] // CHECK: vpgatherdd zmm17 {k1}, zmmword ptr [r14 + 8*zmm11 + 123] // CHECK: encoding: [0x62,0x82,0x7d,0x49,0x90,0x8c,0xde,0x7b,0x00,0x00,0x00] @@ -37972,17 +37972,17 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0x32,0xfd,0x49,0x90,0x84,0xb1,0x00,0x04,0x00,0x00] vpgatherdq zmm8{k1},ZMMWORD PTR [rcx+ymm14*4+0x400] -// CHECK: vpgatherqd ymm3 {k1}, zmmword ptr [r14 + 8*zmm17 + 123] +// CHECK: vpgatherqd ymm3 {k1}, ymmword ptr [r14 + 8*zmm17 + 123] // CHECK: encoding: [0x62,0xd2,0x7d,0x41,0x91,0x9c,0xce,0x7b,0x00,0x00,0x00] - vpgatherqd ymm3{k1},ZMMWORD PTR [r14+zmm17*8+0x7b] + vpgatherqd ymm3{k1},YMMWORD PTR [r14+zmm17*8+0x7b] -// CHECK: vpgatherqd ymm3 {k1}, zmmword ptr [r9 + zmm17 + 256] +// CHECK: vpgatherqd ymm3 {k1}, ymmword ptr [r9 + zmm17 + 256] // CHECK: encoding: [0x62,0xd2,0x7d,0x41,0x91,0x5c,0x09,0x40] - vpgatherqd ymm3{k1},ZMMWORD PTR [r9+zmm17*1+0x100] + vpgatherqd ymm3{k1},YMMWORD PTR [r9+zmm17*1+0x100] -// CHECK: vpgatherqd ymm3 {k1}, zmmword ptr [rcx + 4*zmm17 + 1024] +// CHECK: vpgatherqd ymm3 {k1}, ymmword ptr [rcx + 4*zmm17 + 1024] // CHECK: encoding: [0x62,0xf2,0x7d,0x41,0x91,0x9c,0x89,0x00,0x04,0x00,0x00] - vpgatherqd ymm3{k1},ZMMWORD PTR [rcx+zmm17*4+0x400] + vpgatherqd ymm3{k1},YMMWORD PTR [rcx+zmm17*4+0x400] // CHECK: vpgatherqq zmm17 {k1}, zmmword ptr [r14 + 8*zmm21 + 123] // CHECK: encoding: [0x62,0xc2,0xfd,0x41,0x91,0x8c,0xee,0x7b,0x00,0x00,0x00] @@ -38028,21 +38028,21 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0xf2,0xfd,0x49,0xa0,0xac,0xb1,0x00,0x04,0x00,0x00] vpscatterdq ZMMWORD PTR [rcx+ymm6*4+0x400]{k1},zmm5 -// CHECK: vpscatterqd zmmword ptr [r14 + 8*zmm2 + 123] {k1}, ymm20 +// CHECK: vpscatterqd ymmword ptr [r14 + 8*zmm2 + 123] {k1}, ymm20 // CHECK: encoding: [0x62,0xc2,0x7d,0x49,0xa1,0xa4,0xd6,0x7b,0x00,0x00,0x00] - vpscatterqd ZMMWORD PTR [r14+zmm2*8+0x7b]{k1},ymm20 + vpscatterqd YMMWORD PTR [r14+zmm2*8+0x7b]{k1},ymm20 -// CHECK: vpscatterqd zmmword ptr [r14 + 8*zmm2 + 123] {k1}, ymm20 +// CHECK: vpscatterqd ymmword ptr [r14 + 8*zmm2 + 123] {k1}, ymm20 // CHECK: encoding: [0x62,0xc2,0x7d,0x49,0xa1,0xa4,0xd6,0x7b,0x00,0x00,0x00] - vpscatterqd ZMMWORD PTR [r14+zmm2*8+0x7b]{k1},ymm20 + vpscatterqd YMMWORD PTR [r14+zmm2*8+0x7b]{k1},ymm20 -// CHECK: vpscatterqd zmmword ptr [r9 + zmm2 + 256] {k1}, ymm20 +// CHECK: vpscatterqd ymmword ptr [r9 + zmm2 + 256] {k1}, ymm20 // CHECK: encoding: [0x62,0xc2,0x7d,0x49,0xa1,0x64,0x11,0x40] - vpscatterqd ZMMWORD PTR [r9+zmm2*1+0x100]{k1},ymm20 + vpscatterqd YMMWORD PTR [r9+zmm2*1+0x100]{k1},ymm20 -// CHECK: vpscatterqd zmmword ptr [rcx + 4*zmm2 + 1024] {k1}, ymm20 +// CHECK: vpscatterqd ymmword ptr [rcx + 4*zmm2 + 1024] {k1}, ymm20 // CHECK: encoding: [0x62,0xe2,0x7d,0x49,0xa1,0xa4,0x91,0x00,0x04,0x00,0x00] - vpscatterqd ZMMWORD PTR [rcx+zmm2*4+0x400]{k1},ymm20 + vpscatterqd YMMWORD PTR [rcx+zmm2*4+0x400]{k1},ymm20 // CHECK: vpscatterqq zmmword ptr [r14 + 8*zmm20 + 123] {k1}, zmm14 // CHECK: encoding: [0x62,0x52,0xfd,0x41,0xa1,0xb4,0xe6,0x7b,0x00,0x00,0x00] @@ -38108,21 +38108,21 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0xa2,0xfd,0x41,0xa3,0xb4,0xa1,0x00,0x04,0x00,0x00] vscatterqpd ZMMWORD PTR [rcx+zmm28*4+0x400]{k1},zmm22 -// CHECK: vscatterqps zmmword ptr [r14 + 8*zmm27 + 123] {k1}, ymm6 +// CHECK: vscatterqps ymmword ptr [r14 + 8*zmm27 + 123] {k1}, ymm6 // CHECK: encoding: [0x62,0x92,0x7d,0x41,0xa3,0xb4,0xde,0x7b,0x00,0x00,0x00] - vscatterqps ZMMWORD PTR [r14+zmm27*8+0x7b]{k1},ymm6 + vscatterqps YMMWORD PTR [r14+zmm27*8+0x7b]{k1},ymm6 -// CHECK: vscatterqps zmmword ptr [r14 + 8*zmm27 + 123] {k1}, ymm6 +// CHECK: vscatterqps ymmword ptr [r14 + 8*zmm27 + 123] {k1}, ymm6 // CHECK: encoding: [0x62,0x92,0x7d,0x41,0xa3,0xb4,0xde,0x7b,0x00,0x00,0x00] - vscatterqps ZMMWORD PTR [r14+zmm27*8+0x7b]{k1},ymm6 + vscatterqps YMMWORD PTR [r14+zmm27*8+0x7b]{k1},ymm6 -// CHECK: vscatterqps zmmword ptr [r9 + zmm27 + 256] {k1}, ymm6 +// CHECK: vscatterqps ymmword ptr [r9 + zmm27 + 256] {k1}, ymm6 // CHECK: encoding: [0x62,0x92,0x7d,0x41,0xa3,0x74,0x19,0x40] - vscatterqps ZMMWORD PTR [r9+zmm27*1+0x100]{k1},ymm6 + vscatterqps YMMWORD PTR [r9+zmm27*1+0x100]{k1},ymm6 -// CHECK: vscatterqps zmmword ptr [rcx + 4*zmm27 + 1024] {k1}, ymm6 +// CHECK: vscatterqps ymmword ptr [rcx + 4*zmm27 + 1024] {k1}, ymm6 // CHECK: encoding: [0x62,0xb2,0x7d,0x41,0xa3,0xb4,0x99,0x00,0x04,0x00,0x00] - vscatterqps ZMMWORD PTR [rcx+zmm27*4+0x400]{k1},ymm6 + vscatterqps YMMWORD PTR [rcx+zmm27*4+0x400]{k1},ymm6 // CHECK: vscatterdpd zmmword ptr [r14 + 8*ymm27 - 123] {k1}, zmm18 // CHECK: encoding: [0x62,0x82,0xfd,0x41,0xa2,0x94,0xde,0x85,0xff,0xff,0xff] @@ -38172,21 +38172,21 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0x32,0xfd,0x41,0xa3,0x84,0x89,0x00,0x04,0x00,0x00] vscatterqpd ZMMWORD PTR [rcx+zmm25*4+0x400]{k1},zmm8 -// CHECK: vscatterqps zmmword ptr [r14 + 8*zmm10 - 123] {k1}, ymm13 +// CHECK: vscatterqps ymmword ptr [r14 + 8*zmm10 - 123] {k1}, ymm13 // CHECK: encoding: [0x62,0x12,0x7d,0x49,0xa3,0xac,0xd6,0x85,0xff,0xff,0xff] - vscatterqps ZMMWORD PTR [r14+zmm10*8-0x7b]{k1},ymm13 + vscatterqps YMMWORD PTR [r14+zmm10*8-0x7b]{k1},ymm13 -// CHECK: vscatterqps zmmword ptr [r14 + 8*zmm10 - 123] {k1}, ymm13 +// CHECK: vscatterqps ymmword ptr [r14 + 8*zmm10 - 123] {k1}, ymm13 // CHECK: encoding: [0x62,0x12,0x7d,0x49,0xa3,0xac,0xd6,0x85,0xff,0xff,0xff] - vscatterqps ZMMWORD PTR [r14+zmm10*8-0x7b]{k1},ymm13 + vscatterqps YMMWORD PTR [r14+zmm10*8-0x7b]{k1},ymm13 -// CHECK: vscatterqps zmmword ptr [r9 + zmm10 + 256] {k1}, ymm13 +// CHECK: vscatterqps ymmword ptr [r9 + zmm10 + 256] {k1}, ymm13 // CHECK: encoding: [0x62,0x12,0x7d,0x49,0xa3,0x6c,0x11,0x40] - vscatterqps ZMMWORD PTR [r9+zmm10*1+0x100]{k1},ymm13 + vscatterqps YMMWORD PTR [r9+zmm10*1+0x100]{k1},ymm13 -// CHECK: vscatterqps zmmword ptr [rcx + 4*zmm10 + 1024] {k1}, ymm13 +// CHECK: vscatterqps ymmword ptr [rcx + 4*zmm10 + 1024] {k1}, ymm13 // CHECK: encoding: [0x62,0x32,0x7d,0x49,0xa3,0xac,0x91,0x00,0x04,0x00,0x00] - vscatterqps ZMMWORD PTR [rcx+zmm10*4+0x400]{k1},ymm13 + vscatterqps YMMWORD PTR [rcx+zmm10*4+0x400]{k1},ymm13 // CHECK: vgatherdpd zmm30 {k1}, zmmword ptr [r14 + 8*ymm5 - 123] // CHECK: encoding: [0x62,0x42,0xfd,0x49,0x92,0xb4,0xee,0x85,0xff,0xff,0xff] @@ -38224,17 +38224,17 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0x22,0xfd,0x49,0x93,0x9c,0xa9,0x00,0x04,0x00,0x00] vgatherqpd zmm27{k1},ZMMWORD PTR [rcx+zmm13*4+0x400] -// CHECK: vgatherqps ymm27 {k1}, zmmword ptr [r14 + 8*zmm14 - 123] +// CHECK: vgatherqps ymm27 {k1}, ymmword ptr [r14 + 8*zmm14 - 123] // CHECK: encoding: [0x62,0x02,0x7d,0x49,0x93,0x9c,0xf6,0x85,0xff,0xff,0xff] - vgatherqps ymm27{k1},ZMMWORD PTR [r14+zmm14*8-0x7b] + vgatherqps ymm27{k1},YMMWORD PTR [r14+zmm14*8-0x7b] -// CHECK: vgatherqps ymm27 {k1}, zmmword ptr [r9 + zmm14 + 256] +// CHECK: vgatherqps ymm27 {k1}, ymmword ptr [r9 + zmm14 + 256] // CHECK: encoding: [0x62,0x02,0x7d,0x49,0x93,0x5c,0x31,0x40] - vgatherqps ymm27{k1},ZMMWORD PTR [r9+zmm14*1+0x100] + vgatherqps ymm27{k1},YMMWORD PTR [r9+zmm14*1+0x100] -// CHECK: vgatherqps ymm27 {k1}, zmmword ptr [rcx + 4*zmm14 + 1024] +// CHECK: vgatherqps ymm27 {k1}, ymmword ptr [rcx + 4*zmm14 + 1024] // CHECK: encoding: [0x62,0x22,0x7d,0x49,0x93,0x9c,0xb1,0x00,0x04,0x00,0x00] - vgatherqps ymm27{k1},ZMMWORD PTR [rcx+zmm14*4+0x400] + vgatherqps ymm27{k1},YMMWORD PTR [rcx+zmm14*4+0x400] // CHECK: vpgatherdd zmm7 {k1}, zmmword ptr [r14 + 8*zmm16 - 123] // CHECK: encoding: [0x62,0xd2,0x7d,0x41,0x90,0xbc,0xc6,0x85,0xff,0xff,0xff] @@ -38260,17 +38260,17 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0x62,0xfd,0x49,0x90,0x8c,0xb9,0x00,0x04,0x00,0x00] vpgatherdq zmm25{k1},ZMMWORD PTR [rcx+ymm7*4+0x400] -// CHECK: vpgatherqd ymm19 {k1}, zmmword ptr [r14 + 8*zmm17 - 123] +// CHECK: vpgatherqd ymm19 {k1}, ymmword ptr [r14 + 8*zmm17 - 123] // CHECK: encoding: [0x62,0xc2,0x7d,0x41,0x91,0x9c,0xce,0x85,0xff,0xff,0xff] - vpgatherqd ymm19{k1},ZMMWORD PTR [r14+zmm17*8-0x7b] + vpgatherqd ymm19{k1},YMMWORD PTR [r14+zmm17*8-0x7b] -// CHECK: vpgatherqd ymm19 {k1}, zmmword ptr [r9 + zmm17 + 256] +// CHECK: vpgatherqd ymm19 {k1}, ymmword ptr [r9 + zmm17 + 256] // CHECK: encoding: [0x62,0xc2,0x7d,0x41,0x91,0x5c,0x09,0x40] - vpgatherqd ymm19{k1},ZMMWORD PTR [r9+zmm17*1+0x100] + vpgatherqd ymm19{k1},YMMWORD PTR [r9+zmm17*1+0x100] -// CHECK: vpgatherqd ymm19 {k1}, zmmword ptr [rcx + 4*zmm17 + 1024] +// CHECK: vpgatherqd ymm19 {k1}, ymmword ptr [rcx + 4*zmm17 + 1024] // CHECK: encoding: [0x62,0xe2,0x7d,0x41,0x91,0x9c,0x89,0x00,0x04,0x00,0x00] - vpgatherqd ymm19{k1},ZMMWORD PTR [rcx+zmm17*4+0x400] + vpgatherqd ymm19{k1},YMMWORD PTR [rcx+zmm17*4+0x400] // CHECK: vpgatherqq zmm10 {k1}, zmmword ptr [r14 + 8*zmm13 - 123] // CHECK: encoding: [0x62,0x12,0xfd,0x49,0x91,0x94,0xee,0x85,0xff,0xff,0xff] @@ -38316,21 +38316,21 @@ vaddpd zmm1, zmm1, zmm2, {rz-sae} // CHECK: encoding: [0x62,0xb2,0xfd,0x41,0xa0,0x8c,0x89,0x00,0x04,0x00,0x00] vpscatterdq ZMMWORD PTR [rcx+ymm25*4+0x400]{k1},zmm1 -// CHECK: vpscatterqd zmmword ptr [r14 + 8*zmm22 - 123] {k1}, ymm23 +// CHECK: vpscatterqd ymmword ptr [r14 + 8*zmm22 - 123] {k1}, ymm23 // CHECK: encoding: [0x62,0xc2,0x7d,0x41,0xa1,0xbc,0xf6,0x85,0xff,0xff,0xff] - vpscatterqd ZMMWORD PTR [r14+zmm22*8-0x7b]{k1},ymm23 + vpscatterqd YMMWORD PTR [r14+zmm22*8-0x7b]{k1},ymm23 -// CHECK: vpscatterqd zmmword ptr [r14 + 8*zmm22 - 123] {k1}, ymm23 +// CHECK: vpscatterqd ymmword ptr [r14 + 8*zmm22 - 123] {k1}, ymm23 // CHECK: encoding: [0x62,0xc2,0x7d,0x41,0xa1,0xbc,0xf6,0x85,0xff,0xff,0xff] - vpscatterqd ZMMWORD PTR [r14+zmm22*8-0x7b]{k1},ymm23 + vpscatterqd YMMWORD PTR [r14+zmm22*8-0x7b]{k1},ymm23 -// CHECK: vpscatterqd zmmword ptr [r9 + zmm22 + 256] {k1}, ymm23 +// CHECK: vpscatterqd ymmword ptr [r9 + zmm22 + 256] {k1}, ymm23 // CHECK: encoding: [0x62,0xc2,0x7d,0x41,0xa1,0x7c,0x31,0x40] - vpscatterqd ZMMWORD PTR [r9+zmm22*1+0x100]{k1},ymm23 + vpscatterqd YMMWORD PTR [r9+zmm22*1+0x100]{k1},ymm23 -// CHECK: vpscatterqd zmmword ptr [rcx + 4*zmm22 + 1024] {k1}, ymm23 +// CHECK: vpscatterqd ymmword ptr [rcx + 4*zmm22 + 1024] {k1}, ymm23 // CHECK: encoding: [0x62,0xe2,0x7d,0x41,0xa1,0xbc,0xb1,0x00,0x04,0x00,0x00] - vpscatterqd ZMMWORD PTR [rcx+zmm22*4+0x400]{k1},ymm23 + vpscatterqd YMMWORD PTR [rcx+zmm22*4+0x400]{k1},ymm23 // CHECK: vpscatterqq zmmword ptr [r14 + 8*zmm8 - 123] {k1}, zmm2 // CHECK: encoding: [0x62,0x92,0xfd,0x49,0xa1,0x94,0xc6,0x85,0xff,0xff,0xff] diff --git a/utils/TableGen/X86RecognizableInstr.cpp b/utils/TableGen/X86RecognizableInstr.cpp index 4736c4e510d..d19239b3261 100644 --- a/utils/TableGen/X86RecognizableInstr.cpp +++ b/utils/TableGen/X86RecognizableInstr.cpp @@ -1058,6 +1058,7 @@ OperandType RecognizableInstr::typeFromString(const std::string &s, TYPE("vy128xmem", TYPE_M128) TYPE("vy256xmem", TYPE_M256) TYPE("vy512mem", TYPE_M512) + TYPE("vz256xmem", TYPE_M256) TYPE("vz512mem", TYPE_M512) TYPE("BNDR", TYPE_BNDR) errs() << "Unhandled type string " << s << "\n"; @@ -1253,6 +1254,7 @@ RecognizableInstr::memoryEncodingFromString(const std::string &s, ENCODING("vy128xmem", ENCODING_RM) ENCODING("vy256xmem", ENCODING_RM) ENCODING("vy512mem", ENCODING_RM) + ENCODING("vz256xmem", ENCODING_RM) ENCODING("vz512mem", ENCODING_RM) errs() << "Unhandled memory encoding " << s << "\n"; llvm_unreachable("Unhandled memory encoding"); -- 2.50.1