@@ -39626,6 +39626,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39626
39626
"Unexpected number of shuffle inputs!");
39627
39627
39628
39628
SDLoc DL(Root);
39629
+ unsigned RootOpc = Root.getOpcode();
39629
39630
MVT RootVT = Root.getSimpleValueType();
39630
39631
unsigned RootSizeInBits = RootVT.getSizeInBits();
39631
39632
unsigned NumRootElts = RootVT.getVectorNumElements();
@@ -39710,7 +39711,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39710
39711
// optimal than using X86ISD::SHUF128. The insertion is free, even if it has
39711
39712
// to zero the upper subvectors.
39712
39713
if (isUndefOrZeroInRange(Mask, 1, NumBaseMaskElts - 1)) {
39713
- if (Depth == 0 && Root.getOpcode() == ISD::INSERT_SUBVECTOR)
39714
+ if (Depth == 0 && RootOpc == ISD::INSERT_SUBVECTOR)
39714
39715
return SDValue(); // Nothing to do!
39715
39716
assert(isInRange(Mask[0], 0, NumBaseMaskElts) &&
39716
39717
"Unexpected lane shuffle");
@@ -39767,7 +39768,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39767
39768
ScaledMask[1] == (ScaledMask[3] % 2));
39768
39769
39769
39770
if (!isAnyZero(ScaledMask) && !PreferPERMQ) {
39770
- if (Depth == 0 && Root.getOpcode() == X86ISD::SHUF128)
39771
+ if (Depth == 0 && RootOpc == X86ISD::SHUF128)
39771
39772
return SDValue(); // Nothing to do!
39772
39773
MVT ShuffleVT = (FloatDomain ? MVT::v8f64 : MVT::v8i64);
39773
39774
if (SDValue V = MatchSHUF128(ShuffleVT, DL, ScaledMask, V1, V2, DAG))
@@ -39781,7 +39782,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39781
39782
// than using X86ISD::VPERM2X128. The insertion is free, even if it has to
39782
39783
// zero the upper half.
39783
39784
if (isUndefOrZero(Mask[1])) {
39784
- if (Depth == 0 && Root.getOpcode() == ISD::INSERT_SUBVECTOR)
39785
+ if (Depth == 0 && RootOpc == ISD::INSERT_SUBVECTOR)
39785
39786
return SDValue(); // Nothing to do!
39786
39787
assert(isInRange(Mask[0], 0, 2) && "Unexpected lane shuffle");
39787
39788
Res = CanonicalizeShuffleInput(RootVT, V1);
@@ -39795,15 +39796,15 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39795
39796
// TODO: Add AVX2 support instead of VPERMQ/VPERMPD.
39796
39797
if (BaseMask[0] == 0 && (BaseMask[1] == 0 || BaseMask[1] == 2) &&
39797
39798
!Subtarget.hasAVX2()) {
39798
- if (Depth == 0 && Root.getOpcode() == ISD::INSERT_SUBVECTOR)
39799
+ if (Depth == 0 && RootOpc == ISD::INSERT_SUBVECTOR)
39799
39800
return SDValue(); // Nothing to do!
39800
39801
SDValue Lo = CanonicalizeShuffleInput(RootVT, V1);
39801
39802
SDValue Hi = CanonicalizeShuffleInput(RootVT, BaseMask[1] == 0 ? V1 : V2);
39802
39803
Hi = extractSubVector(Hi, 0, DAG, DL, 128);
39803
39804
return insertSubVector(Lo, Hi, NumRootElts / 2, DAG, DL, 128);
39804
39805
}
39805
39806
39806
- if (Depth == 0 && Root.getOpcode() == X86ISD::VPERM2X128)
39807
+ if (Depth == 0 && RootOpc == X86ISD::VPERM2X128)
39807
39808
return SDValue(); // Nothing to do!
39808
39809
39809
39810
// If we have AVX2, prefer to use VPERMQ/VPERMPD for unary shuffles unless
@@ -39820,7 +39821,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39820
39821
DAG.getUNDEF(RootVT), DAG.getTargetConstant(PermMask, DL, MVT::i8));
39821
39822
}
39822
39823
39823
- if (Depth == 0 && Root.getOpcode() == X86ISD::SHUF128)
39824
+ if (Depth == 0 && RootOpc == X86ISD::SHUF128)
39824
39825
return SDValue(); // Nothing to do!
39825
39826
39826
39827
// TODO - handle AVX512VL cases with X86ISD::SHUF128.
@@ -39903,14 +39904,14 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39903
39904
if (V1.getValueType() == MaskVT &&
39904
39905
V1.getOpcode() == ISD::SCALAR_TO_VECTOR &&
39905
39906
X86::mayFoldLoad(V1.getOperand(0), Subtarget)) {
39906
- if (Depth == 0 && Root.getOpcode() == X86ISD::VBROADCAST)
39907
+ if (Depth == 0 && RootOpc == X86ISD::VBROADCAST)
39907
39908
return SDValue(); // Nothing to do!
39908
39909
Res = V1.getOperand(0);
39909
39910
Res = DAG.getNode(X86ISD::VBROADCAST, DL, MaskVT, Res);
39910
39911
return DAG.getBitcast(RootVT, Res);
39911
39912
}
39912
39913
if (Subtarget.hasAVX2()) {
39913
- if (Depth == 0 && Root.getOpcode() == X86ISD::VBROADCAST)
39914
+ if (Depth == 0 && RootOpc == X86ISD::VBROADCAST)
39914
39915
return SDValue(); // Nothing to do!
39915
39916
Res = CanonicalizeShuffleInput(MaskVT, V1);
39916
39917
Res = DAG.getNode(X86ISD::VBROADCAST, DL, MaskVT, Res);
@@ -39923,7 +39924,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39923
39924
DAG, Subtarget, Shuffle, ShuffleSrcVT, ShuffleVT) &&
39924
39925
(!IsMaskedShuffle ||
39925
39926
(NumRootElts == ShuffleVT.getVectorNumElements()))) {
39926
- if (Depth == 0 && Root.getOpcode() == Shuffle)
39927
+ if (Depth == 0 && RootOpc == Shuffle)
39927
39928
return SDValue(); // Nothing to do!
39928
39929
Res = CanonicalizeShuffleInput(ShuffleSrcVT, V1);
39929
39930
Res = DAG.getNode(Shuffle, DL, ShuffleVT, Res);
@@ -39935,7 +39936,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39935
39936
PermuteImm) &&
39936
39937
(!IsMaskedShuffle ||
39937
39938
(NumRootElts == ShuffleVT.getVectorNumElements()))) {
39938
- if (Depth == 0 && Root.getOpcode() == Shuffle)
39939
+ if (Depth == 0 && RootOpc == Shuffle)
39939
39940
return SDValue(); // Nothing to do!
39940
39941
Res = CanonicalizeShuffleInput(ShuffleVT, V1);
39941
39942
Res = DAG.getNode(Shuffle, DL, ShuffleVT, Res,
@@ -39955,7 +39956,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39955
39956
if (matchShuffleAsInsertPS(SrcV1, SrcV2, PermuteImm, Zeroable, Mask,
39956
39957
DAG) &&
39957
39958
SrcV2.getOpcode() == ISD::SCALAR_TO_VECTOR) {
39958
- if (Depth == 0 && Root.getOpcode() == X86ISD::INSERTPS)
39959
+ if (Depth == 0 && RootOpc == X86ISD::INSERTPS)
39959
39960
return SDValue(); // Nothing to do!
39960
39961
Res = DAG.getNode(X86ISD::INSERTPS, DL, MVT::v4f32,
39961
39962
CanonicalizeShuffleInput(MVT::v4f32, SrcV1),
@@ -39968,7 +39969,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39968
39969
isTargetShuffleEquivalent(MaskVT, Mask, {0, 2}, DAG) &&
39969
39970
V2.getOpcode() == ISD::SCALAR_TO_VECTOR &&
39970
39971
V2.getScalarValueSizeInBits() <= 32) {
39971
- if (Depth == 0 && Root.getOpcode() == X86ISD::INSERTPS)
39972
+ if (Depth == 0 && RootOpc == X86ISD::INSERTPS)
39972
39973
return SDValue(); // Nothing to do!
39973
39974
PermuteImm = (/*DstIdx*/ 2 << 4) | (/*SrcIdx*/ 0 << 0);
39974
39975
Res = DAG.getNode(X86ISD::INSERTPS, DL, MVT::v4f32,
@@ -39985,7 +39986,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39985
39986
NewV2, DL, DAG, Subtarget, Shuffle, ShuffleSrcVT,
39986
39987
ShuffleVT, UnaryShuffle) &&
39987
39988
(!IsMaskedShuffle || (NumRootElts == ShuffleVT.getVectorNumElements()))) {
39988
- if (Depth == 0 && Root.getOpcode() == Shuffle)
39989
+ if (Depth == 0 && RootOpc == Shuffle)
39989
39990
return SDValue(); // Nothing to do!
39990
39991
NewV1 = CanonicalizeShuffleInput(ShuffleSrcVT, NewV1);
39991
39992
NewV2 = CanonicalizeShuffleInput(ShuffleSrcVT, NewV2);
@@ -39999,7 +40000,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
39999
40000
AllowIntDomain, NewV1, NewV2, DL, DAG,
40000
40001
Subtarget, Shuffle, ShuffleVT, PermuteImm) &&
40001
40002
(!IsMaskedShuffle || (NumRootElts == ShuffleVT.getVectorNumElements()))) {
40002
- if (Depth == 0 && Root.getOpcode() == Shuffle)
40003
+ if (Depth == 0 && RootOpc == Shuffle)
40003
40004
return SDValue(); // Nothing to do!
40004
40005
NewV1 = CanonicalizeShuffleInput(ShuffleVT, NewV1);
40005
40006
NewV2 = CanonicalizeShuffleInput(ShuffleVT, NewV2);
@@ -40017,7 +40018,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
40017
40018
uint64_t BitLen, BitIdx;
40018
40019
if (matchShuffleAsEXTRQ(IntMaskVT, V1, V2, Mask, BitLen, BitIdx,
40019
40020
Zeroable)) {
40020
- if (Depth == 0 && Root.getOpcode() == X86ISD::EXTRQI)
40021
+ if (Depth == 0 && RootOpc == X86ISD::EXTRQI)
40021
40022
return SDValue(); // Nothing to do!
40022
40023
V1 = CanonicalizeShuffleInput(IntMaskVT, V1);
40023
40024
Res = DAG.getNode(X86ISD::EXTRQI, DL, IntMaskVT, V1,
@@ -40027,7 +40028,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
40027
40028
}
40028
40029
40029
40030
if (matchShuffleAsINSERTQ(IntMaskVT, V1, V2, Mask, BitLen, BitIdx)) {
40030
- if (Depth == 0 && Root.getOpcode() == X86ISD::INSERTQI)
40031
+ if (Depth == 0 && RootOpc == X86ISD::INSERTQI)
40031
40032
return SDValue(); // Nothing to do!
40032
40033
V1 = CanonicalizeShuffleInput(IntMaskVT, V1);
40033
40034
V2 = CanonicalizeShuffleInput(IntMaskVT, V2);
@@ -40047,7 +40048,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
40047
40048
ShuffleSrcVT.getVectorNumElements();
40048
40049
unsigned Opc =
40049
40050
IsTRUNCATE ? (unsigned)ISD::TRUNCATE : (unsigned)X86ISD::VTRUNC;
40050
- if (Depth == 0 && Root.getOpcode() == Opc)
40051
+ if (Depth == 0 && RootOpc == Opc)
40051
40052
return SDValue(); // Nothing to do!
40052
40053
V1 = CanonicalizeShuffleInput(ShuffleSrcVT, V1);
40053
40054
Res = DAG.getNode(Opc, DL, ShuffleVT, V1);
@@ -40064,9 +40065,9 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
40064
40065
isSequentialOrUndefInRange(Mask, 0, NumMaskElts, 0, 2)) {
40065
40066
// Bail if this was already a truncation or PACK node.
40066
40067
// We sometimes fail to match PACK if we demand known undef elements.
40067
- if (Depth == 0 && (Root.getOpcode() == ISD::TRUNCATE ||
40068
- Root.getOpcode() == X86ISD::PACKSS ||
40069
- Root.getOpcode() == X86ISD::PACKUS))
40068
+ if (Depth == 0 &&
40069
+ (RootOpc == ISD::TRUNCATE || RootOpc == X86ISD::PACKSS ||
40070
+ RootOpc == X86ISD::PACKUS))
40070
40071
return SDValue(); // Nothing to do!
40071
40072
ShuffleSrcVT = MVT::getIntegerVT(MaskEltSizeInBits * 2);
40072
40073
ShuffleSrcVT = MVT::getVectorVT(ShuffleSrcVT, NumMaskElts / 2);
@@ -40110,8 +40111,7 @@ static SDValue combineX86ShuffleChain(ArrayRef<SDValue> Inputs, SDValue Root,
40110
40111
(Depth >= BWIVPERMV3ShuffleDepth || HasSlowVariableMask);
40111
40112
40112
40113
// If root was a VPERMV/VPERMV3 node, always allow a variable shuffle.
40113
- if ((UnaryShuffle && Root.getOpcode() == X86ISD::VPERMV) ||
40114
- Root.getOpcode() == X86ISD::VPERMV3)
40114
+ if ((UnaryShuffle && RootOpc == X86ISD::VPERMV) || RootOpc == X86ISD::VPERMV3)
40115
40115
AllowVariableCrossLaneMask = AllowVariablePerLaneMask = true;
40116
40116
40117
40117
bool MaskContainsZeros = isAnyZero(Mask);
0 commit comments