mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 12:02:58 +02:00
Remove intrinsic specific instructions for 128-bit (V)CVTDQ2PD. Replace with intrinsic patterns. Mem forms omitted because the load size is only 64-bits.
llvm-svn: 159070
This commit is contained in:
parent
c904a78f1e
commit
b05bd41aed
@ -410,7 +410,6 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
|||||||
{ X86::IMUL64rri8, X86::IMUL64rmi8, 0 },
|
{ X86::IMUL64rri8, X86::IMUL64rmi8, 0 },
|
||||||
{ X86::Int_COMISDrr, X86::Int_COMISDrm, 0 },
|
{ X86::Int_COMISDrr, X86::Int_COMISDrm, 0 },
|
||||||
{ X86::Int_COMISSrr, X86::Int_COMISSrm, 0 },
|
{ X86::Int_COMISSrr, X86::Int_COMISSrm, 0 },
|
||||||
{ X86::Int_CVTDQ2PDrr, X86::Int_CVTDQ2PDrm, TB_ALIGN_16 },
|
|
||||||
{ X86::Int_CVTDQ2PSrr, X86::Int_CVTDQ2PSrm, TB_ALIGN_16 },
|
{ X86::Int_CVTDQ2PSrr, X86::Int_CVTDQ2PSrm, TB_ALIGN_16 },
|
||||||
{ X86::Int_CVTPD2DQrr, X86::Int_CVTPD2DQrm, TB_ALIGN_16 },
|
{ X86::Int_CVTPD2DQrr, X86::Int_CVTPD2DQrm, TB_ALIGN_16 },
|
||||||
{ X86::Int_CVTPD2PSrr, X86::Int_CVTPD2PSrm, TB_ALIGN_16 },
|
{ X86::Int_CVTPD2PSrr, X86::Int_CVTPD2PSrm, TB_ALIGN_16 },
|
||||||
@ -496,7 +495,6 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
|||||||
// AVX 128-bit versions of foldable instructions
|
// AVX 128-bit versions of foldable instructions
|
||||||
{ X86::Int_VCOMISDrr, X86::Int_VCOMISDrm, 0 },
|
{ X86::Int_VCOMISDrr, X86::Int_VCOMISDrm, 0 },
|
||||||
{ X86::Int_VCOMISSrr, X86::Int_VCOMISSrm, 0 },
|
{ X86::Int_VCOMISSrr, X86::Int_VCOMISSrm, 0 },
|
||||||
{ X86::Int_VCVTDQ2PDrr, X86::Int_VCVTDQ2PDrm, TB_ALIGN_16 },
|
|
||||||
{ X86::Int_VCVTDQ2PSrr, X86::Int_VCVTDQ2PSrm, TB_ALIGN_16 },
|
{ X86::Int_VCVTDQ2PSrr, X86::Int_VCVTDQ2PSrm, TB_ALIGN_16 },
|
||||||
{ X86::Int_VCVTPD2DQrr, X86::Int_VCVTPD2DQrm, TB_ALIGN_16 },
|
{ X86::Int_VCVTPD2DQrr, X86::Int_VCVTPD2DQrm, TB_ALIGN_16 },
|
||||||
{ X86::Int_VCVTPD2PSrr, X86::Int_VCVTPD2PSrm, TB_ALIGN_16 },
|
{ X86::Int_VCVTPD2PSrr, X86::Int_VCVTPD2PSrm, TB_ALIGN_16 },
|
||||||
|
@ -1813,30 +1813,6 @@ def Int_CVTDQ2PSrm : I<0x5B, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
|
|||||||
IIC_SSE_CVT_PS_RM>,
|
IIC_SSE_CVT_PS_RM>,
|
||||||
TB, Requires<[HasSSE2]>;
|
TB, Requires<[HasSSE2]>;
|
||||||
|
|
||||||
// SSE2 instructions with XS prefix
|
|
||||||
def Int_VCVTDQ2PDrr : I<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
|
||||||
"vcvtdq2pd\t{$src, $dst|$dst, $src}",
|
|
||||||
[(set VR128:$dst, (int_x86_sse2_cvtdq2pd VR128:$src))],
|
|
||||||
IIC_SSE_CVT_PD_RR>,
|
|
||||||
XS, VEX, Requires<[HasAVX]>;
|
|
||||||
def Int_VCVTDQ2PDrm : I<0xE6, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
|
||||||
"vcvtdq2pd\t{$src, $dst|$dst, $src}",
|
|
||||||
[(set VR128:$dst, (int_x86_sse2_cvtdq2pd
|
|
||||||
(bitconvert (memopv2i64 addr:$src))))],
|
|
||||||
IIC_SSE_CVT_PD_RM>,
|
|
||||||
XS, VEX, Requires<[HasAVX]>;
|
|
||||||
def Int_CVTDQ2PDrr : I<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
|
||||||
"cvtdq2pd\t{$src, $dst|$dst, $src}",
|
|
||||||
[(set VR128:$dst, (int_x86_sse2_cvtdq2pd VR128:$src))],
|
|
||||||
IIC_SSE_CVT_PD_RR>,
|
|
||||||
XS, Requires<[HasSSE2]>;
|
|
||||||
def Int_CVTDQ2PDrm : I<0xE6, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
|
||||||
"cvtdq2pd\t{$src, $dst|$dst, $src}",
|
|
||||||
[(set VR128:$dst, (int_x86_sse2_cvtdq2pd
|
|
||||||
(bitconvert (memopv2i64 addr:$src))))],
|
|
||||||
IIC_SSE_CVT_PD_RM>,
|
|
||||||
XS, Requires<[HasSSE2]>;
|
|
||||||
|
|
||||||
|
|
||||||
// Convert packed single/double fp to doubleword
|
// Convert packed single/double fp to doubleword
|
||||||
def VCVTPS2DQrr : VPDI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
def VCVTPS2DQrr : VPDI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
||||||
@ -4950,6 +4926,15 @@ def CVTDQ2PDrr : SSDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
|||||||
"cvtdq2pd\t{$src, $dst|$dst, $src}", [],
|
"cvtdq2pd\t{$src, $dst|$dst, $src}", [],
|
||||||
IIC_SSE_CVT_PD_RM>;
|
IIC_SSE_CVT_PD_RM>;
|
||||||
|
|
||||||
|
// 128 bit register conversion intrinsics
|
||||||
|
let Predicates = [HasAVX] in
|
||||||
|
def : Pat<(int_x86_sse2_cvtdq2pd VR128:$src),
|
||||||
|
(VCVTDQ2PDrr VR128:$src)>;
|
||||||
|
|
||||||
|
let Predicates = [HasSSE2] in
|
||||||
|
def : Pat<(int_x86_sse2_cvtdq2pd VR128:$src),
|
||||||
|
(CVTDQ2PDrr VR128:$src)>;
|
||||||
|
|
||||||
// AVX 256-bit register conversion intrinsics
|
// AVX 256-bit register conversion intrinsics
|
||||||
let Predicates = [HasAVX] in {
|
let Predicates = [HasAVX] in {
|
||||||
def : Pat<(int_x86_avx_cvtdq2_pd_256 VR128:$src),
|
def : Pat<(int_x86_avx_cvtdq2_pd_256 VR128:$src),
|
||||||
|
Loading…
Reference in New Issue
Block a user