From c49c879357f5d603668d6baac3ad12353dcc8470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 11 Apr 2000 21:51:32 +0200 Subject: [PATCH] Somewhat more aggressive optimization. Rev: src/treeopt.in:1.38 --- src/treeopt.in | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/treeopt.in b/src/treeopt.in index b284934f98..2804fbad0e 100644 --- a/src/treeopt.in +++ b/src/treeopt.in @@ -1,6 +1,6 @@ // -*- c -*- // -// $Id: treeopt.in,v 1.37 2000/03/31 19:39:34 grubba Exp $ +// $Id: treeopt.in,v 1.38 2000/04/11 19:51:32 grubba Exp $ // // The tree optimizer // @@ -47,6 +47,10 @@ F_POP_VALUE(F_CAST(0, *), *): F_POP_VALUE(F_CONSTANT, *): -; +// Why perform a calculation just to throw away the result? +F_POP_VALUE(+[node_is_tossable($$)], *): + -; + // Popping of variables. F_POP_VALUE(F_LOCAL, *): -; @@ -188,9 +192,15 @@ F_COMMA_EXPR(0, -): F_COMMA_EXPR(F_CONSTANT, 0 = +): $0; +F_COMMA_EXPR(+[node_is_tossable($$)], 0 = +): + $0; + F_COMMA_EXPR(F_COMMA_EXPR(0, F_CONSTANT), 1 = +): F_COMMA_EXPR($0, $1); +F_COMMA_EXPR(F_COMMA_EXPR(0, +[node_is_tossable($$)]), 1 = +): + F_COMMA_EXPR($0, $1); + // Join adjacent F_POP_VALUE's. // NOTE: These two rules work only since F_RETURN, F_BREAK and F_CONTINUE // have been stripped of F_POP_VALUE by rules above. @@ -468,6 +478,11 @@ F_SUB_EQ(0, 1 = F_CONSTANT[$$->u.sval.type == T_INT] F_INDEX(-, 0 = *): F_COMMA_EXPR(F_POP_VALUE($0, -), 0); +// foo["str"] -> foo->str +F_INDEX(0 [ !match_types($$->type, object_type_string) ], + 1 = F_CONSTANT[$$->u.sval.type == T_STRING]): + F_ARROW($0, $1); + F_ARROW(-, 0 = *): F_COMMA_EXPR(F_POP_VALUE($0, -), 0); -- GitLab