Add separate flags for each scode optimization

This commit is contained in:
Gaith Hallak 2022-08-30 13:48:20 +03:00
parent c1c169273c
commit ec4ad40309

View File

@ -708,13 +708,8 @@ tuple(N) -> aeb_fate_ops:tuple(?a, N).
%% Optimize %% Optimize
optimize_scode(Funs, Options) -> optimize_scode(Funs, Options) ->
case proplists:get_value(optimize_scode, Options, true) of maps:map(fun(Name, Def) -> optimize_fun(Funs, Name, Def, Options) end,
true -> Funs).
maps:map(fun(Name, Def) -> optimize_fun(Funs, Name, Def, Options) end,
Funs);
false ->
Funs
end.
flatten(missing) -> missing; flatten(missing) -> missing;
flatten(Code) -> lists:map(fun flatten_s/1, lists:flatten(Code)). flatten(Code) -> lists:map(fun flatten_s/1, lists:flatten(Code)).
@ -1094,10 +1089,14 @@ simpl_s(I, _) -> I.
simpl_top(I, Code, Options) -> simpl_top(I, Code, Options) ->
simpl_top(?SIMPL_FUEL, I, Code, Options). simpl_top(?SIMPL_FUEL, I, Code, Options).
%% Change r_rule to optimize_rule (e.g. change r_push_consume to optimize_push_consume)
-define(RULE_OPTIMIZATION(Rule), list_to_atom("optimize" ++ lists:nthtail(1, atom_to_list(Rule)))).
simpl_top(0, I, Code, _Options) -> simpl_top(0, I, Code, _Options) ->
code_error({optimizer_out_of_fuel, I, Code}); code_error({optimizer_out_of_fuel, I, Code});
simpl_top(Fuel, I, Code, Options) -> simpl_top(Fuel, I, Code, Options) ->
apply_rules(Fuel, rules(), I, Code, Options). Rules = [R || R = {Rule, _} <- rules(), proplists:get_value(?RULE_OPTIMIZATION(Rule), Options, true)],
apply_rules(Fuel, Rules, I, Code, Options).
apply_rules(Fuel, Rules, I, Code, Options) -> apply_rules(Fuel, Rules, I, Code, Options) ->
Cons = fun(X, Xs) -> simpl_top(Fuel - 1, X, Xs, Options) end, Cons = fun(X, Xs) -> simpl_top(Fuel - 1, X, Xs, Options) end,