aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2019-02-06Optimize ssa_opt_sink for huge functionsBjörn Gustavsson
The ssa_opt_sink optimization of beam_ssa_opt could get very slow for certain huge functions. 9a190cae9bd7 partly addressed this issue by terminating the optimization early if there happened to be no get_tuple_element instructions at all in the function. This commit addresses the issue more directly by making the dominator calculation in beam_ssa:dominators/1 more efficient. The same algorithm as before is used, but it is implemented in a more efficient way based on the ideas in "A Simple, Fast Dominance Algorithm" (http://www.hipersoft.rice.edu/grads/publications/dom14.pdf). As well as being more efficient, the new implementation also gives an explicit representation of the dominator tree, which makes it possible to simplify and optimize the ssa_opt_sink optimization.
2019-02-04Merge branch 'maint'Péter Dimitrov
* maint: Updated OTP version Prepare release
2019-02-04Merge branch 'maint-21' into maintPéter Dimitrov
* maint-21: Updated OTP version Prepare release
2019-02-04Merge pull request #2126 from bjorng/bjorn/compiler/compilation-speedBjörn Gustavsson
Reduce compilation times
2019-02-04Merge branch 'bjorn/compiler/cuddle-with-tests'Björn Gustavsson
* bjorn/compiler/cuddle-with-tests: inline_SUITE: Don't start a slave node Correct test_lib:is_cloned_mod/1 sys_core_fold_lists: Propagate annotations in expansion of lists functions Parallelize compile_SUITE:bc_options/1 Remove the optimized_guard/1 test case
2019-02-04Merge branch 'hans/crypto/fixes/OTP-14732'Hans Nilsson
* hans/crypto/fixes/OTP-14732: otp_test_engine.c fixes crypto: Fix compilation < 1.0.0
2019-02-04Merge branch 'maint'Péter Dimitrov
* maint: Fix typo in erlang.xml inets: Ignore bracket option in format_address Change-Id: I8a215d3872ae74e08d7a17b70ba53535947c032f
2019-02-04otp_test_engine.c fixesHans Nilsson
2019-02-04crypto: Fix compilation < 1.0.0Hans Nilsson
2019-02-04Merge pull request #2095 from hogand/crypto/revamp-filesHans Nilsson
crypto: revamp C code [WIP] OTP-14732
2019-02-04Merge branch 'peterdmv/inets/fix-http-client/ERIERL-289/OTP-15554' into maintPéter Dimitrov
* peterdmv/inets/fix-http-client/ERIERL-289/OTP-15554: inets: Ignore bracket option in format_address Change-Id: If3f19325edb8f8cc1ced717aa125658c00438b70
2019-02-04Merge pull request #2128 from amatalai/fix-typo-in-erlang-xmlLukas Larsson
Fix typo in erlang.xml
2019-02-04Fix typo in erlang.xmlTobiasz
2019-02-01inline_SUITE: Don't start a slave nodeBjörn Gustavsson
A long time ago there was a good idea to run compiled code in a slave node. Nowadays, not so much.
2019-02-01Correct test_lib:is_cloned_mod/1Björn Gustavsson
test_lib:is_cloned_mod(inline_SUITE) would return true.
2019-02-01sys_core_fold_lists: Propagate annotations in expansion of lists functionsBjörn Gustavsson
There could be a warning with a `no_file` atom instead of filename and line number.
2019-02-01Parallelize compile_SUITE:bc_options/1Björn Gustavsson
2019-02-01Remove the optimized_guard/1 test caseBjörn Gustavsson
With the new SSA code passes, the optimized_guard/1 test case has become really bad at finding unnecessary `and` and `or` instructions.
2019-02-01Make helper functions tail-recursiveBjörn Gustavsson
Two helper functions in beam_ssa_opt and beam_ssa_dead are body-recursive for no good reason. While at it, add some clarifying comments to the functions.
2019-02-01Optimize beam_ssa:def_used/2Björn Gustavsson
beam_ssa:def_used/2 is used by beam_ssa_pre_codegen when reserving Y registers. Do the following optimizations: * Use an ordset instead of a gb_set. When the only operation performed on a set is union/2, an ordset will usually be faster, especially when the result is an ordset. * Use a cerl_set instead of a gb_set for the set of all possible predecessors. cerl_sets is usually faster than gb_sets.
2019-02-01Prefer map syntax and guard BIFs over the maps modulesBjörn Gustavsson
Avoiding calls usually reduces the size of the stack frame and reduces register shuffling.
2019-02-01beam_ssa_type: Optimize calculation of variables that are only used onceBjörn Gustavsson
2019-02-01Use gb_sets:delete/2 instead of gb_sets:delete_any/2Björn Gustavsson
Save a little time by using gb_sets:delete/2 instead of gb_sets:delete_any/2 when the key is known to be in the set.
2019-02-01Speed up beam_ssa_dead when there are many sequential blocksBjörn Gustavsson
beam_ssa_dead could be very slow if there were many blocks connected with unconditional branches (for example, if a block had contained many `call` instructions and been split by ssa_opt_split_blocks). It turns out that `comb_get_sw/3` does an unnecessary (and perhaps incorrect) recursive call to itself when the terminator for the block is an unconditional branch. Removing the recursive call does not disable any optimizations, but will be much faster if there are many blocks connected with unconditional branches. Reported-by: Michał Muskała
2019-02-01Optimize ssa_opt_sink when nothing can be sunkBjörn Gustavsson
Compilation will be much faster if there are many blocks, but no get_tuple_element instructions. Reported-by: Michał Muskała
2019-02-01Merge pull request #2122 from bjorng/bjorn/compiler/fix-beam_exceptBjörn Gustavsson
Fix internal consistency failure caused by beam_except
2019-02-01Updated OTP versionOTP-21.2.5Erlang/OTP
2019-02-01Prepare releaseErlang/OTP
2019-02-01Merge branch 'peterdmv/inets/fix-http-client/ERIERL-289/OTP-15554' into maint-21Erlang/OTP
* peterdmv/inets/fix-http-client/ERIERL-289/OTP-15554: inets: Ignore bracket option in format_address
2019-02-01Merge branch 'maint'Lukas Larsson
2019-02-01Merge pull request #2117 from essen/fix-erl_epmd_port_please-spec/OTP-15557Lukas Larsson
Fix spec for erl_epmd:port_please
2019-02-01Merge branch 'maint'Lukas Larsson
2019-02-01Merge branch 'lukas/erts/fix_system_info_kernelpoll/OTP-15556' into maintLukas Larsson
* lukas/erts/fix_system_info_kernelpoll/OTP-15556: erts: Fix erlang:system_info(kernel_poll) to return correct value
2019-02-01erts: Fix erlang:system_info(kernel_poll) to return correct valueLukas Larsson
2019-02-01Merge branch 'maint'Lukas Larsson
2019-02-01fix: erts: Remove dead ERTS_MAGIC_REF_BIF_TIMERS codeLukas Larsson
2019-02-01Merge branch 'maint'Lukas Larsson
2019-02-01Merge branch 'lukas/OTP-21.3-cleanup' into maintLukas Larsson
* lukas/OTP-21.3-cleanup: erl_interface: Fix bsd makefile problem erts: Remove dead ERTS_MAGIC_REF_BIF_TIMERS code
2019-02-01erl_interface: Fix bsd makefile problemLukas Larsson
2019-02-01erts: Remove dead ERTS_MAGIC_REF_BIF_TIMERS codeLukas Larsson
Using magic refs for big timers caused too large a stress on the off_heap GC implementation to be viable, so it was never enable. The code is now broken because of other changes to we might as well remove it.
2019-02-01inets: Ignore bracket option in format_addressPéter Dimitrov
Ignore the option 'ipv6_host_with_brackets' when formatting addresses to be used in lower level functions. Change-Id: I3b7b276b37fe129ade9208519bff226e17ae7c57
2019-01-31Merge branch 'maint'Sverker Eriksson
2019-01-31Merge branch 'sverker/port-control-badarg/OTP-15555' into maintSverker Eriksson
* sverker/port-control-badarg/OTP-15555: erts: Add doc warnings for erlang:port_command|call|control erts: Add magic port control numbers
2019-01-31Fix internal consistency failure caused by beam_exceptBjörn Gustavsson
Fix a bug where the number of live registers in a `bs_get_tail` instruction was too low. Consider this example: -export([bs_get_tail/2]). bs_get_tail(Bin, Config) -> bs_get_tail_1(Bin, 0, 0, Config). bs_get_tail_1(<<_:32, Rest/binary>>, Z1, Z2, F1) -> {Rest,Z1,Z2,F1}. `beam_validator` would emit the following diagnostics: t: function bs_get_tail_1/4+2: Internal consistency check failed - please report this bug. Instruction: {func_info,{atom,t},{atom,bs_get_tail_1},4} Error: {uninitialized_reg,{x,3}}: Here is the part of the code that generates the `function_clause` exception before the optimization: {test_heap,6,4}. {put_list,{x,3},nil,{x,2}}. {put_list,{integer,0},{x,2},{x,2}}. {put_list,{integer,0},{x,2},{x,2}}. {bs_set_position,{x,1},{x,0}}. {bs_get_tail,{x,1},{x,0},3}. %3 live registers. {test_heap,2,3}. {put_list,{x,0},{x,2},{x,1}}. {move,{atom,function_clause},{x,0}}. {line,[{location,"t.erl",8}]}. {call_ext_only,2,{extfunc,erlang,error,2}}. The `bs_get_tail` instruction expects that 3 registers will be live at this point. `beam_except` rewrites the code like this: {bs_set_position,{x,1},{x,0}}. {bs_get_tail,{x,1},{x,0},3}. %Still 3. Too low. {move,{integer,0},{x,1}}. {move,{integer,0},{x,2}}. {jump,{f,3}}. Now the number of live registers in `bs_get_tail` is too low, because the `{x,3}` register will become undefined. This commit adds code to update the number of live registers in the `bs_get_tail` instruction, producing this code: {bs_set_position,{x,1},{x,0}}. {bs_get_tail,{x,1},{x,0},4}. %Adjusted to 4. {move,{integer,0},{x,1}}. {move,{integer,0},{x,2}}. {jump,{f,3}}.
2019-01-31Merge branch 'maint'Björn Gustavsson
* maint: Eliminate bogus warning when using tuple calls
2019-01-31Merge pull request #2119 from bjorng/bjorn/compiler/tuple-call/ERL-838/OTP-15552Björn Gustavsson
Eliminate bogus warning when using tuple calls
2019-01-30Eliminate bogus warning when using tuple callsBjörn Gustavsson
There would be a bogus warning when compiling the following function with the `tuple_calls` option: dispatch(X) -> (list_to_atom("prefix_" ++ atom_to_list(suffix))):doit(X). The warning would look like this: no_file: this expression will fail with a 'badarg' exception https://bugs.erlang.org/browse/ERL-838
2019-01-30Merge pull request #2115 from bjorng/bjorn/compiler/opt-function_clauseBjörn Gustavsson
Enhance optimization of function_clause exceptions
2019-01-30Merge branch 'peterdmv/ssl/improve-logging'Péter Dimitrov
* peterdmv/ssl/improve-logging: ssl: Improve ssl_logger Change-Id: I3b181ed527ce210af6c4a7576576fa522fb20767
2019-01-30Merge branch 'peterdmv/ssl/server-send-finished'Péter Dimitrov
* peterdmv/ssl/server-send-finished: ssl: Fix dialyzer warnings ssl: Add 'Finished' ssl: Use HKDF hash function in Transcript-Hash ssl: Improve test of 1-RTT handshake ssl: Update certificate_verify ssl: Update function build_content ssl: Fix encoding of the Certificate message ssl: Add EncryptedExtensions ssl: Fix encoding of empty extensions ssl: Fix key schedule and traffic keys ssl: Encode/decode CertificateVerify Change-Id: Ie525de276ca4ebd9f9fb0fbdc9dc3822f91834e0