@@ -57925,22 +57925,20 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
5792557925 }
5792657926 }
5792757927
57928+ SDValue X, Y;
57929+
5792857930 // add(psadbw(X,0),psadbw(Y,0)) -> psadbw(add(X,Y),0)
5792957931 // iff X and Y won't overflow.
57930- if (Op0.getOpcode() == X86ISD::PSADBW && Op1.getOpcode() == X86ISD::PSADBW &&
57931- ISD::isBuildVectorAllZeros(Op0.getOperand(1).getNode()) &&
57932- ISD::isBuildVectorAllZeros(Op1.getOperand(1).getNode())) {
57933- if (DAG.willNotOverflowAdd(false, Op0.getOperand(0), Op1.getOperand(0))) {
57934- MVT OpVT = Op0.getOperand(1).getSimpleValueType();
57935- SDValue Sum =
57936- DAG.getNode(ISD::ADD, DL, OpVT, Op0.getOperand(0), Op1.getOperand(0));
57937- return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57938- getZeroVector(OpVT, Subtarget, DAG, DL));
57939- }
57932+ if (sd_match(Op0, m_c_BinOp(X86ISD::PSADBW, m_Value(X), m_Zero())) &&
57933+ sd_match(Op1, m_c_BinOp(X86ISD::PSADBW, m_Value(Y), m_Zero())) &&
57934+ DAG.willNotOverflowAdd(/*IsSigned=*/false, X, Y)) {
57935+ MVT OpVT = X.getSimpleValueType();
57936+ SDValue Sum = DAG.getNode(ISD::ADD, DL, OpVT, X, Y);
57937+ return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57938+ getZeroVector(OpVT, Subtarget, DAG, DL));
5794057939 }
5794157940
5794257941 if (VT.isVector()) {
57943- SDValue X, Y;
5794457942 EVT BoolVT = EVT::getVectorVT(*DAG.getContext(), MVT::i1,
5794557943 VT.getVectorElementCount());
5794657944
0 commit comments