[PATCH] D107009: [WIP][X86] combineX86ShuffleChain(): canonicalize mask elts picking from splats
Simon Pilgrim via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 3 12:20:33 PDT 2021
RKSimon added inline comments.
================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:35821
+ });
+ if (UnaryShuffle && InputIsSplat[0] && !isAnyZero(BaseMask) &&
V1.getValueSizeInBits() >= RootSizeInBits) {
----------------
Is this any better?
'''
bool IsSplat0 = isTargetShuffleSplat(V0);
bool IsSplat1 = isTargetShuffleSplat(V1);
IsSplat0 &= !!(BaseMaskEltSizeInBits % V0.getScalarValueSizeInBits());
IsSplat1 &= !!(BaseMaskEltSizeInBits % V1.getScalarValueSizeInBits());
'''
================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:35782-35783
MVT VT2 = V2.getSimpleValueType();
assert(VT1.getSizeInBits() == RootSizeInBits &&
VT2.getSizeInBits() == RootSizeInBits && "Vector size mismatch");
----------------
lebedev.ri wrote:
> Didn't we just assert that the inputs have the same size as root?
The middle-term plan is to relax these to (RootSizeInBit % VT1.getSizeInBits()) == 0 - we're getting pretty close and that will let us stop widening in combineX86ShufflesRecursively - which is causing hasOneUse() problems - and just widen when a match is found (which is what CanonicalizeShuffleInput will do). This should also help use get rid of combineX86ShuffleChainWithExtract.
But I can understand if you don't want to handle this yet.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D107009/new/
https://reviews.llvm.org/D107009
More information about the llvm-commits
mailing list