From a2b68cc73e2fa80a70aa0fd93c6291daf820b8e6 Mon Sep 17 00:00:00 2001 From: Emi Simpson Date: Sun, 17 Mar 2024 09:09:04 -0400 Subject: [PATCH] Optimization: Collapse consecutive constant additions --- opt.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/opt.py b/opt.py index f727616..4c8c45f 100644 --- a/opt.py +++ b/opt.py @@ -29,6 +29,12 @@ def eliminate_single_let(expr: Expression) -> Option[Expression]: case _: return None +def collapse_constant_additions(expr: Expression) -> Option[Expression]: + match expr: + case Application(Builtin(Builtin.BB_PLUS_CONST(x)), Application(Builtin(Builtin.BB_PLUS_CONST(y)), val)): + return Some(Application(Builtin(Builtin.BB_PLUS_CONST(x+y)), val)) + return None + def apply_opts(optimizations: Collection[Optimization], expression: Expression) -> Tuple[Expression, int]: count: int optimized_expr: Expression @@ -77,4 +83,4 @@ def optimize_to_fixpoint(optimizations: Collection[Optimization], expression: Ex return optimize_to_fixpoint(optimizations, optimized_expression) raise Exception('Unreachable') -all_optimizations: Sequence[Optimization] = (eliminate_single_let,) \ No newline at end of file +all_optimizations: Sequence[Optimization] = (eliminate_single_let, collapse_constant_additions) \ No newline at end of file