Skip to content

Commit 25e806f

Browse files
committed
[X86] getFauxShuffleMask - move INSERT_SUBVECTOR(SRC0, EXTRACT_SUBVECTOR(SRC1)) matching behind common one use bitcast checks
No need to ignore one use checks for the INSERT_SUBVECTOR(SRC0, EXTRACT_SUBVECTOR(SRC1)) fold Noticed while working on the llvm#133947 regressions
1 parent bf51609 commit 25e806f

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)