diff options
author | Björn Gustavsson <[email protected]> | 2018-01-31 16:18:45 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2018-01-31 16:18:45 +0100 |
commit | bb0b3c7252119604cf3e8c9ba78d20000e06f4ea (patch) | |
tree | 6fca8e6fdc97e62f5c911853f8773918b325d7d6 | |
parent | 2208953ca144858ddc343721a9cc40e43cc7fe0c (diff) | |
parent | ce51e9969798cef67b4d00e03a9e59c7986a8bdd (diff) | |
download | otp-bb0b3c7252119604cf3e8c9ba78d20000e06f4ea.tar.gz otp-bb0b3c7252119604cf3e8c9ba78d20000e06f4ea.tar.bz2 otp-bb0b3c7252119604cf3e8c9ba78d20000e06f4ea.zip |
Merge pull request #1696 from bjorng/bjorn/compiler/fix-beam_block-bug/ERL-555
Fix incorrect handling of floating point instructions
-rw-r--r-- | lib/compiler/src/beam_block.erl | 1 | ||||
-rw-r--r-- | lib/compiler/test/beam_block_SUITE.erl | 14 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl index d0536e0669..ecefeeae54 100644 --- a/lib/compiler/src/beam_block.erl +++ b/lib/compiler/src/beam_block.erl @@ -222,6 +222,7 @@ move_allocates_1([I|Is], Acc) -> move_allocates_1(Is, [I|Acc]); move_allocates_1([], Acc) -> Acc. +alloc_may_pass({set,_,[{fr,_}],fmove}) -> false; alloc_may_pass({set,_,_,{alloc,_,_}}) -> false; alloc_may_pass({set,_,_,{set_tuple_element,_}}) -> false; alloc_may_pass({set,_,_,put_list}) -> false; diff --git a/lib/compiler/test/beam_block_SUITE.erl b/lib/compiler/test/beam_block_SUITE.erl index fac18789e0..38ead96cc8 100644 --- a/lib/compiler/test/beam_block_SUITE.erl +++ b/lib/compiler/test/beam_block_SUITE.erl @@ -22,7 +22,7 @@ -export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1, init_per_group/2,end_per_group/2, get_map_elements/1,otp_7345/1,move_opt_across_gc_bif/1, - erl_202/1,repro/1,local_cse/1]). + erl_202/1,repro/1,local_cse/1,second_block_pass/1]). %% The only test for the following functions is that %% the code compiles and is accepted by beam_validator. @@ -41,7 +41,8 @@ groups() -> move_opt_across_gc_bif, erl_202, repro, - local_cse + local_cse, + second_block_pass ]}]. init_per_suite(Config) -> @@ -295,6 +296,15 @@ local_cse_4() -> do_local_cse_4(X, Y, Z) -> {X,Y,Z}. +%% Tests previously found bugs when running beam_block the second time. + +second_block_pass(_Config) -> + [#{dts:=5.0}] = second_1([#{dts => 10.0}], 2.0), + ok. + +second_1(Fs, TS) -> + [F#{dts=>DTS / TS} || #{dts:=DTS} = F <- Fs]. + %%% %%% Common functions. %%% |