diff options
author | Björn Gustavsson <[email protected]> | 2016-12-12 14:11:41 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2016-12-12 14:11:41 +0100 |
commit | 71602986c21face6d81180257eb41e5fd2e2fd3b (patch) | |
tree | 782ddfde460e4302399f6449c1c4c46989efec22 | |
parent | ed5549c0fb8a6946c7f96ee144bbc1e8823bb1e4 (diff) | |
parent | ebdf6e688c68b95e0c0b6f9b00b9f9c26f83525e (diff) | |
download | otp-71602986c21face6d81180257eb41e5fd2e2fd3b.tar.gz otp-71602986c21face6d81180257eb41e5fd2e2fd3b.tar.bz2 otp-71602986c21face6d81180257eb41e5fd2e2fd3b.zip |
Merge branch 'bjorn/compiler/beam_type'
* bjorn/compiler/beam_type:
beam_type: Minimize number of regs in test_heap instructions
-rw-r--r-- | lib/compiler/src/beam_type.erl | 3 | ||||
-rw-r--r-- | lib/compiler/src/beam_utils.erl | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl index d324580cba..9866dcd070 100644 --- a/lib/compiler/src/beam_type.erl +++ b/lib/compiler/src/beam_type.erl @@ -34,7 +34,8 @@ function({function,Name,Arity,CLabel,Asm0}) -> try Asm1 = beam_utils:live_opt(Asm0), Asm2 = opt(Asm1, [], tdb_new()), - Asm = beam_utils:delete_live_annos(Asm2), + Asm3 = beam_utils:live_opt(Asm2), + Asm = beam_utils:delete_live_annos(Asm3), {function,Name,Arity,CLabel,Asm} catch Class:Error -> diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl index 74e3d7e38a..ffeff9ea81 100644 --- a/lib/compiler/src/beam_utils.erl +++ b/lib/compiler/src/beam_utils.erl @@ -768,6 +768,8 @@ live_opt_block([{set,Ds,Ss,Op}=I0|Is], Regs0, D, Acc) -> _ -> live_opt_block(Is, Regs, D, [I|Acc]) end; +live_opt_block([{'%live',_,_}|Is], Regs, D, Acc) -> + live_opt_block(Is, Regs, D, Acc); live_opt_block([], Regs, _, Acc) -> {Acc,Regs}. live_join_labels([{f,L}|T], D, Regs0) when L =/= 0 -> |