Age | Commit message (Collapse) | Author |
|
Optimize ssa_opt_sink for huge functions
|
|
* maint:
Introduce ei_init()
Fix bug in ei_accept_tmo
Fix build of erl_interface on BSD
|
|
* rickard/ei-ext-maint/OTP-15442:
Introduce ei_init()
Fix bug in ei_accept_tmo
Fix build of erl_interface on BSD
|
|
Add hash function BLAKE2 to crypto:hash/hmac
OTP-15564
|
|
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.
|
|
Keep track of tuple elements in type optimization pass
|
|
* rickard/ei-ext/OTP-15442:
Introduce ei_init()
Fix bug in ei_accept_tmo
Fix build of erl_interface on BSD
|
|
You previously had to initialize ei via erl_init() which
implied that you were forced to link against the erl_interface
even when not using it (besides initializing ei).
|
|
|
|
Conflicts:
lib/ssl/doc/src/ssl.xml
lib/ssl/src/ssl.erl
lib/ssl/src/ssl_cipher_format.erl
lib/ssl/src/tls_handshake.erl
|
|
* ingela/ssl/alert-return/OTP-15423:
ssl: Use specs to generate type documentation
ssl: Enhance error handling
|
|
|
|
* ingela/ssl/dtls-match-error/OTP-15561:
ssl: Remove unintended match
|
|
|
|
Prior to 294d66a295f6c2101fe3c2da630979ad4e736c08 there wasn't much
point to keeping track of tuple element types; they were only known
when we had inserted or extracted values from a tuple, and in
neither case was it likely that we'd extract the same values again.
It makes a lot more sense to do so now that type optimizations are
applied across functions; if we return a tuple it's very likely
that its elements will be extracted soon after, and knowing their
types lets us eliminate more type checks.
Co-authored-by: Björn Gustavsson <[email protected]>
|
|
|
|
* maint:
Updated OTP version
Prepare release
|
|
* maint-21:
Updated OTP version
Prepare release
|
|
|
|
|
|
|
|
Reduce compilation times
|
|
* 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
|
|
Adds two hash functions blake2b and blake2s (64 bit hash and 32 bit hash
respectively). These are modern and standard hash functions used in
blockchains and encrypted communication protocols (e.g. Noise -
http://www.noiseprotocol.org/). The hash functions are available in
OpenSSL since version 1.1.1.
Also add test cases and mention in documentation.
|
|
* hans/crypto/fixes/OTP-14732:
otp_test_engine.c fixes
crypto: Fix compilation < 1.0.0
|
|
* maint:
Fix typo in erlang.xml
inets: Ignore bracket option in format_address
Change-Id: I8a215d3872ae74e08d7a17b70ba53535947c032f
|
|
|
|
|
|
crypto: revamp C code [WIP]
OTP-14732
|
|
* peterdmv/inets/fix-http-client/ERIERL-289/OTP-15554:
inets: Ignore bracket option in format_address
Change-Id: If3f19325edb8f8cc1ced717aa125658c00438b70
|
|
|
|
|
|
A long time ago there was a good idea to run compiled code in a
slave node. Nowadays, not so much.
|
|
test_lib:is_cloned_mod(inline_SUITE) would return true.
|
|
There could be a warning with a `no_file` atom instead of filename
and line number.
|
|
|
|
With the new SSA code passes, the optimized_guard/1 test case has
become really bad at finding unnecessary `and` and `or` instructions.
|
|
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.
|
|
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.
|
|
Avoiding calls usually reduces the size of the stack frame and reduces
register shuffling.
|
|
|
|
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.
|
|
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
|
|
Compilation will be much faster if there are many blocks, but no
get_tuple_element instructions.
Reported-by: Michał Muskała
|
|
Fix internal consistency failure caused by beam_except
|
|
|
|
|
|
Fix spec for erl_epmd:port_please
|
|
|
|
|