OPTIMIZATION: Turn additions of constants to PLUS_CONST, eliminate PLUS_CONST(0)s

This commit is contained in:
Emi Simpson 2024-03-17 09:46:31 -04:00
parent 4f39a88f47
commit 864d98638e
Signed by: Emi
GPG Key ID: A12F2C2FFDC3D847
1 changed files with 25 additions and 1 deletions

26
opt.py
View File

@ -35,6 +35,27 @@ def collapse_constant_additions(expr: Expression) -> Option[Expression]:
return Some(Application(Builtin(Builtin.BB_PLUS_CONST(x+y)), val))
return None
def eliminate_identity_operations(expr: Expression) -> Option[Expression]:
match expr:
case Application(Builtin(Builtin.BB_PLUS_CONST(0)), val):
print('BBBBBBBB')
return Some(val)
case Application(MonoFunc(arg, Variable(bod_var)), val):
if arg == bod_var:
print('CCCCCCCCCCCCCcc')
return Some(val)
return None
def identify_constant_additions(expr: Expression):
match expr:
case Application(Builtin(Builtin.BB_PLUS()), Int(x)):
print('AAAααααα')
return Some(Builtin(Builtin.BB_PLUS_CONST(x)))
case Application(Application(Builtin(Builtin.BB_PLUS()), expr1), Int(x)):
print('DDDDDDDDDDD')
return Some(Application(Builtin(Builtin.BB_PLUS_CONST(x)), expr1))
return None
def apply_opts(optimizations: Collection[Optimization], expression: Expression) -> Tuple[Expression, int]:
count: int
optimized_expr: Expression
@ -89,4 +110,7 @@ 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, collapse_constant_additions)
all_optimizations: Sequence[Optimization] = (eliminate_single_let,
collapse_constant_additions,
eliminate_identity_operations,
identify_constant_additions)