diff options
author | Björn Gustavsson <[email protected]> | 2018-09-26 12:38:08 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2018-09-26 12:49:26 +0200 |
commit | 6ee1de2e3384b3f9a99f756867f18afd8166420c (patch) | |
tree | 499b6101b6effea564ef1081494a3c72f1bbaf40 /lib/compiler | |
parent | 13dd57dd63fee7593f809f1fc77ec91e4646c90c (diff) | |
download | otp-6ee1de2e3384b3f9a99f756867f18afd8166420c.tar.gz otp-6ee1de2e3384b3f9a99f756867f18afd8166420c.tar.bz2 otp-6ee1de2e3384b3f9a99f756867f18afd8166420c.zip |
Move peephole optimization from beam_block to beam_a
Moving away this optimization makes beam_block do one thing
and one thing only -- creating blocks.
Diffstat (limited to 'lib/compiler')
-rw-r--r-- | lib/compiler/src/beam_a.erl | 3 | ||||
-rw-r--r-- | lib/compiler/src/beam_block.erl | 3 |
2 files changed, 3 insertions, 3 deletions
diff --git a/lib/compiler/src/beam_a.erl b/lib/compiler/src/beam_a.erl index 0abc845310..dd2537a699 100644 --- a/lib/compiler/src/beam_a.erl +++ b/lib/compiler/src/beam_a.erl @@ -59,6 +59,9 @@ rename_instrs([{test,is_eq_exact,_,[Dst,Src]}=Test, rename_instrs([{test,is_eq_exact,_,[Same,Same]}|Is]) -> %% Same literal or same register. Will always succeed. rename_instrs(Is); +rename_instrs([{loop_rec,{f,Fail},{x,0}},{loop_rec_end,_},{label,Fail}|Is]) -> + %% This instruction sequence does nothing. + rename_instrs(Is); rename_instrs([{apply_last,A,N}|Is]) -> [{apply,A},{deallocate,N},return|rename_instrs(Is)]; rename_instrs([{call_last,A,F,N}|Is]) -> diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl index d28c0fd9e4..9d8d5b2b0c 100644 --- a/lib/compiler/src/beam_block.erl +++ b/lib/compiler/src/beam_block.erl @@ -49,9 +49,6 @@ function({function,Name,Arity,CLabel,Is0}) -> blockify(Is) -> blockify(Is, []). -blockify([{loop_rec,{f,Fail},{x,0}},{loop_rec_end,_Lbl},{label,Fail}|Is], Acc) -> - %% Useless instruction sequence. - blockify(Is, Acc); blockify([I|Is0]=IsAll, Acc) -> case collect(I) of error -> blockify(Is0, [I|Acc]); |