From 50275f3588b67a5a52eebeb8c6ff17529aff085d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 11 Dec 2019 19:08:01 +0100
Subject: [PATCH] Simplify x-(-y) in x+y

---
 src/DataTree.cc | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/DataTree.cc b/src/DataTree.cc
index af09e30c..3574b557 100644
--- a/src/DataTree.cc
+++ b/src/DataTree.cc
@@ -210,6 +210,11 @@ DataTree::AddMinus(expr_t iArg1, expr_t iArg2)
   if (iArg1 == iArg2)
     return Zero;
 
+  // Simplify x-(-y) in x+y
+  if (auto uarg2 = dynamic_cast<UnaryOpNode *>(iArg2);
+      uarg2 && uarg2->op_code == UnaryOpcode::uminus)
+    return AddPlus(iArg1, uarg2->arg);
+
   return AddBinaryOp(iArg1, BinaryOpcode::minus, iArg2);
 }
 
-- 
GitLab