OPTIMIZATION: Turn additions of constants to PLUS_CONST, eliminate PLUS_CONST(0)s
This commit is contained in:
parent
4f39a88f47
commit
864d98638e
26
opt.py
26
opt.py
|
@ -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)
|
Loading…
Reference in New Issue