Age | Commit message (Collapse) | Author |
|
The removal of redundant bs_restore2 instructions is done easier
on the SSA format. Keep the rest of the optimizations, because
they are easier to do on the BEAM instructions.
|
|
As a preparation for replacing v3_codegen with a new code generator,
remove unsafe optimization passes. Especially the older compiler
passes have implicit assumptions about how the code is generated.
Remove the optimizations in beam_block (keep the code that creates
blocks) because they are unsafe. beam_block also calls
beam_utils:live_opt/1, which is unsafe.
Remove beam_type because it calls beam_utils:live_opt/1, and also
because it recalculates the number of heaps words and number of live
registers in allocation instructions, thus potentially hiding bugs in
other passes.
Remove beam_receive because it is unsafe.
Remove beam_record because it is the only remaining user
of beam_utils:anno_defs/1.
Remove beam_reorder because it makes much more sense to run it
as an early SSA-based optimization pass.
Remove the now unused functions in beam_utils:
anno_def/1
delete_annos/1
is_killed_block/2
live_opt/1
usage/3
Note that the following test cases will fail because of the
removed optimizations:
compile_SUITE:optimized_guards/1
compile_SUITE:bc_options/1
receive_SUITE:ref_opt/1
|
|
|
|
This will enable more optimizations.
|
|
Don't match exact BEAM instructions when trying to recognize
function_clause exceptions that should be replaced with a jump to the
func_info instruction. Instead, do a symbolic evaluation of the list
building code and see if the result is a list of the argument
registers.
While at it, also teach fix_block_1/2 to completely remove a test_heap
instruction before an exception generation instruction.
|
|
Smarter code generation means that beam_validator must
be smarter too. In the following example, beam_validator
must be able to infer that y0 refers to a map:
move x0 y0
test is_map L1 x0
%% Here the type for y0 must be 'map'.
|
|
|
|
The func_info instruction does not expect a stack frame. There will
be an assertion failure in the debug-compiled runtime system.
|
|
|
|
If we transfer state appropriately to labels that can't be reached,
the state could taint other labels.
|
|
Since the compiler will start optimizing more aggressively, beam_validator
must keep up and improve the recognization of tuples and maps.
|
|
The new code generator will more aggressively reuse registers,
so we must be more careful about updating the state for try/catch.
In particular, an "empty" try/catch that can't throw an
exception must not update the try/catch state.
|
|
|
|
Nicer to read and less confusion.
|
|
|
|
|
|
|
|
|
|
* maint:
crypto: Fail tests if crypto cannot start
|
|
* hans/crypto/cuddle_tests:
crypto: Fail tests if crypto cannot start
|
|
* maint:
ssh: prolong the timeout in ssh_dbg gen_server calls
|
|
|
|
* upstream/maint:
Require align
Add Erlang alignment regexps
|
|
OTP-15239
|
|
Optimize binary match from 10% up to 70x
|
|
|
|
(cherry picked from commit 1b36c8ff81e896f9aa172603962f838d980668a0)
|
|
|
|
|
|
* maint:
Fix compiler crash when compiling double receives
erts: Delete fd from poll-set when closing fd_driver port
|
|
bjorng/bjorn/compiler/double-receives/ERL-703/OTP-15235
Fix compiler crash when compiling double receives
|
|
|
|
Conflicts:
lib/inets/test/httpd_SUITE.erl
|
|
|
|
* maint-20:
inets: Remove 21 test case
Updated OTP version
Update release notes
Conflicts:
OTP_VERSION
lib/inets/doc/src/notes.xml
lib/inets/test/httpd_SUITE.erl
lib/inets/vsn.mk
otp_versions.table
|
|
A test case unrelated to the patch was accidentally added
when backporting the solution.
|
|
|
|
* ingela/inets/status-501/ERIERL-218/OTP-15215:
inets: Use status code 501 when no mod_* handles the request
|
|
|
|
Add logger:set_application_level/2
|
|
remove_message does not store any pointer to x0
|
|
|
|
maint-20
* ingela/inets/maint-20/status-501/ERIERL-218/OTP-15215:
inets: Prepare for release
inets: Use status code 501 when no mod_* handles the request
# Conflicts:
# lib/inets/test/httpd_SUITE.erl
# lib/inets/vsn.mk
|
|
remove_message just remove messages without writing to any register.
Compiler is already generating code like:
{get_tuple_element,{x,0},1,{x,0}}.
remove_message.
{jump,{f,6}}
That clearly uses x0 for other purposes.
|
|
|
|
The compiler would crash when compiling a function with two
receive statements.
https://bugs.erlang.org/browse/ERL-703
|
|
Conflicts:
lib/inets/test/httpd_SUITE.erl
|
|
|
|
* ingela/ssl/ERL-668/improve-err-msg/OTP-15234:
ssl: Improve error message
|
|
|