@@ -57923,22 +57923,20 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
57923
57923
}
57924
57924
}
57925
57925
57926
+ SDValue X, Y;
57927
+
57926
57928
// add(psadbw(X,0),psadbw(Y,0)) -> psadbw(add(X,Y),0)
57927
57929
// 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));
57938
57937
}
57939
57938
57940
57939
if (VT.isVector()) {
57941
- SDValue X, Y;
57942
57940
EVT BoolVT = EVT::getVectorVT(*DAG.getContext(), MVT::i1,
57943
57941
VT.getVectorElementCount());
57944
57942
0 commit comments