diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index f67bc0e74acc8..203344cd81aab 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -6677,10 +6677,26 @@ multiclass SS42AI_pcmpestrm { let Defs = [XMM0, EFLAGS], Uses = [EAX, EDX], hasSideEffects = 0 in { let Predicates = [HasAVX] in - defm VPCMPESTRM : SS42AI_pcmpestrm<"vpcmpestrm">, VEX, WIG; + defm VPCMPESTRM : SS42AI_pcmpestrm<"vpcmpestrm">, VEX; defm PCMPESTRM : SS42AI_pcmpestrm<"pcmpestrm">; } +let Defs = [XMM0, EFLAGS], Uses = [RAX, RDX], hasSideEffects = 0 in { + let Predicates = [HasAVX, In64BitMode] in + defm VPCMPESTRMQ : SS42AI_pcmpestrm<"vpcmpestrmq">, VEX, REX_W; + let Predicates = [UseSSE42, In64BitMode] in + defm PCMPESTRMQ : SS42AI_pcmpestrm<"pcmpestrmq">, REX_W; +} + +def : InstAlias<"vpcmpestrm{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (VPCMPESTRMrri VR128:$src1, VR128:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"vpcmpestrm{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (VPCMPESTRMrmi VR128:$src1, i128mem:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"pcmpestrm{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (PCMPESTRMrri VR128:$src1, VR128:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"pcmpestrm{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (PCMPESTRMrmi VR128:$src1, i128mem:$src3, u8imm:$src5), 0, "att">; + multiclass SS42AI_pcmpistri { def rri : SS42AI<0x63, MRMSrcReg, (outs), (ins VR128:$src1, VR128:$src2, u8imm:$src3), @@ -6713,10 +6729,26 @@ multiclass SS42AI_pcmpestri { let Defs = [ECX, EFLAGS], Uses = [EAX, EDX], hasSideEffects = 0 in { let Predicates = [HasAVX] in - defm VPCMPESTRI : SS42AI_pcmpestri<"vpcmpestri">, VEX, WIG; + defm VPCMPESTRI : SS42AI_pcmpestri<"vpcmpestri">, VEX; defm PCMPESTRI : SS42AI_pcmpestri<"pcmpestri">; } +let Defs = [ECX, EFLAGS], Uses = [RAX, RDX], hasSideEffects = 0 in { + let Predicates = [HasAVX, In64BitMode] in + defm VPCMPESTRIQ : SS42AI_pcmpestri<"vpcmpestriq">, VEX, REX_W; + let Predicates = [UseSSE42, In64BitMode] in + defm PCMPESTRIQ : SS42AI_pcmpestri<"pcmpestriq">, REX_W; +} + +def : InstAlias<"vpcmpestri{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (VPCMPESTRIrri VR128:$src1, VR128:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"vpcmpestri{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (VPCMPESTRIrmi VR128:$src1, i128mem:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"pcmpestri{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (PCMPESTRIrri VR128:$src1, VR128:$src3, u8imm:$src5), 0, "att">; +def : InstAlias<"pcmpestri{l}\t{$src5, $src3, $src1|$src1, $src3, $src5}", + (PCMPESTRIrmi VR128:$src1, i128mem:$src3, u8imm:$src5), 0, "att">; + //===----------------------------------------------------------------------===// // SSE4.2 - CRC Instructions //===----------------------------------------------------------------------===// diff --git a/llvm/test/MC/Disassembler/X86/x86-64-avx.txt b/llvm/test/MC/Disassembler/X86/x86-64-avx.txt index c0ca4cd715314..7caeaf0053950 100644 --- a/llvm/test/MC/Disassembler/X86/x86-64-avx.txt +++ b/llvm/test/MC/Disassembler/X86/x86-64-avx.txt @@ -9,13 +9,13 @@ # CHECK: vpcmpestri $100, %xmm3, %xmm11 0xc4 0x63 0x79 0x61 0xdb 0x64 -# CHECK: vpcmpestri $100, %xmm3, %xmm11 +# CHECK: vpcmpestriq $100, %xmm3, %xmm11 0xc4 0x63 0xf9 0x61 0xdb 0x64 # CHECK: vpcmpestrm $100, %xmm3, %xmm11 0xc4 0x63 0x79 0x60 0xdb 0x64 -# CHECK: vpcmpestrm $100, %xmm3, %xmm11 +# CHECK: vpcmpestrmq $100, %xmm3, %xmm11 0xc4 0x63 0xf9 0x60 0xdb 0x64 # CHECK: vpcmpistri $100, %xmm3, %xmm11 diff --git a/llvm/test/MC/X86/SSE42-32.s b/llvm/test/MC/X86/SSE42-32.s index 0c4d8c640a5ff..7f33c3dc6f2c8 100644 --- a/llvm/test/MC/X86/SSE42-32.s +++ b/llvm/test/MC/X86/SSE42-32.s @@ -88,6 +88,10 @@ crc32l (%edx), %ebx // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x8c,0x82,0x10,0xe3,0x0f,0xe3,0x00] pcmpestri $0, -485498096(%edx,%eax,4), %xmm1 +// CHECK: pcmpestri $0, -485498096(%edx,%eax,4), %xmm1 +// CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x8c,0x82,0x10,0xe3,0x0f,0xe3,0x00] +pcmpestril $0, -485498096(%edx,%eax,4), %xmm1 + // CHECK: pcmpestri $0, 485498096(%edx,%eax,4), %xmm1 // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x8c,0x82,0xf0,0x1c,0xf0,0x1c,0x00] pcmpestri $0, 485498096(%edx,%eax,4), %xmm1 @@ -112,10 +116,18 @@ pcmpestri $0, (%edx), %xmm1 // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0xc9,0x00] pcmpestri $0, %xmm1, %xmm1 +// CHECK: pcmpestri $0, %xmm1, %xmm1 +// CHECK: encoding: [0x66,0x0f,0x3a,0x61,0xc9,0x00] +pcmpestril $0, %xmm1, %xmm1 + // CHECK: pcmpestrm $0, -485498096(%edx,%eax,4), %xmm1 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x8c,0x82,0x10,0xe3,0x0f,0xe3,0x00] pcmpestrm $0, -485498096(%edx,%eax,4), %xmm1 +// CHECK: pcmpestrm $0, -485498096(%edx,%eax,4), %xmm1 +// CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x8c,0x82,0x10,0xe3,0x0f,0xe3,0x00] +pcmpestrml $0, -485498096(%edx,%eax,4), %xmm1 + // CHECK: pcmpestrm $0, 485498096(%edx,%eax,4), %xmm1 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x8c,0x82,0xf0,0x1c,0xf0,0x1c,0x00] pcmpestrm $0, 485498096(%edx,%eax,4), %xmm1 @@ -140,6 +152,10 @@ pcmpestrm $0, (%edx), %xmm1 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0xc9,0x00] pcmpestrm $0, %xmm1, %xmm1 +// CHECK: pcmpestrm $0, %xmm1, %xmm1 +// CHECK: encoding: [0x66,0x0f,0x3a,0x60,0xc9,0x00] +pcmpestrml $0, %xmm1, %xmm1 + // CHECK: pcmpgtq -485498096(%edx,%eax,4), %xmm1 // CHECK: encoding: [0x66,0x0f,0x38,0x37,0x8c,0x82,0x10,0xe3,0x0f,0xe3] pcmpgtq -485498096(%edx,%eax,4), %xmm1 diff --git a/llvm/test/MC/X86/SSE42-64.s b/llvm/test/MC/X86/SSE42-64.s index bde7d36156365..7a829d74bb603 100644 --- a/llvm/test/MC/X86/SSE42-64.s +++ b/llvm/test/MC/X86/SSE42-64.s @@ -116,6 +116,14 @@ crc32q (%rdx), %r13 // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] pcmpestri $0, 485498096, %xmm6 +// CHECK: pcmpestri $0, 485498096, %xmm6 +// CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] +pcmpestril $0, 485498096, %xmm6 + +// CHECK: pcmpestriq $0, 485498096, %xmm6 +// CHECK: encoding: [0x66,0x48,0x0f,0x3a,0x61,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] +pcmpestriq $0, 485498096, %xmm6 + // CHECK: pcmpestri $0, -64(%rdx,%rax,4), %xmm6 // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0x74,0x82,0xc0,0x00] pcmpestri $0, -64(%rdx,%rax,4), %xmm6 @@ -140,10 +148,26 @@ pcmpestri $0, (%rdx), %xmm6 // CHECK: encoding: [0x66,0x0f,0x3a,0x61,0xf6,0x00] pcmpestri $0, %xmm6, %xmm6 +// CHECK: pcmpestri $0, %xmm6, %xmm6 +// CHECK: encoding: [0x66,0x0f,0x3a,0x61,0xf6,0x00] +pcmpestril $0, %xmm6, %xmm6 + +// CHECK: pcmpestriq $0, %xmm6, %xmm6 +// CHECK: encoding: [0x66,0x48,0x0f,0x3a,0x61,0xf6,0x00] +pcmpestriq $0, %xmm6, %xmm6 + // CHECK: pcmpestrm $0, 485498096, %xmm6 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] pcmpestrm $0, 485498096, %xmm6 +// CHECK: pcmpestrm $0, 485498096, %xmm6 +// CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] +pcmpestrml $0, 485498096, %xmm6 + +// CHECK: pcmpestrmq $0, 485498096, %xmm6 +// CHECK: encoding: [0x66,0x48,0x0f,0x3a,0x60,0x34,0x25,0xf0,0x1c,0xf0,0x1c,0x00] +pcmpestrmq $0, 485498096, %xmm6 + // CHECK: pcmpestrm $0, -64(%rdx,%rax,4), %xmm6 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0x74,0x82,0xc0,0x00] pcmpestrm $0, -64(%rdx,%rax,4), %xmm6 @@ -168,6 +192,14 @@ pcmpestrm $0, (%rdx), %xmm6 // CHECK: encoding: [0x66,0x0f,0x3a,0x60,0xf6,0x00] pcmpestrm $0, %xmm6, %xmm6 +// CHECK: pcmpestrm $0, %xmm6, %xmm6 +// CHECK: encoding: [0x66,0x0f,0x3a,0x60,0xf6,0x00] +pcmpestrml $0, %xmm6, %xmm6 + +// CHECK: pcmpestrmq $0, %xmm6, %xmm6 +// CHECK: encoding: [0x66,0x48,0x0f,0x3a,0x60,0xf6,0x00] +pcmpestrmq $0, %xmm6, %xmm6 + // CHECK: pcmpgtq 485498096, %xmm6 // CHECK: encoding: [0x66,0x0f,0x38,0x37,0x34,0x25,0xf0,0x1c,0xf0,0x1c] pcmpgtq 485498096, %xmm6 diff --git a/llvm/test/MC/X86/avx-32-att.s b/llvm/test/MC/X86/avx-32-att.s index beba7faa18299..4bac27bec22b7 100644 --- a/llvm/test/MC/X86/avx-32-att.s +++ b/llvm/test/MC/X86/avx-32-att.s @@ -2127,10 +2127,18 @@ // CHECK: encoding: [0xc4,0xe3,0x79,0x60,0xea,0x07] vpcmpestrm $7, %xmm2, %xmm5 +// CHECK: vpcmpestrm $7, %xmm2, %xmm5 +// CHECK: encoding: [0xc4,0xe3,0x79,0x60,0xea,0x07] + vpcmpestrml $7, %xmm2, %xmm5 + // CHECK: vpcmpestrm $7, (%eax), %xmm5 // CHECK: encoding: [0xc4,0xe3,0x79,0x60,0x28,0x07] vpcmpestrm $7, (%eax), %xmm5 +// CHECK: vpcmpestrm $7, (%eax), %xmm5 +// CHECK: encoding: [0xc4,0xe3,0x79,0x60,0x28,0x07] + vpcmpestrml $7, (%eax), %xmm5 + // CHECK: vpcmpistri $7, %xmm2, %xmm5 // CHECK: encoding: [0xc4,0xe3,0x79,0x63,0xea,0x07] vpcmpistri $7, %xmm2, %xmm5 @@ -2143,10 +2151,18 @@ // CHECK: encoding: [0xc4,0xe3,0x79,0x61,0xea,0x07] vpcmpestri $7, %xmm2, %xmm5 +// CHECK: vpcmpestri $7, %xmm2, %xmm5 +// CHECK: encoding: [0xc4,0xe3,0x79,0x61,0xea,0x07] + vpcmpestril $7, %xmm2, %xmm5 + // CHECK: vpcmpestri $7, (%eax), %xmm5 // CHECK: encoding: [0xc4,0xe3,0x79,0x61,0x28,0x07] vpcmpestri $7, (%eax), %xmm5 +// CHECK: vpcmpestri $7, (%eax), %xmm5 +// CHECK: encoding: [0xc4,0xe3,0x79,0x61,0x28,0x07] + vpcmpestril $7, (%eax), %xmm5 + // CHECK: vaesimc %xmm2, %xmm5 // CHECK: encoding: [0xc4,0xe2,0x79,0xdb,0xea] vaesimc %xmm2, %xmm5 diff --git a/llvm/test/MC/X86/avx-64-att.s b/llvm/test/MC/X86/avx-64-att.s index f29142549bf52..519e4fc310919 100644 --- a/llvm/test/MC/X86/avx-64-att.s +++ b/llvm/test/MC/X86/avx-64-att.s @@ -2872,10 +2872,26 @@ vdivpd -4(%rcx,%rbx,8), %xmm10, %xmm11 // CHECK: encoding: [0xc4,0x43,0x79,0x60,0xd4,0x07] vpcmpestrm $7, %xmm12, %xmm10 +// CHECK: vpcmpestrm $7, %xmm12, %xmm10 +// CHECK: encoding: [0xc4,0x43,0x79,0x60,0xd4,0x07] + vpcmpestrml $7, %xmm12, %xmm10 + +// CHECK: vpcmpestrmq $7, %xmm12, %xmm10 +// CHECK: encoding: [0xc4,0x43,0xf9,0x60,0xd4,0x07] + vpcmpestrmq $7, %xmm12, %xmm10 + // CHECK: vpcmpestrm $7, (%rax), %xmm10 // CHECK: encoding: [0xc4,0x63,0x79,0x60,0x10,0x07] vpcmpestrm $7, (%rax), %xmm10 +// CHECK: vpcmpestrm $7, (%rax), %xmm10 +// CHECK: encoding: [0xc4,0x63,0x79,0x60,0x10,0x07] + vpcmpestrml $7, (%rax), %xmm10 + +// CHECK: vpcmpestrmq $7, (%rax), %xmm10 +// CHECK: encoding: [0xc4,0x63,0xf9,0x60,0x10,0x07] + vpcmpestrmq $7, (%rax), %xmm10 + // CHECK: vpcmpistri $7, %xmm12, %xmm10 // CHECK: encoding: [0xc4,0x43,0x79,0x63,0xd4,0x07] vpcmpistri $7, %xmm12, %xmm10 @@ -2888,10 +2904,26 @@ vdivpd -4(%rcx,%rbx,8), %xmm10, %xmm11 // CHECK: encoding: [0xc4,0x43,0x79,0x61,0xd4,0x07] vpcmpestri $7, %xmm12, %xmm10 +// CHECK: vpcmpestri $7, %xmm12, %xmm10 +// CHECK: encoding: [0xc4,0x43,0x79,0x61,0xd4,0x07] + vpcmpestril $7, %xmm12, %xmm10 + +// CHECK: vpcmpestriq $7, %xmm12, %xmm10 +// CHECK: encoding: [0xc4,0x43,0xf9,0x61,0xd4,0x07] + vpcmpestriq $7, %xmm12, %xmm10 + // CHECK: vpcmpestri $7, (%rax), %xmm10 // CHECK: encoding: [0xc4,0x63,0x79,0x61,0x10,0x07] vpcmpestri $7, (%rax), %xmm10 +// CHECK: vpcmpestri $7, (%rax), %xmm10 +// CHECK: encoding: [0xc4,0x63,0x79,0x61,0x10,0x07] + vpcmpestril $7, (%rax), %xmm10 + +// CHECK: vpcmpestriq $7, (%rax), %xmm10 +// CHECK: encoding: [0xc4,0x63,0xf9,0x61,0x10,0x07] + vpcmpestriq $7, (%rax), %xmm10 + // CHECK: vaesimc %xmm12, %xmm10 // CHECK: encoding: [0xc4,0x42,0x79,0xdb,0xd4] vaesimc %xmm12, %xmm10 diff --git a/llvm/test/TableGen/x86-fold-tables.inc b/llvm/test/TableGen/x86-fold-tables.inc index bafc98a69ddae..1ddffacc322f2 100644 --- a/llvm/test/TableGen/x86-fold-tables.inc +++ b/llvm/test/TableGen/x86-fold-tables.inc @@ -868,7 +868,9 @@ static const X86FoldTableEntry Table1[] = { {X86::PABSBrr, X86::PABSBrm, TB_ALIGN_16}, {X86::PABSDrr, X86::PABSDrm, TB_ALIGN_16}, {X86::PABSWrr, X86::PABSWrm, TB_ALIGN_16}, + {X86::PCMPESTRIQrri, X86::PCMPESTRIQrmi, 0}, {X86::PCMPESTRIrri, X86::PCMPESTRIrmi, 0}, + {X86::PCMPESTRMQrri, X86::PCMPESTRMQrmi, 0}, {X86::PCMPESTRMrri, X86::PCMPESTRMrmi, 0}, {X86::PCMPISTRIrri, X86::PCMPISTRIrmi, 0}, {X86::PCMPISTRMrri, X86::PCMPISTRMrmi, 0}, @@ -1653,7 +1655,9 @@ static const X86FoldTableEntry Table1[] = { {X86::VPBROADCASTWZ256rr, X86::VPBROADCASTWZ256rm, TB_NO_REVERSE}, {X86::VPBROADCASTWZrr, X86::VPBROADCASTWZrm, TB_NO_REVERSE}, {X86::VPBROADCASTWrr, X86::VPBROADCASTWrm, TB_NO_REVERSE}, + {X86::VPCMPESTRIQrri, X86::VPCMPESTRIQrmi, 0}, {X86::VPCMPESTRIrri, X86::VPCMPESTRIrmi, 0}, + {X86::VPCMPESTRMQrri, X86::VPCMPESTRMQrmi, 0}, {X86::VPCMPESTRMrri, X86::VPCMPESTRMrmi, 0}, {X86::VPCMPISTRIrri, X86::VPCMPISTRIrmi, 0}, {X86::VPCMPISTRMrri, X86::VPCMPISTRMrmi, 0}, diff --git a/llvm/test/TableGen/x86-instr-mapping.inc b/llvm/test/TableGen/x86-instr-mapping.inc index c22dd34ef981c..84550770fefe9 100644 --- a/llvm/test/TableGen/x86-instr-mapping.inc +++ b/llvm/test/TableGen/x86-instr-mapping.inc @@ -3030,8 +3030,12 @@ static const X86TableEntry X86SSE2AVXTable[] = { { X86::PCMPEQQrr, X86::VPCMPEQQrr }, { X86::PCMPEQWrm, X86::VPCMPEQWrm }, { X86::PCMPEQWrr, X86::VPCMPEQWrr }, + { X86::PCMPESTRIQrmi, X86::VPCMPESTRIQrmi }, + { X86::PCMPESTRIQrri, X86::VPCMPESTRIQrri }, { X86::PCMPESTRIrmi, X86::VPCMPESTRIrmi }, { X86::PCMPESTRIrri, X86::VPCMPESTRIrri }, + { X86::PCMPESTRMQrmi, X86::VPCMPESTRMQrmi }, + { X86::PCMPESTRMQrri, X86::VPCMPESTRMQrri }, { X86::PCMPESTRMrmi, X86::VPCMPESTRMrmi }, { X86::PCMPESTRMrri, X86::VPCMPESTRMrri }, { X86::PCMPGTBrm, X86::VPCMPGTBrm },