From acae2a63b9ba943d37914813c601eb5fa9d84c22 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sun, 1 Jan 2012 17:36:23 +0000 Subject: [PATCH] Revert 147399. It broke CodeGen/ARM/vext.ll. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147400 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 44 +++--------------------- test/CodeGen/X86/avx-shuffle-x86_32.ll | 8 ----- 2 files changed, 5 insertions(+), 47 deletions(-) delete mode 100755 test/CodeGen/X86/avx-shuffle-x86_32.ll diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index a6851abba78..75f57611126 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2795,48 +2795,15 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) { Node->getOperand(2), dl)); break; case ISD::VECTOR_SHUFFLE: { - SmallVector Mask(32U, -1); + SmallVector Mask; cast(Node)->getMask(Mask); EVT VT = Node->getValueType(0); EVT EltVT = VT.getVectorElementType(); - SDValue Op0 = Node->getOperand(0); - SDValue Op1 = Node->getOperand(1); - if (!TLI.isTypeLegal(EltVT)) { - + if (!TLI.isTypeLegal(EltVT)) EltVT = TLI.getTypeToTransformTo(*DAG.getContext(), EltVT); - - // Convert shuffle node - // If original node was v4i64 and the new EltVT is i32, - // cast operands to v8i32 and re-build the mask - unsigned OldNumElems = VT.getVectorNumElements(); - // Calculate new VT - VT = EVT::getVectorVT(*DAG.getContext(), EltVT, VT.getSizeInBits()/EltVT.getSizeInBits()); - - // cast operands to new VT - Op0 = DAG.getNode(ISD::BITCAST, dl, VT, Op0); - Op1 = DAG.getNode(ISD::BITCAST, dl, VT, Op1); - - // Convert the shuffle mask - unsigned int factor = VT.getVectorNumElements()/OldNumElems; - // assume that EltVT gets smaller - assert(factor > 0); - SmallVector NewMask(32U, -1); - - for (unsigned i = 0; i < OldNumElems; ++i) { - if (Mask[i] < 0) { - for (unsigned fi = 0; fi < factor; ++fi) - NewMask[i*factor+fi] = Mask[i]; - } - else { - for (unsigned fi = 0; fi < factor; ++fi) - NewMask[i*factor+fi] = Mask[i]*factor+fi; - } - Mask = NewMask; - } - } unsigned NumElems = VT.getVectorNumElements(); - SmallVector Ops; + SmallVector Ops; for (unsigned i = 0; i != NumElems; ++i) { if (Mask[i] < 0) { Ops.push_back(DAG.getUNDEF(EltVT)); @@ -2845,14 +2812,13 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) { unsigned Idx = Mask[i]; if (Idx < NumElems) Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EltVT, - Op0, + Node->getOperand(0), DAG.getIntPtrConstant(Idx))); else Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EltVT, - Op1, + Node->getOperand(1), DAG.getIntPtrConstant(Idx - NumElems))); } - Tmp1 = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, &Ops[0], Ops.size()); Results.push_back(Tmp1); break; diff --git a/test/CodeGen/X86/avx-shuffle-x86_32.ll b/test/CodeGen/X86/avx-shuffle-x86_32.ll deleted file mode 100755 index 210287f57f2..00000000000 --- a/test/CodeGen/X86/avx-shuffle-x86_32.ll +++ /dev/null @@ -1,8 +0,0 @@ -; RUN: llc < %s -mtriple=i686-pc-win32 -mcpu=corei7-avx -mattr=+avx | FileCheck %s - -define <4 x i64> @test1(<4 x i64> %a) nounwind { - %b = shufflevector <4 x i64> %a, <4 x i64> undef, <4 x i32> - ret <4 x i64>%b - ; CHECK test1: - ; CHECK: vinsertf128 - } -- 2.34.1