diff options
author | Duncan Sands <baldrick@free.fr> | 2008-07-14 17:32:02 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-07-14 17:32:02 +0000 |
commit | 262e04b3078e38c8dc5cdc40bf51e7cd467fd57a (patch) | |
tree | 919eae29931cc3ef6d86d1c7aed1dd79c8d804b4 | |
parent | 8cc364c5cc210c56808011a5ebad28a719f106b7 (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53556 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 71fa7925c0..ea1c0a8c13 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -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); |