1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

An INSERT_VECTOR_ELT can insert a larger value

than the vector element type.  Don't forget to
handle this when the insertion index is not a
constant.

llvm-svn: 53556
This commit is contained in:
Duncan Sands 2008-07-14 17:32:02 +00:00
parent 5a4bab9849
commit 134155a263

View File

@ -360,13 +360,14 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDOperand &Lo,
// Spill the vector to the stack.
MVT VecVT = Vec.getValueType();
MVT EltVT = VecVT.getVectorElementType();
SDOperand StackPtr = DAG.CreateStackTemporary(VecVT);
SDOperand Store = DAG.getStore(DAG.getEntryNode(), Vec, StackPtr, NULL, 0);
// Store the new element.
SDOperand EltPtr = GetVectorElementPointer(StackPtr,
VecVT.getVectorElementType(), Idx);
Store = DAG.getStore(Store, Elt, EltPtr, NULL, 0);
// Store the new element. This may be larger than the vector element type,
// so use a truncating store.
SDOperand EltPtr = GetVectorElementPointer(StackPtr, EltVT, Idx);
Store = DAG.getTruncStore(Store, Elt, EltPtr, NULL, 0, EltVT);
// Reload the vector from the stack.
SDOperand Load = DAG.getLoad(VecVT, Store, StackPtr, NULL, 0);