diff options
author | Björn Gustavsson <[email protected]> | 2018-08-24 10:10:15 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2018-08-24 10:10:15 +0200 |
commit | 9facb02b91979ef90b47ac0a54d1eb71fdaa1ee1 (patch) | |
tree | 157b93e73c57080c88a8be1be821783403d0be3e /lib/compiler/src/beam_flatten.erl | |
parent | 35979da59dd3c88601ed73a5eeb9054bbd28b5a1 (diff) | |
parent | b3af7a279312a6203865d13b5885960cd187bda2 (diff) | |
download | otp-9facb02b91979ef90b47ac0a54d1eb71fdaa1ee1.tar.gz otp-9facb02b91979ef90b47ac0a54d1eb71fdaa1ee1.tar.bz2 otp-9facb02b91979ef90b47ac0a54d1eb71fdaa1ee1.zip |
Merge branch 'bjorn/compiler/ssa'
* bjorn/compiler/ssa:
Travis CI: Run the SSA linter in the Linux64SmokeTest build
Remove retired compiler passes
Introduce a new SSA-based intermediate format
hipe_beam_to_icode: Correct translation of get_map_elements
beam_dead: Remove shortcut of binary matching instruction
beam_bs: Remove optimizations that are easier done on SSA format
Don't run unsafe compiler passes
Simplify optimizations by introducing is_nil late
beam_utils: Make is_tagged_tuple a pure test
beam_except: Enhance recognition of function_clause exceptions
beam_validator: Infer the types of copies in a smarter way
beam_validator: Improve merge of cons and literal list
beam_validator: Strengthen validation of func_info
beam_validator: Allow get_tuple_element before dsetelement
beam_validator: Don't transfer state to labels that can't be reached
beam_validator: Improve type analysis for tuples
beam_validator: Be more careful when updating try/catch state
beam_trim: Handle an empty list of instructions
v3_core: Number argument variables in ascending order
Teach binary instructions to use Y registers as destination
OTP-14894
Diffstat (limited to 'lib/compiler/src/beam_flatten.erl')
-rw-r--r-- | lib/compiler/src/beam_flatten.erl | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl index 20bd23a912..9a1c5a1021 100644 --- a/lib/compiler/src/beam_flatten.erl +++ b/lib/compiler/src/beam_flatten.erl @@ -43,13 +43,15 @@ block([{block,Is0}|Is1], Acc) -> block(Is1, norm_block(Is0, Acc)); block([I|Is], Acc) -> block(Is, [I|Acc]); block([], Acc) -> reverse(Acc). -norm_block([{set,[],[],{alloc,R,Alloc}}|Is], Acc0) -> +norm_block([{set,[],[],{alloc,R,{_,nostack,_,_}=Alloc}}|Is], Acc0) -> case insert_alloc_in_bs_init(Acc0, Alloc) of impossible -> norm_block(Is, reverse(norm_allocate(Alloc, R), Acc0)); Acc -> norm_block(Is, Acc) end; +norm_block([{set,[],[],{alloc,R,Alloc}}|Is], Acc0) -> + norm_block(Is, reverse(norm_allocate(Alloc, R), Acc0)); norm_block([{set,[D1],[S],get_hd},{set,[D2],[S],get_tl}|Is], Acc) -> I = {get_list,S,D1,D2}, norm_block(Is, [I|Acc]); |