@@ -57923,22 +57923,20 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
5792357923 }
5792457924 }
5792557925
57926+ SDValue X, Y;
57927+
5792657928 // add(psadbw(X,0),psadbw(Y,0)) -> psadbw(add(X,Y),0)
5792757929 // iff X and Y won't overflow.
57928- if (Op0.getOpcode() == X86ISD::PSADBW && Op1.getOpcode() == X86ISD::PSADBW &&
57929- ISD::isBuildVectorAllZeros(Op0.getOperand(1).getNode()) &&
57930- ISD::isBuildVectorAllZeros(Op1.getOperand(1).getNode())) {
57931- if (DAG.willNotOverflowAdd(false, Op0.getOperand(0), Op1.getOperand(0))) {
57932- MVT OpVT = Op0.getOperand(1).getSimpleValueType();
57933- SDValue Sum =
57934- DAG.getNode(ISD::ADD, DL, OpVT, Op0.getOperand(0), Op1.getOperand(0));
57935- return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57936- getZeroVector(OpVT, Subtarget, DAG, DL));
57937- }
57930+ if (sd_match(Op0, m_c_BinOp(X86ISD::PSADBW, m_Value(X), m_Zero())) &&
57931+ sd_match(Op1, m_c_BinOp(X86ISD::PSADBW, m_Value(Y), m_Zero())) &&
57932+ DAG.willNotOverflowAdd(/*IsSigned=*/false, X, Y)) {
57933+ MVT OpVT = X.getSimpleValueType();
57934+ SDValue Sum = DAG.getNode(ISD::ADD, DL, OpVT, X, Y);
57935+ return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57936+ getZeroVector(OpVT, Subtarget, DAG, DL));
5793857937 }
5793957938
5794057939 if (VT.isVector()) {
57941- SDValue X, Y;
5794257940 EVT BoolVT = EVT::getVectorVT(*DAG.getContext(), MVT::i1,
5794357941 VT.getVectorElementCount());
5794457942
0 commit comments