Fixed a bug in type legalizer for masked load/store intrinsics.
authorElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 22 Jan 2015 12:07:59 +0000 (12:07 +0000)
committerElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 22 Jan 2015 12:07:59 +0000 (12:07 +0000)
commit2785766bc877690acfd0b3f8bbacbbd63f634c8f
tree01149a73729e8734bad0e7714b63f05f1dd1904b
parent9cb8df2c7541ed15cc3cf545e215a5ceefdb61c2
Fixed a bug in type legalizer for masked load/store intrinsics.
The problem occurs when after vectorization we have type
<2 x i32>. This type is promoted to <2 x i64> and then requires
additional efforts for expanding loads and truncating stores.
I added EXPAND / TRUNCATE attributes to the masked load/store
SDNodes. The code now contains additional shuffles.
I've prepared changes in the cost estimation for masked memory
operations, it will be submitted separately.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226808 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/SelectionDAG.h
include/llvm/CodeGen/SelectionDAGNodes.h
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
lib/CodeGen/SelectionDAG/LegalizeTypes.h
lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/masked_memop.ll