diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 18d0cf04c46..e8265e7e643 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7926,6 +7926,14 @@ SDValue createVariablePermute(MVT VT, SDValue SrcVec, SDValue IndicesVec, NumElts * VT.getScalarSizeInBits()); IndicesVec = DAG.getZExtOrTrunc(IndicesVec, SDLoc(IndicesVec), IndicesVT); + // Adjust SrcVec to match VT type. + if (SrcVec.getValueSizeInBits() > VT.getSizeInBits()) + return SDValue(); + else if (SrcVec.getValueSizeInBits() < VT.getSizeInBits()) + SrcVec = + DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(SrcVec), VT, DAG.getUNDEF(VT), + SrcVec, DAG.getIntPtrConstant(0, SDLoc(SrcVec))); + unsigned Opcode = 0; switch (VT.SimpleTy) { default: @@ -8004,14 +8012,6 @@ SDValue createVariablePermute(MVT VT, SDValue SrcVec, SDValue IndicesVec, (VT.getScalarSizeInBits() % ShuffleVT.getScalarSizeInBits()) == 0 && "Illegal variable permute shuffle type"); - if (SrcVec.getValueSizeInBits() > VT.getSizeInBits()) - return SDValue(); - else if (SrcVec.getValueSizeInBits() < VT.getSizeInBits()) { - SrcVec = - DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(SrcVec), VT, DAG.getUNDEF(VT), - SrcVec, DAG.getIntPtrConstant(0, SDLoc(SrcVec))); - } - uint64_t Scale = VT.getScalarSizeInBits() / ShuffleVT.getScalarSizeInBits(); if (Scale > 1) { assert(isPowerOf2_64(Scale) && "Illegal variable permute shuffle scale"); |