From 28c05ac995c8063ecf4e05ef7c0879467ca98221 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Mon, 14 Jul 2008 17:22:31 +0000 Subject: [PATCH] There should be no extending loads or truncating stores of one-element vectors. Also, neaten the handling of INSERT_VECTOR_ELT when the inserted type is larger than the vector element type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53554 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 4322553137a..a5a0331ba3a 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -85,7 +85,7 @@ SDOperand DAGTypeLegalizer::ScalarizeVecRes_UNDEF(SDNode *N) { } SDOperand DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) { - assert(ISD::isUNINDEXEDLoad(N) && "Indexed load during type legalization!"); + assert(ISD::isNormalLoad(N) && "Extending load of one-element vector?"); SDOperand Result = DAG.getLoad(N->getValueType(0).getVectorElementType(), N->getChain(), N->getBasePtr(), N->getSrcValue(), N->getSrcValueOffset(), @@ -118,9 +118,9 @@ SDOperand DAGTypeLegalizer::ScalarizeVecRes_INSERT_VECTOR_ELT(SDNode *N) { // so be sure to truncate it to the element type if necessary. SDOperand Op = N->getOperand(1); MVT EltVT = N->getValueType(0).getVectorElementType(); - if (Op.getValueType().bitsGT(EltVT)) + if (Op.getValueType() != EltVT) + // FIXME: Can this happen for floating point types? Op = DAG.getNode(ISD::TRUNCATE, EltVT, Op); - assert(Op.getValueType() == EltVT && "Invalid type for inserted value!"); return Op; } @@ -210,7 +210,7 @@ SDOperand DAGTypeLegalizer::ScalarizeVecOp_EXTRACT_VECTOR_ELT(SDNode *N) { /// ScalarizeVecOp_STORE - If the value to store is a vector that needs to be /// scalarized, it must be <1 x ty>. Just store the element. SDOperand DAGTypeLegalizer::ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo){ - assert(ISD::isUNINDEXEDStore(N) && "Indexed store during type legalization!"); + assert(ISD::isNormalStore(N) && "Truncating store of one-element vector?"); assert(OpNo == 1 && "Do not know how to scalarize this operand!"); return DAG.getStore(N->getChain(), GetScalarizedVector(N->getOperand(1)), N->getBasePtr(), N->getSrcValue(), N->getSrcValueOffset(),