Age | Commit message (Collapse) | Author |
|
|
|
This is cleaner and slightly faster.
|
|
The general complexity of the shortcut sub pass of `beam_ssa_dead` is
quadratic, but those optimizations will reduce the constant factor
somewhat.
|
|
Refactor the code to avoid putting any variable from a skippable block
into the set of unset variables. Keeping the set of unset variables as
small as possible will make beam_ssa_dead almost twice as fast when
compiling lib/unicode/tokenizer.ex in elixir.
|
|
* hans/crypto/bad_ret_fips/master/OTP-15634:
crypto: Fix FIPS mode
|
|
* bjorn/cuddle-with-tests:
Fix failing test case binary_module_SUITE:copy/1
Fix failing test case qlc_SUITE:lookup2/1
|
|
* john/compiler/refactor-validator-type-management:
beam_validator: Clarify a comment
beam_validator: Make call argument validation stricter
beam_validator: Don't explode when building terms in receive
beam_validator: Improve 'binary' type tracking
beam_validator: Infer tuple element types
beam_validator: Tolerate the 'receive' hack in prim_eval
beam_validator: Track types by value rather than by register
beam_validator: Disregard 'none' on join
beam_validator: Handle is_number, and join(float,int) -> number
beam_validator: Treat is_nil as is_eq_exact with nil
beam_validator: Simplify get_element_type
beam_validator: Fix literal handling in meet/2
beam_validator: Use literals as keys in container (tuple) elements
beam_validator: Refactor try/catch handling, again
beam_validator: Refactor register initialization
beam_validator: Refactor stack allocation
beam_validator: Handle argument/return types for more functions
beam_validator: Don't forget last element when using put_tuple
beam_jump: Fail label of select_val is unsafe for move elimination
cerl_sets: Use maps:filter/2 in filter/2
|
|
|
|
There were some bad values returned if FIPS mode was enabled. The exclusion of
algorithms were not completly correct either.
|
|
* maint:
crypto: Remove assertion
crypto: Fail if FIPS mode is present but can't be enabled
crypto: Remove blowfish_SUITE.
crypto: Update crypto_SUITE checking of FIPS
|
|
This is not needed any more
|
|
|
|
The tests are a subset of the newer and larger crypto_SUITE.
|
|
The testing for not supported were missing in some cases
|
|
We used to cheat by checking if it were possible to meet the Given
and Required types, which caught the most common problems but
potentially let tuple element conflicts pass through.
This was a compromise to let the thing "work" while we were
refactoring the validator, but we can be a lot stricter now that
its type tracking capabilities approach those of the type
optimization pass.
|
|
Building terms with fragile contents is okay because the GC is
disabled during loop_rec, and the resulting term won't be reachable
from the root set afterwards.
ERL-862
|
|
|
|
This is possible now that we track types on a per-value basis, and
no longer need to care whether the source tuple's register has been
clobbered by the time we infer the type.
|
|
|
|
This is a rather subtle but important distinction. While tracking
types on a per-register basis is fairly effective, it forces us to
track which registers alias each other, and makes it tricky to infer
types over large blocks of code as instruction arguments may have
been clobbered between definition and inference.
Tracking types on a per-value basis makes us immune to these
problems.
|
|
* maint:
edoc: Print a helpful message if reading source file fails
|
|
* hasse/edoc/helpful_message/OTP-15605/ERL-841:
edoc: Print a helpful message if reading source file fails
|
|
The stronger compiler optimizations made the test case fail.
|
|
5239eb0c62a9 removed some optimizations in `sys_core_fold`, and
because of that two warnings are no longer emitted.
|
|
This reverts commit df130102cdeca8d35fec95a0c926fd1cfec54eab.
|
|
|
|
I have no idea how this escaped us for so long...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Consider the following code:
bme(Int) ->
TagInt = Int band 2#111,
Tag = case TagInt of
0 -> a; 1 -> b; 2 -> c; 3 -> d;
4 -> e; 5 -> f; 6 -> g; 7 -> h
end,
case Tag of
g -> expects_g(TagInt, Tag);
h -> expects_h(TagInt, Tag);
_ -> Tag = id(Tag), ok
end.
expects_g(6, Atom) -> Atom = id(g), ok.
expects_h(7, Atom) -> Atom = id(h), ok.
The type optimization pass would recognize that TagInt can only be
[0 .. 7], so the first 'case' would select_val over [0 .. 6] and swap
out the fail label with the block for 7.
A later optimization would merge this block with 'expects_h' in the
second case, as the latter is only reachable from the former.
... but this broke down when the move elimination optimization didn't
take the fail label of the first select_val into account. This caused it
believe that the only way to reach 'expects_h' was through the second
case when 'Tag' =:= 'h', which made it remove the move instruction
added in the first case, passing garbage to expects_h/2.
|
|
|
|
This should be slightly more efficient than converting to/from
lists for large sets.
|
|
OTP-15633
* siri/rsh-ssh/PR-1787:
Fix some missed comments about rsh
Document the restrictions on the -rsh command
Use ssh as the default remote shell
|
|
* solvip/stdlib/gen_statem/export-start-types:
Fix links within gen_statem doc
|
|
|
|
|
|
OTP-14831
|
|
* solvip/stdlib/gen_statem/export-start-types:
Create a gen_statem type for enter_loop options
gen_statem exports types related to starting & naming
|
|
|
|
* maint:
mnesia: Avoid raise in overload reports
|
|
* dgud/mnesia/overload-raise/ERIERL-310/OTP-15619:
mnesia: Avoid raise in overload reports
|
|
|
|
Add net and socket (modules) to the list of preloaded
modules (returned by the systools_make:preloaded/0
function, why?).
OTP-14831
|