Skip to content

Commit 3560e1d

Browse files
committed
[DAG] visitADDLike - convert (A-B)+(C-D) --> (A+C)-(B+D) fold to sd_match. NFC.
1 parent a78b19d commit 3560e1d

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,7 +2743,7 @@ SDValue DAGCombiner::visitADDLike(SDNode *N) {
27432743
return SD;
27442744
}
27452745

2746-
SDValue A, B, C;
2746+
SDValue A, B, C, D;
27472747

27482748
// fold ((0-A) + B) -> B-A
27492749
if (sd_match(N0, m_Neg(m_Value(A))))
@@ -2783,18 +2783,12 @@ SDValue DAGCombiner::visitADDLike(SDNode *N) {
27832783
return DAG.getNode(N1.getOpcode(), DL, VT, B, C);
27842784

27852785
// 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));
27982792

27992793
// fold (add (umax X, C), -C) --> (usubsat X, C)
28002794
if (N0.getOpcode() == ISD::UMAX && hasOperation(ISD::USUBSAT, VT)) {

0 commit comments

Comments
 (0)