@@ -37861,7 +37861,7 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
37861
37861
}
37862
37862
37863
37863
/// Different mul shrinking modes.
37864
- enum ShrinkMode { MULS8, MULU8, MULS16, MULU16 };
37864
+ enum class ShrinkMode { MULS8, MULU8, MULS16, MULU16 };
37865
37865
37866
37866
static bool canReduceVMulWidth(SDNode *N, SelectionDAG &DAG, ShrinkMode &Mode) {
37867
37867
EVT VT = N->getOperand(0).getValueType();
@@ -37882,16 +37882,16 @@ static bool canReduceVMulWidth(SDNode *N, SelectionDAG &DAG, ShrinkMode &Mode) {
37882
37882
unsigned MinSignBits = std::min(SignBits[0], SignBits[1]);
37883
37883
// When ranges are from -128 ~ 127, use MULS8 mode.
37884
37884
if (MinSignBits >= 25)
37885
- Mode = MULS8;
37885
+ Mode = ShrinkMode:: MULS8;
37886
37886
// When ranges are from 0 ~ 255, use MULU8 mode.
37887
37887
else if (AllPositive && MinSignBits >= 24)
37888
- Mode = MULU8;
37888
+ Mode = ShrinkMode:: MULU8;
37889
37889
// When ranges are from -32768 ~ 32767, use MULS16 mode.
37890
37890
else if (MinSignBits >= 17)
37891
- Mode = MULS16;
37891
+ Mode = ShrinkMode:: MULS16;
37892
37892
// When ranges are from 0 ~ 65535, use MULU16 mode.
37893
37893
else if (AllPositive && MinSignBits >= 16)
37894
- Mode = MULU16;
37894
+ Mode = ShrinkMode:: MULU16;
37895
37895
else
37896
37896
return false;
37897
37897
return true;
@@ -37961,15 +37961,17 @@ static SDValue reduceVMULWidth(SDNode *N, SelectionDAG &DAG,
37961
37961
// Generate the lower part of mul: pmullw. For MULU8/MULS8, only the
37962
37962
// lower part is needed.
37963
37963
SDValue MulLo = DAG.getNode(ISD::MUL, DL, ReducedVT, NewN0, NewN1);
37964
- if (Mode == MULU8 || Mode == MULS8)
37965
- return DAG.getNode((Mode == MULU8) ? ISD::ZERO_EXTEND : ISD::SIGN_EXTEND,
37964
+ if (Mode == ShrinkMode::MULU8 || Mode == ShrinkMode::MULS8)
37965
+ return DAG.getNode((Mode == ShrinkMode::MULU8) ? ISD::ZERO_EXTEND
37966
+ : ISD::SIGN_EXTEND,
37966
37967
DL, VT, MulLo);
37967
37968
37968
37969
MVT ResVT = MVT::getVectorVT(MVT::i32, NumElts / 2);
37969
37970
// Generate the higher part of mul: pmulhw/pmulhuw. For MULU16/MULS16,
37970
37971
// the higher part is also needed.
37971
- SDValue MulHi = DAG.getNode(Mode == MULS16 ? ISD::MULHS : ISD::MULHU, DL,
37972
- ReducedVT, NewN0, NewN1);
37972
+ SDValue MulHi =
37973
+ DAG.getNode(Mode == ShrinkMode::MULS16 ? ISD::MULHS : ISD::MULHU, DL,
37974
+ ReducedVT, NewN0, NewN1);
37973
37975
37974
37976
// Repack the lower part and higher part result of mul into a wider
37975
37977
// result.
@@ -43818,7 +43820,8 @@ static SDValue combineLoopMAddPattern(SDNode *N, SelectionDAG &DAG,
43818
43820
auto UsePMADDWD = [&](SDValue Op) {
43819
43821
ShrinkMode Mode;
43820
43822
return Op.getOpcode() == ISD::MUL &&
43821
- canReduceVMulWidth(Op.getNode(), DAG, Mode) && Mode != MULU16 &&
43823
+ canReduceVMulWidth(Op.getNode(), DAG, Mode) &&
43824
+ Mode != ShrinkMode::MULU16 &&
43822
43825
(!Subtarget.hasSSE41() ||
43823
43826
(Op->isOnlyUserOf(Op.getOperand(0).getNode()) &&
43824
43827
Op->isOnlyUserOf(Op.getOperand(1).getNode())));
@@ -44023,7 +44026,8 @@ static SDValue matchPMADDWD(SelectionDAG &DAG, SDValue Op0, SDValue Op1,
44023
44026
44024
44027
// Check if the Mul source can be safely shrunk.
44025
44028
ShrinkMode Mode;
44026
- if (!canReduceVMulWidth(Mul.getNode(), DAG, Mode) || Mode == MULU16)
44029
+ if (!canReduceVMulWidth(Mul.getNode(), DAG, Mode) ||
44030
+ Mode == ShrinkMode::MULU16)
44027
44031
return SDValue();
44028
44032
44029
44033
auto PMADDBuilder = [](SelectionDAG &DAG, const SDLoc &DL,
0 commit comments