@@ -2743,7 +2743,7 @@ SDValue DAGCombiner::visitADDLike(SDNode *N) {
2743
2743
return SD;
2744
2744
}
2745
2745
2746
- SDValue A, B, C;
2746
+ SDValue A, B, C, D ;
2747
2747
2748
2748
// fold ((0-A) + B) -> B-A
2749
2749
if (sd_match(N0, m_Neg(m_Value(A))))
@@ -2783,18 +2783,12 @@ SDValue DAGCombiner::visitADDLike(SDNode *N) {
2783
2783
return DAG.getNode(N1.getOpcode(), DL, VT, B, C);
2784
2784
2785
2785
// fold (A-B)+(C-D) to (A+C)-(B+D) when A or C is constant
2786
- if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB &&
2787
- N0->hasOneUse() && N1->hasOneUse()) {
2788
- SDValue N00 = N0.getOperand(0);
2789
- SDValue N01 = N0.getOperand(1);
2790
- SDValue N10 = N1.getOperand(0);
2791
- SDValue N11 = N1.getOperand(1);
2792
-
2793
- if (isConstantOrConstantVector(N00) || isConstantOrConstantVector(N10))
2794
- return DAG.getNode(ISD::SUB, DL, VT,
2795
- DAG.getNode(ISD::ADD, SDLoc(N0), VT, N00, N10),
2796
- DAG.getNode(ISD::ADD, SDLoc(N1), VT, N01, N11));
2797
- }
2786
+ if (sd_match(N0, m_OneUse(m_Sub(m_Value(A), m_Value(B)))) &&
2787
+ sd_match(N1, m_OneUse(m_Sub(m_Value(C), m_Value(D)))) &&
2788
+ (isConstantOrConstantVector(A) || isConstantOrConstantVector(C)))
2789
+ return DAG.getNode(ISD::SUB, DL, VT,
2790
+ DAG.getNode(ISD::ADD, SDLoc(N0), VT, A, C),
2791
+ DAG.getNode(ISD::ADD, SDLoc(N1), VT, B, D));
2798
2792
2799
2793
// fold (add (umax X, C), -C) --> (usubsat X, C)
2800
2794
if (N0.getOpcode() == ISD::UMAX && hasOperation(ISD::USUBSAT, VT)) {
0 commit comments