From f66e7dd713a33cbdd84cae8597b0442212481bc4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sat, 23 Sep 2000 14:41:51 +0200
Subject: [PATCH] Added optimization of a+b+c => `+(a, b, c).

Rev: src/treeopt.in:1.41
---
 src/treeopt.in | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/treeopt.in b/src/treeopt.in
index 0c166da0db..6bdd54aae1 100644
--- a/src/treeopt.in
+++ b/src/treeopt.in
@@ -1,6 +1,6 @@
 // -*- c -*-
 //
-// $Id: treeopt.in,v 1.40 2000/04/30 13:52:54 grubba Exp $
+// $Id: treeopt.in,v 1.41 2000/09/23 12:41:51 grubba Exp $
 //
 // The tree optimizer
 //
@@ -57,6 +57,17 @@ F_PUSH_ARRAY(0 = F_CONSTANT[$$->u.sval.type == T_ARRAY], *):
   }
   ;
 
+// `+(`+(a,b),c)  =>  `+(a, b, c)
+F_APPLY(0 = F_CONSTANT
+	   [$$->u.sval.type == T_FUNCTION]
+	   [$$->u.sval.subtype == FUNCTION_BUILTIN]
+	   [$$->u.sval.u.efun->function == f_add],
+	   F_ARG_LIST(F_APPLY($0, 1), 2)):
+  F_APPLY($0, F_ARG_LIST($1, $2));
+
+// Similar rule for `*() disabled, since the type for '*() isn't
+// correct for all cases.
+
 F_POP_VALUE(-, *):
   -;
 
-- 
GitLab