aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2018-08-17beam_bs: Remove optimizations that are easier done on SSA formatBjörn Gustavsson
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.
2018-08-17Don't run unsafe compiler passesBjörn Gustavsson
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
2018-08-17Simplify optimizations by introducing is_nil lateBjörn Gustavsson
2018-08-17beam_utils: Make is_tagged_tuple a pure testBjörn Gustavsson
This will enable more optimizations.
2018-08-17beam_except: Enhance recognition of function_clause exceptionsBjörn Gustavsson
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.
2018-08-17beam_validator: Infer the types of copies in a smarter wayBjörn Gustavsson
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'.
2018-08-17beam_validator: Improve merge of cons and literal listBjörn Gustavsson
2018-08-17beam_validator: Strengthen validation of func_infoBjörn Gustavsson
The func_info instruction does not expect a stack frame. There will be an assertion failure in the debug-compiled runtime system.
2018-08-17beam_validator: Allow get_tuple_element before dsetelementBjörn Gustavsson
2018-08-17beam_validator: Don't transfer state to labels that can't be reachedBjörn Gustavsson
If we transfer state appropriately to labels that can't be reached, the state could taint other labels.
2018-08-17beam_validator: Improve type analysis for tuplesBjörn Gustavsson
Since the compiler will start optimizing more aggressively, beam_validator must keep up and improve the recognization of tuples and maps.
2018-08-17beam_validator: Be more careful when updating try/catch stateBjörn Gustavsson
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.
2018-08-17beam_trim: Handle an empty list of instructionsBjörn Gustavsson
2018-08-17v3_core: Number argument variables in ascending orderBjörn Gustavsson
Nicer to read and less confusion.
2018-08-16ssh: Use the 'macs' tag in crypto:supports/0Hans Nilsson
2018-08-16ssh: Use the new crypto:supports/0 tag 'curves'Hans Nilsson
2018-08-16crypto: Try to generate ecdh for all crypto:curves()Hans Nilsson
2018-08-16crypto: Put curve list in CHans Nilsson
2018-08-16Merge branch 'maint'Hans Nilsson
* maint: crypto: Fail tests if crypto cannot start
2018-08-16Merge branch 'hans/crypto/cuddle_tests' into maintHans Nilsson
* hans/crypto/cuddle_tests: crypto: Fail tests if crypto cannot start
2018-08-16Merge branch 'maint'Hans Nilsson
* maint: ssh: prolong the timeout in ssh_dbg gen_server calls
2018-08-16Merge branch 'hans/ssh/cuddle_tests' into maintHans Nilsson
2018-08-16Merge remote-tracking branch 'upstream/maint'Dan Gudmundsson
* upstream/maint: Require align Add Erlang alignment regexps
2018-08-16Merge pull request #1728 from davidw/emacs-alignDan Gudmundsson
OTP-15239
2018-08-16Merge branch 'josevalim/jv-sb/PR-1803/OTP-15238' into masterLukas Larsson
Optimize binary match from 10% up to 70x
2018-08-16Merge branch 'maint'Lukas Larsson
2018-08-15fix double parenthesis and badly formatter <v> tagsMariano Guerra
(cherry picked from commit 1b36c8ff81e896f9aa172603962f838d980668a0)
2018-08-15ssh: prolong the timeout in ssh_dbg gen_server callsHans Nilsson
2018-08-15crypto: Fail tests if crypto cannot startHans Nilsson
2018-08-15Merge branch 'maint'Björn Gustavsson
* maint: Fix compiler crash when compiling double receives erts: Delete fd from poll-set when closing fd_driver port
2018-08-15Merge pull request #1927 from ↵Björn Gustavsson
bjorng/bjorn/compiler/double-receives/ERL-703/OTP-15235 Fix compiler crash when compiling double receives
2018-08-15inets: Prepare for releaseIngela Anderton Andin
2018-08-15inets: Use status code 501 when no mod_* handles the requestIngela Anderton Andin
Conflicts: lib/inets/test/httpd_SUITE.erl
2018-08-15Merge branch 'maint'Ingela Anderton Andin
2018-08-15Merge branch 'maint-20' into maintIngela Anderton Andin
* 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
2018-08-15inets: Remove 21 test caseIngela Anderton Andin
A test case unrelated to the patch was accidentally added when backporting the solution.
2018-08-15Merge branch 'maint'Ingela Anderton Andin
2018-08-15Merge branch 'ingela/inets/status-501/ERIERL-218/OTP-15215' into maintIngela Anderton Andin
* ingela/inets/status-501/ERIERL-218/OTP-15215: inets: Use status code 501 when no mod_* handles the request
2018-08-15Merge branch 'maint'Lukas Larsson
2018-08-15lukas/kernel/logger_set_app_lvl/PR-1843/OTP-15146Lukas Larsson
Add logger:set_application_level/2
2018-08-15Merge pull request #1928 from bettio/fix-remove_message_docBjörn Gustavsson
remove_message does not store any pointer to x0
2018-08-14Update release notesErlang/OTP
2018-08-14Merge branch 'ingela/inets/maint-20/status-501/ERIERL-218/OTP-15215' into ↵Erlang/OTP
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
2018-08-14remove_message does not store any pointer to x0Davide Bettio
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.
2018-08-14inets: Prepare for releaseIngela Anderton Andin
2018-08-14Fix compiler crash when compiling double receivesBjörn Gustavsson
The compiler would crash when compiling a function with two receive statements. https://bugs.erlang.org/browse/ERL-703
2018-08-14inets: Use status code 501 when no mod_* handles the requestIngela Anderton Andin
Conflicts: lib/inets/test/httpd_SUITE.erl
2018-08-14Merge branch 'maint'Ingela Anderton Andin
2018-08-14Merge branch 'ingela/ssl/ERL-668/improve-err-msg/OTP-15234' into maintIngela Anderton Andin
* ingela/ssl/ERL-668/improve-err-msg/OTP-15234: ssl: Improve error message
2018-08-14Merge branch 'maint'Ingela Anderton Andin