AVX-512: Fixed masked load / store instruction selection for KNL.
authorElena Demikhovsky <elena.demikhovsky@intel.com>
Mon, 7 Dec 2015 13:39:24 +0000 (13:39 +0000)
committerElena Demikhovsky <elena.demikhovsky@intel.com>
Mon, 7 Dec 2015 13:39:24 +0000 (13:39 +0000)
commitb06ff9b1e1a0e4e9b3a135efd2803424db3a2abf
tree5243eee946e8bfc11a8059dfdcc9e219d7d92a8d
parenteea645e49f194c23d90a465967cee1561cc997ea
AVX-512: Fixed masked load / store instruction selection for KNL.

Patterns were missing for KNL target for <8 x i32>, <8 x float> masked load/store.

This intrinsic comes with all legal types:
<8 x float> @llvm.masked.load.v8f32(<8 x float>* %addr, i32 align, <8 x i1> %mask, <8 x float> %passThru),
but still requires lowering, because VMASKMOVPS, VMASKMOVDQU32 work with 512-bit vectors only.

All data operands should be widened to 512-bit vector.
The mask operand should be widened to v16i1 with zeroes.

Differential Revision: http://reviews.llvm.org/D15265

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254909 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86InstrAVX512.td
test/CodeGen/X86/masked_memop.ll