@@ -6185,13 +6185,20 @@ static bool getFauxShuffleMask(SDValue N, const APInt &DemandedElts,
61856185 }
61866186 if (!N->isOnlyUserOf(Sub.getNode()))
61876187 return false;
6188- SDValue SubBC = peekThroughBitcasts(Sub);
6188+
6189+ SmallVector<int, 64> SubMask;
6190+ SmallVector<SDValue, 2> SubInputs;
6191+ SDValue SubSrc = peekThroughOneUseBitcasts(Sub);
6192+ EVT SubSrcVT = SubSrc.getValueType();
6193+ if (!SubSrcVT.isVector())
6194+ return false;
6195+
61896196 // Handle INSERT_SUBVECTOR(SRC0, EXTRACT_SUBVECTOR(SRC1)).
6190- if (SubBC .getOpcode() == ISD::EXTRACT_SUBVECTOR &&
6191- SubBC .getOperand(0).getValueSizeInBits() == NumSizeInBits) {
6192- uint64_t ExtractIdx = SubBC .getConstantOperandVal(1);
6193- SDValue SubBCSrc = SubBC .getOperand(0);
6194- unsigned NumSubSrcBCElts = SubBCSrc .getValueType().getVectorNumElements();
6197+ if (SubSrc .getOpcode() == ISD::EXTRACT_SUBVECTOR &&
6198+ SubSrc .getOperand(0).getValueSizeInBits() == NumSizeInBits) {
6199+ uint64_t ExtractIdx = SubSrc .getConstantOperandVal(1);
6200+ SDValue SubSrcSrc = SubSrc .getOperand(0);
6201+ unsigned NumSubSrcBCElts = SubSrcSrc .getValueType().getVectorNumElements();
61956202 unsigned MaxElts = std::max(NumElts, NumSubSrcBCElts);
61966203 assert((MaxElts % NumElts) == 0 && (MaxElts % NumSubSrcBCElts) == 0 &&
61976204 "Subvector valuetype mismatch");
@@ -6205,17 +6212,11 @@ static bool getFauxShuffleMask(SDValue N, const APInt &DemandedElts,
62056212 Mask[InsertIdx + i] = (SrcIsUndef ? 0 : MaxElts) + ExtractIdx + i;
62066213 if (!SrcIsUndef)
62076214 Ops.push_back(Src);
6208- Ops.push_back(SubBCSrc );
6215+ Ops.push_back(SubSrcSrc );
62096216 return true;
62106217 }
6211- // Handle INSERT_SUBVECTOR(SRC0, SHUFFLE(SRC1)).
6212- SmallVector<int, 64> SubMask;
6213- SmallVector<SDValue, 2> SubInputs;
6214- SDValue SubSrc = peekThroughOneUseBitcasts(Sub);
6215- EVT SubSrcVT = SubSrc.getValueType();
6216- if (!SubSrcVT.isVector())
6217- return false;
62186218
6219+ // Handle INSERT_SUBVECTOR(SRC0, SHUFFLE(SRC1)).
62196220 APInt SubDemand = APInt::getAllOnes(SubSrcVT.getVectorNumElements());
62206221 if (!getTargetShuffleInputs(SubSrc, SubDemand, SubInputs, SubMask, DAG,
62216222 Depth + 1, ResolveKnownElts))
0 commit comments