[AVX-512] Support spills of XMM16-31 and YMM16-31 when VLX isn't available.
authorCraig Topper <craig.topper@gmail.com>
Thu, 29 Sep 2016 06:07:09 +0000 (06:07 +0000)
committerCraig Topper <craig.topper@gmail.com>
Thu, 29 Sep 2016 06:07:09 +0000 (06:07 +0000)
commitd875d6b9b4313285112981fdb5f06f63cf166718
treef175de3cb8acd419232a880ed0ef5e39def8a5b0
parentf91830e6ee21a59aa1daf5d4d32861c9777510d8
[AVX-512] Support spills of XMM16-31 and YMM16-31 when VLX isn't available.

This adds new pseudo instructions that can be selected during register allocation to represent loads and stores of XMM/YMM registers when AVX512F is available, but VLX isn't. They will be converted to VEX encoded moves if the register turns out to be XMM0-15/YMM0-15. Otherwise either an EVEX VEXTRACT(store) or VBROADCAST(load) will be used.

Fixes one of the cases from PR29112.

llvm-svn: 282690
llvm/lib/Target/X86/X86InstrAVX512.td
llvm/lib/Target/X86/X86InstrInfo.cpp
llvm/test/CodeGen/X86/pr29112.ll [new file with mode: 0644]