diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 7b6343f988afb..0ec8194031918 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -1123,10 +1123,10 @@ defm : vextract_for_mask_cast<"VEXTRACTI64x4Z", v64i8_info, v32i8x_info, EXTRACT_get_vextract256_imm, [HasAVX512]>; // vextractps - extract 32 bits from XMM -def VEXTRACTPSZrr : AVX512AIi8<0x17, MRMDestReg, (outs GR32:$dst), +def VEXTRACTPSZrr : AVX512AIi8<0x17, MRMDestReg, (outs GR32orGR64:$dst), (ins VR128X:$src1, u8imm:$src2), "vextractps\t{$src2, $src1, $dst|$dst, $src1, $src2}", - [(set GR32:$dst, (extractelt (bc_v4i32 (v4f32 VR128X:$src1)), imm:$src2))]>, + [(set GR32orGR64:$dst, (extractelt (bc_v4i32 (v4f32 VR128X:$src1)), imm:$src2))]>, EVEX, VEX_WIG, Sched<[WriteVecExtract]>; def VEXTRACTPSZmr : AVX512AIi8<0x17, MRMDestMem, (outs), diff --git a/llvm/test/MC/X86/intel-syntax-x86-64-avx.s b/llvm/test/MC/X86/intel-syntax-x86-64-avx.s index bb57cb287f384..c1f20d204a8c4 100644 --- a/llvm/test/MC/X86/intel-syntax-x86-64-avx.s +++ b/llvm/test/MC/X86/intel-syntax-x86-64-avx.s @@ -167,3 +167,7 @@ // CHECK: vpmaddwd ymm1, ymm2, ymmword ptr [rcx + 8*r14 - 536870910] // CHECK: encoding: [0xc4,0xa1,0x6d,0xf5,0x8c,0xf1,0x02,0x00,0x00,0xe0] vpmaddwd ymm1, ymm2, ymmword ptr [rcx + 8*r14 - 536870910] + +// CHECK: vextractps ecx, xmm2, 1 +// CHECK: encoding: [0xc4,0xe3,0x79,0x17,0xd1,0x01] + vextractps ecx, xmm2, 1 diff --git a/llvm/test/MC/X86/intel-syntax-x86-64-avx512f_vl.s b/llvm/test/MC/X86/intel-syntax-x86-64-avx512f_vl.s index 29bde03c58605..31c43afe50171 100644 --- a/llvm/test/MC/X86/intel-syntax-x86-64-avx512f_vl.s +++ b/llvm/test/MC/X86/intel-syntax-x86-64-avx512f_vl.s @@ -1260,3 +1260,6 @@ // CHECK: encoding: [0x62,0xf1,0x7e,0x89,0xe6,0x11] vcvtdq2pd xmm2 {k1} {z}, qword ptr [rcx] +// CHECK: vextractps ecx, xmm17, 1 +// CHECK: encoding: [0x62,0xe3,0x7d,0x08,0x17,0xc9,0x01] + vextractps rcx, xmm17, 1