OSDN Git Service

One more transformation.
authorDale Johannesen <dalej@apple.com>
Tue, 2 Dec 2008 18:40:40 +0000 (18:40 +0000)
committerDale Johannesen <dalej@apple.com>
Tue, 2 Dec 2008 18:40:40 +0000 (18:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60432 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index 629e22d..aae4c59 100644 (file)
@@ -1025,6 +1025,14 @@ SDValue DAGCombiner::visitADD(SDNode *N) {
     return DAG.getNode(ISD::SUB, VT, N1.getOperand(0),
                        N1.getOperand(1).getOperand(0));
   }
+  // fold (A+((B-A)+-C)) to (B+-C)
+  if ((N1.getOpcode() == ISD::SUB || N1.getOpcode() == ISD::ADD) &&
+      N1.getOperand(0).getOpcode() == ISD::SUB &&
+      N0 == N1.getOperand(0).getOperand(1)) {
+    return DAG.getNode(N1.getOpcode(), VT, N1.getOperand(0).getOperand(0),
+                       N1.getOperand(1));
+  }
+
   // fold (A-B)+(C-D) to (A+C)-(B+D) when A or C is constant
   if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB) {
     SDValue N00 = N0.getOperand(0);