Skip to content

Commit 2ceb129

Browse files
committed
[X86] Add canScaleShuffleElements helper. NFC.
Returns true if the shuffle mask can be rescaled to the requested number of elements.
1 parent 9263318 commit 2ceb129

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3738,6 +3738,11 @@ static bool scaleShuffleElements(ArrayRef<int> Mask, unsigned NumDstElts,
37383738
return false;
37393739
}
37403740

3741+
static bool canScaleShuffleElements(ArrayRef<int> Mask, unsigned NumDstElts) {
3742+
SmallVector<int, 32> ScaledMask;
3743+
return scaleShuffleElements(Mask, NumDstElts, ScaledMask);
3744+
}
3745+
37413746
/// Returns true if Elt is a constant zero or a floating point constant +0.0.
37423747
bool X86::isZeroNode(SDValue Elt) {
37433748
return isNullConstant(Elt) || isNullFPConstant(Elt);
@@ -46684,14 +46689,14 @@ static SDValue combineSetCCMOVMSK(SDValue EFLAGS, X86::CondCode &CC,
4668446689
// To address this, we check that we can scale the shuffle mask to MOVMSK
4668546690
// element width (this will ensure "high" elements match). Its slightly overly
4668646691
// conservative, but fine for an edge case fold.
46687-
SmallVector<int, 32> ShuffleMask, ScaledMaskUnused;
46692+
SmallVector<int, 32> ShuffleMask;
4668846693
SmallVector<SDValue, 2> ShuffleInputs;
4668946694
if (NumElts <= CmpBits &&
4669046695
getTargetShuffleInputs(peekThroughBitcasts(Vec), ShuffleInputs,
4669146696
ShuffleMask, DAG) &&
4669246697
ShuffleInputs.size() == 1 && isCompletePermute(ShuffleMask) &&
4669346698
ShuffleInputs[0].getValueSizeInBits() == VecVT.getSizeInBits() &&
46694-
scaleShuffleElements(ShuffleMask, NumElts, ScaledMaskUnused)) {
46699+
canScaleShuffleElements(ShuffleMask, NumElts)) {
4669546700
SDLoc DL(EFLAGS);
4669646701
SDValue Result = DAG.getBitcast(VecVT, ShuffleInputs[0]);
4669746702
Result = DAG.getNode(X86ISD::MOVMSK, DL, MVT::i32, Result);

0 commit comments

Comments
 (0)