diff options
author | Craig Topper <craig.topper@gmail.com> | 2017-01-29 04:38:16 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2017-01-29 04:38:16 +0000 |
commit | 24cdbe8fa6eb24c9450a022b08f97cbaab7a89e3 (patch) | |
tree | 4d0351bf3f9d39dc83e6223eb18a0fe270a5842e /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | ad5025c987d5a3aaa5552ab10a21cfeb270c63b9 (diff) | |
download | bcm5719-llvm-24cdbe8fa6eb24c9450a022b08f97cbaab7a89e3.tar.gz bcm5719-llvm-24cdbe8fa6eb24c9450a022b08f97cbaab7a89e3.zip |
[DAGCombiner] Make sure index of EXTRACT_SUBVECTOR is a constant before trying to use getConstantOperandVal.
llvm-svn: 293412
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 17608b1f0a5..dc6b0b11c0f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -13884,15 +13884,15 @@ SDValue DAGCombiner::visitEXTRACT_SUBVECTOR(SDNode* N) { if (V.isUndef()) return DAG.getUNDEF(NVT); - if (V->getOpcode() == ISD::CONCAT_VECTORS) { - // Combine: - // (extract_subvec (concat V1, V2, ...), i) - // Into: - // Vi if possible - // Only operand 0 is checked as 'concat' assumes all inputs of the same - // type. - if (V->getOperand(0).getValueType() != NVT) - return SDValue(); + // Combine: + // (extract_subvec (concat V1, V2, ...), i) + // Into: + // Vi if possible + // Only operand 0 is checked as 'concat' assumes all inputs of the same + // type. + if (V->getOpcode() == ISD::CONCAT_VECTORS && + isa<ConstantSDNode>(N->getOperand(1)) && + V->getOperand(0).getValueType() == NVT) { unsigned Idx = N->getConstantOperandVal(1); unsigned NumElems = NVT.getVectorNumElements(); assert((Idx % NumElems) == 0 && |