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

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

diff --git a/src/DataTree.cc b/src/DataTree.cc
index d3ffb1f8..af09e30c 100644
--- a/src/DataTree.cc
+++ b/src/DataTree.cc
@@ -273,6 +273,11 @@ DataTree::AddDivide(expr_t iArg1, expr_t iArg2) noexcept(false)
   if (iArg1 == iArg2)
     return One;
 
+  // Simplify x/(1/y) in x*y
+  if (auto barg2 = dynamic_cast<BinaryOpNode *>(iArg2);
+      barg2 && barg2->op_code == BinaryOpcode::divide && barg2->arg1 == One)
+    return AddTimes(iArg1, barg2->arg2);
+
   return AddBinaryOp(iArg1, BinaryOpcode::divide, iArg2);
 }
 
-- 
GitLab