From 9b4a097f94065fdcdb7aab7ce42502f2ca182600 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Tue, 23 Jan 2018 15:30:07 +0000 Subject: [PATCH] Use EVT::changeVectorElementTypeToInteger() to convert index type to integer llvm-svn: 323207 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index da928b7..952a937 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7920,16 +7920,16 @@ LowerBUILD_VECTORAsVariablePermute(SDValue V, SelectionDAG &DAG, if (!PermIdx || PermIdx->getZExtValue() != Idx) return SDValue(); } - MVT IndicesVT = VT; - if (VT.isFloatingPoint()) - IndicesVT = MVT::getVectorVT(MVT::getIntegerVT(VT.getScalarSizeInBits()), - VT.getVectorNumElements()); + + MVT IndicesVT = EVT(VT).changeVectorElementTypeToInteger().getSimpleVT(); IndicesVec = DAG.getZExtOrTrunc(IndicesVec, SDLoc(IndicesVec), IndicesVT); + if (SrcVec.getValueSizeInBits() < IndicesVT.getSizeInBits()) { SrcVec = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(SrcVec), VT, DAG.getUNDEF(VT), SrcVec, DAG.getIntPtrConstant(0, SDLoc(SrcVec))); } + if (VT == MVT::v16i8) return DAG.getNode(X86ISD::PSHUFB, SDLoc(V), VT, SrcVec, IndicesVec); return DAG.getNode(X86ISD::VPERMV, SDLoc(V), VT, IndicesVec, SrcVec); -- 2.7.4