From 77926da196908244598627408babdc5254b4a991 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Fri, 18 Jul 2008 20:12:05 +0000 Subject: [PATCH] Revert 53729, after waking up in the middle of the night realising that it was wrong :) I think the reason the same type was being used for the shufflevec of indices as for the actual indices is so that if one of them needs splitting then so does the other. After my patch it might be that the indices need splitting but not the rest, yet there is no good way of handling that. I think the right solution is to not have the shufflevec be an operand at all: just have it be the list of numbers it actually is, stored as extra info in the node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53768 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index bc685efe3a8..14efb446fea 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -5046,9 +5046,9 @@ SDOperand DAGCombiner::XformToShuffleWithZero(SDNode *N) { if (!isa(Elt)) return SDOperand(); else if (cast(Elt)->isAllOnesValue()) - IdxOps.push_back(DAG.getConstant(i, TLI.getPointerTy())); + IdxOps.push_back(DAG.getConstant(i, EVT)); else if (cast(Elt)->isNullValue()) - IdxOps.push_back(DAG.getConstant(NumElts, TLI.getPointerTy())); + IdxOps.push_back(DAG.getConstant(NumElts, EVT)); else return SDOperand(); } @@ -5066,8 +5066,7 @@ SDOperand DAGCombiner::XformToShuffleWithZero(SDNode *N) { std::vector ZeroOps(NumElts, DAG.getConstant(0, EVT)); Ops.push_back(DAG.getNode(ISD::BUILD_VECTOR, VT, &ZeroOps[0], ZeroOps.size())); - Ops.push_back(DAG.getNode(ISD::BUILD_VECTOR, - MVT::getVectorVT(TLI.getPointerTy(), NumElts), + Ops.push_back(DAG.getNode(ISD::BUILD_VECTOR, VT, &IdxOps[0], IdxOps.size())); SDOperand Result = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, &Ops[0], Ops.size());