diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index f6dc9384ee3..5fd9bf39e0e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4689,12 +4689,17 @@ static SDValue ConvertSelectToConcatVector(SDNode *N, SelectionDAG &DAG) {    SDValue Cond = N->getOperand(0);    SDValue LHS = N->getOperand(1);    SDValue RHS = N->getOperand(2); -  MVT VT = N->getSimpleValueType(0); +  EVT VT = N->getValueType(0);    int NumElems = VT.getVectorNumElements();    assert(LHS.getOpcode() == ISD::CONCAT_VECTORS &&           RHS.getOpcode() == ISD::CONCAT_VECTORS &&           Cond.getOpcode() == ISD::BUILD_VECTOR); +  // CONCAT_VECTOR can take an arbitrary number of arguments. We only care about +  // binary ones here. +  if (LHS->getNumOperands() != 2 || RHS->getNumOperands() != 2) +    return SDValue(); +    // We're sure we have an even number of elements due to the    // concat_vectors we have as arguments to vselect.    // Skip BV elements until we find one that's not an UNDEF | 

