diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-07-18 06:14:34 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-07-18 06:14:34 +0000 |
commit | 5c913e84df88d563bbabb41cdebb8088c1a942c6 (patch) | |
tree | f0493cdddddd6d9b5198e34d44e7ec05dc4f9acf /llvm/lib/Target/X86/X86InstrInfo.cpp | |
parent | 53f3d1b4d01d340ea3620419b904c585e3c20823 (diff) | |
download | bcm5719-llvm-5c913e84df88d563bbabb41cdebb8088c1a942c6.tar.gz bcm5719-llvm-5c913e84df88d563bbabb41cdebb8088c1a942c6.zip |
[AVX512] Use VMOVAPSZ128rr/VMOVAPS256rr for VR128X/VR256X physreg moves when VLX is supported.
Ideally we would use VEX encoded moves instead of EVEX if the high 16 registers aren't referenced, but this a good first step.
llvm-svn: 275763
Diffstat (limited to 'llvm/lib/Target/X86/X86InstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 50476d4d6aa..6195b3331d7 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -4432,13 +4432,22 @@ unsigned copyPhysRegOpcode_AVX512(unsigned& DestReg, unsigned& SrcReg, if (Subtarget.hasBWI()) if (auto Opc = copyPhysRegOpcode_AVX512_BW(DestReg, SrcReg)) return Opc; - if (X86::VR128XRegClass.contains(DestReg, SrcReg) || - X86::VR256XRegClass.contains(DestReg, SrcReg) || - X86::VR512RegClass.contains(DestReg, SrcReg)) { - DestReg = get512BitSuperRegister(DestReg); - SrcReg = get512BitSuperRegister(SrcReg); + if (X86::VR128XRegClass.contains(DestReg, SrcReg)) { + if (Subtarget.hasVLX()) + return X86::VMOVAPSZ128rr; + DestReg = get512BitSuperRegister(DestReg); + SrcReg = get512BitSuperRegister(SrcReg); + return X86::VMOVAPSZrr; + } + if (X86::VR256XRegClass.contains(DestReg, SrcReg)) { + if (Subtarget.hasVLX()) + return X86::VMOVAPSZ256rr; + DestReg = get512BitSuperRegister(DestReg); + SrcReg = get512BitSuperRegister(SrcReg); + return X86::VMOVAPSZrr; + } + if (X86::VR512RegClass.contains(DestReg, SrcReg)) return X86::VMOVAPSZrr; - } if (MaskRegClassContains(DestReg) && MaskRegClassContains(SrcReg)) return X86::KMOVWkk; if (MaskRegClassContains(DestReg) && GRRegClassContains(SrcReg)) { |