diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-02-03 16:10:18 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-02-03 16:10:18 +0000 |
commit | 18b73a655bb611534165fe40e417fde89684f776 (patch) | |
tree | 9bccf875241e47eb87aec84b0c8db23beea8e707 /llvm/lib | |
parent | 4a0a64ac1d7420889053e81b67da512765a2e2c8 (diff) | |
download | bcm5719-llvm-18b73a655bb611534165fe40e417fde89684f776.tar.gz bcm5719-llvm-18b73a655bb611534165fe40e417fde89684f776.zip |
[X86][AVX] Support shuffle combining for VPMOVZX with smaller vector sources
llvm-svn: 352997
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 9ea3c64697e..dbc4947aaf8 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -6775,13 +6775,21 @@ static bool getFauxShuffleMask(SDValue N, SmallVectorImpl<int> &Mask, } case ISD::ZERO_EXTEND_VECTOR_INREG: case ISD::ZERO_EXTEND: { - // TODO - add support for VPMOVZX with smaller input vector types. SDValue Src = N.getOperand(0); MVT SrcVT = Src.getSimpleValueType(); - if (NumSizeInBits != SrcVT.getSizeInBits()) - break; - DecodeZeroExtendMask(SrcVT.getScalarSizeInBits(), NumBitsPerElt, NumElts, - Mask); + unsigned NumSrcBitsPerElt = SrcVT.getScalarSizeInBits(); + DecodeZeroExtendMask(NumSrcBitsPerElt, NumBitsPerElt, NumElts, Mask); + + if (NumSizeInBits != SrcVT.getSizeInBits()) { + assert((NumSizeInBits % SrcVT.getSizeInBits()) == 0 && + "Illegal zero-extension type"); + SrcVT = MVT::getVectorVT(SrcVT.getScalarType(), + NumSizeInBits / NumSrcBitsPerElt); + Src = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), SrcVT, + DAG.getUNDEF(SrcVT), Src, + DAG.getIntPtrConstant(0, SDLoc(N))); + } + Ops.push_back(Src); return true; } |