diff options
author | Nico Weber <nicolasweber@gmx.de> | 2016-04-27 15:16:54 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2016-04-27 15:16:54 +0000 |
commit | e69b9548b87d30fd148e1b24eb3c6b1c8dda59ca (patch) | |
tree | 4789fa3a8c2abbb42c29ef145e7ab311f6b045f2 /llvm/lib/CodeGen | |
parent | a14e9a55769274d5372f58c7b200ad0022bcab43 (diff) | |
download | bcm5719-llvm-e69b9548b87d30fd148e1b24eb3c6b1c8dda59ca.tar.gz bcm5719-llvm-e69b9548b87d30fd148e1b24eb3c6b1c8dda59ca.zip |
Revert r267649, it caused PR27539.
llvm-svn: 267723
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index faa413861d8..7dc1b255713 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -13747,30 +13747,26 @@ SDValue DAGCombiner::visitSCALAR_TO_VECTOR(SDNode *N) { SDValue DAGCombiner::visitINSERT_SUBVECTOR(SDNode *N) { SDValue N0 = N->getOperand(0); - SDValue N1 = N->getOperand(1); SDValue N2 = N->getOperand(2); - if (N0.getValueType() != N1.getValueType()) - return SDValue(); - // If the input vector is a concatenation, and the insert replaces // one of the halves, we can optimize into a single concat_vectors. - if (N0.getOpcode() == ISD::CONCAT_VECTORS && N0->getNumOperands() == 2 && - N2.getOpcode() == ISD::Constant) { + if (N0.getOpcode() == ISD::CONCAT_VECTORS && + N0->getNumOperands() == 2 && N2.getOpcode() == ISD::Constant) { APInt InsIdx = cast<ConstantSDNode>(N2)->getAPIntValue(); EVT VT = N->getValueType(0); // Lower half: fold (insert_subvector (concat_vectors X, Y), Z) -> // (concat_vectors Z, Y) if (InsIdx == 0) - return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, N1, - N0.getOperand(1)); + return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, + N->getOperand(1), N0.getOperand(1)); // Upper half: fold (insert_subvector (concat_vectors X, Y), Z) -> // (concat_vectors X, Z) - if (InsIdx == VT.getVectorNumElements() / 2) - return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, N0.getOperand(0), - N1); + if (InsIdx == VT.getVectorNumElements()/2) + return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, + N0.getOperand(0), N->getOperand(1)); } return SDValue(); |