Remove optimization for if-then-else

This commit is contained in:
Ulf Norell 2019-04-09 10:52:39 +02:00
parent b3131504b0
commit 758f836bf6

View File

@ -536,8 +536,7 @@ apply_rules_once([{RName, Rule} | Rules], I, Code) ->
merge_rules() -> merge_rules() ->
[?RULE(r_push_consume), [?RULE(r_push_consume),
?RULE(r_one_shot_var), ?RULE(r_one_shot_var),
?RULE(r_write_to_dead_var), ?RULE(r_write_to_dead_var)
?RULE(r_write_single_branch)
]. ].
rules() -> rules() ->
@ -675,22 +674,6 @@ r_write_to_dead_var({Ann, {'STORE', R = {var, _}, A}}, Code) when A /= ?a ->
end; end;
r_write_to_dead_var(_, _) -> false. r_write_to_dead_var(_, _) -> false.
%% Push variable writes that are only needed in a single branch inside the branch.
r_write_single_branch(IA = {_Ann, I}, [{ifte, Then = [{AnnThen, _} | _], Else = [{AnnElse, _} | _]} | Code]) ->
#{ write := R } = attributes(I),
case R of
{var, _} ->
case {live_in(R, AnnThen), live_in(R, AnnElse)} of
{true, false} ->
{[], [{ifte, [IA | Then], Else} | Code]};
{false, true} ->
{[], [{ifte, Then, [IA | Else]} | Code]};
_ -> false
end;
_ -> false
end;
r_write_single_branch(_, _) -> false.
%% Desugar and specialize and remove annotations %% Desugar and specialize and remove annotations
unannotate(switch_body) -> [switch_body]; unannotate(switch_body) -> [switch_body];