diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-08-21 13:28:02 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-08-21 13:28:02 +0000 |
| commit | ff8b883772894c8c943e358460a4b50a568a79de (patch) | |
| tree | d32d5fdec02958bd2722a9a5d271f189c92674ed /llvm/lib | |
| parent | 208bc533cd18dbb2bfccea9779c515286d80e7c1 (diff) | |
| download | bcm5719-llvm-ff8b883772894c8c943e358460a4b50a568a79de.tar.gz bcm5719-llvm-ff8b883772894c8c943e358460a4b50a568a79de.zip | |
DAGCombiner: Make concat_vector combine safe for EVTs and concat_vectors with many arguments.
PR20677
llvm-svn: 216175
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 |

