aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2016-04-07Remove unused variables after code generationBjörn Gustavsson
The removal of instructions on the left side of a transformation is done while generating the code for the left side. Postpone removal of unused variables to a later, separate passes to allow more variables to be eliminated after the optimizations passes introduced in the previous commits.
2016-04-07Avoid rebuilding unchanged instructionsBjörn Gustavsson
In transformations such as: move S X0=x==0 | line Loc | call_ext Ar Func => \ line Loc | move S X0 | call_ext Ar Func we can avoid rebuilding the last instruction in the sequence by introducing a 'keep' instruction. Currently, there are only 13 transformations that are hit by this optimization, but most of them are frequently used.
2016-04-07Introduce a 'rename' instructionBjörn Gustavsson
Introduce a 'rename' instruction that can be used to optimize simple renaming with unchanged operands such as: get_tuple_element Reg P Dst => i_get_tuple_element Reg P Dst By allowing it to lower the arity of instruction, transformations such as the following can be handled: trim N Remaining => i_trim N All in all, currently 67 transformations can be optimized in this way, including some commonly used ones.
2016-04-07Simplify window management for the transformation engineBjörn Gustavsson
Generic instructions have a min_window field. Its purpose is to avoid calling transform_engine() when there are too few instructions in the current "transformation window" for a transformation to succeed. Currently it does not do much good since the window size will be decremented by one before being used. The reason for the subtraction is probably that in some circumstances in the past, the loader could read past the end of the BEAM module while attempting to fetch instructions to increase the window size. Therefore, it would not be safe to just remove the subtraction by one. The simplest and safest solution seems to always ensure that there are always at least TWO instructions when calling transform_engine(). That will be safe, as long as a BEAM module is always finished with an int_code_end/0 that is not involved in any transformation.
2016-04-07Eliminate allocation of variables in transform_engine()Björn Gustavsson
When an instruction with a variable number operands (such as select_val) is seen of the left side of a transformation, the 'next_arg' instruction will allocate a buffer to fit all variables and all operands will be copied into the buffer. Very often, the 'commit' instruction will never be reached because of a test or predicate failing or because of a short window; in that case, the variable buffer will be deallocated. Note that originally there were only few instructions with a variable number of operands, but now common operations such as tuple building also have a variable number of operands. To avoid those frequent allocations and deallocations, modify the 'next_arg' instruction to only save a pointer to the first of the "rest" arguments. Also move the deallocation of the instructions on the left side from the 'commit' instruction to the 'end' instruction to ensure that 'store_rest_args' will still work.
2016-04-06Refactor calls to transform_engine()Björn Gustavsson
We used to set last_op_next and last_op to NULL just in case. Setting last_op_next to causes a rescan of the instructions to find the last instruction in the chain, so we would want to avoid that unless really necessary.
2016-04-06ops.tab: Remove useless transformationBjörn Gustavsson
The transformation on the following line will do the job.
2016-04-06Merge branch 'ingela/ssl/config-signature-algs/OTP-13463'Ingela Anderton Andin
* ingela/ssl/config-signature-algs/OTP-13463: ssl: Remove default support for use of md5 in TLS 1.2 signature algorithms ssl: Add option signature_algs
2016-04-06ssl: Remove default support for use of md5 in TLS 1.2 signature algorithmsIngela Anderton Andin
2016-04-06ssl: Add option signature_algsIngela Anderton Andin
In TLS-1.2 The signature algorithm and the hash function algorithm used to produce the digest that is used when creating the digital signature may be negotiated through the signature algorithm extension RFC 5246. We want to make these algorithm pairs configurable. In connections using lower versions of TLS these algorithms are implicit defined and can not be negotiated or configured. DTLS is updated to not cause dialyzer errors, but needs to get a real implementation later.
2016-04-05Merge branch 'lukas/stdlib/error_logger_SUITE/OTP-13471'Lukas Larsson
* lukas/stdlib/error_logger_SUITE/OTP-13471: stdlib: Fix logfile testcase for hipelibs testrun
2016-04-05Merge branch 'waisbrot/remove-mod_include/PR-988/OTP-13445'Hans Nilsson
2016-04-05Merge branch 'FabioBatSilva/httpc-delete-body/PR-972/OTP-13383'Lars Thorsen
* FabioBatSilva/httpc-delete-body/PR-972/OTP-13383: inets: Add DELETE Body to client remove whitespaces
2016-04-05Merge branch 'legoscia/tls-dist-clean-shutdown/PR-962/OTP-13431'Ingela Anderton Andin
* legoscia/tls-dist-clean-shutdown/PR-962/OTP-13431: TLS distribution: shut down accept process cleanly
2016-04-04Merge tag 'OTP-18.3.1'Henrik Nord
=== OTP-18.3.1 === Changed Applications: - erts-7.3.1 - inets-6.2.1 - mnesia-4.13.4 Unchanged Applications: - asn1-4.0.2 - common_test-1.12 - compiler-6.0.3 - cosEvent-2.2 - cosEventDomain-1.2 - cosFileTransfer-1.2 - cosNotification-1.2.1 - cosProperty-1.2 - cosTime-1.2.1 - cosTransactions-1.3.1 - crypto-3.6.3 - debugger-4.1.2 - dialyzer-2.9 - diameter-1.11.2 - edoc-0.7.18 - eldap-1.2.1 - erl_docgen-0.4.2 - erl_interface-3.8.2 - et-1.5.1 - eunit-2.2.13 - gs-1.6 - hipe-3.15 - ic-4.4 - jinterface-1.6.1 - kernel-4.2 - megaco-3.18 - observer-2.1.2 - odbc-2.11.1 - orber-3.8.1 - os_mon-2.4 - ose-1.1 - otp_mibs-1.1 - parsetools-2.1.1 - percept-0.8.11 - public_key-1.1.1 - reltool-0.7 - runtime_tools-1.9.3 - sasl-2.7 - snmp-5.2.2 - ssh-4.2.2 - ssl-7.3 - stdlib-2.8 - syntax_tools-1.7 - test_server-3.10 - tools-2.8.3 - typer-0.9.10 - webtool-0.9.1 - wx-1.6.1 - xmerl-1.3.10 Conflicts: OTP_VERSION erts/emulator/test/save_calls_SUITE.erl erts/vsn.mk
2016-04-04Merge branch 'egil/os_mon/modernize-test'Björn-Egil Dahlberg
* egil/os_mon/modernize-test: Don't crash in end_per_testcase Eliminate use of doc and suite clauses Replace ?t:sleep/1 with ct:sleep/1 Replace use of test_server:format/2 with io:format/2 Eliminate use of test_server:fail/0,1 Eliminate use of ?config() macro Modernize use of timetraps Remove ?line macros
2016-04-04Update primary bootstrapBjörn Gustavsson
2016-04-04Merge branch 'bjorn/kernel/remove-deprecated/OTP-13449'Björn Gustavsson
* bjorn/kernel/remove-deprecated/OTP-13449: rpc: Remove functions deprecated in R12B
2016-04-04Merge branch 'bjorn/stdlib/clean-up-otp_internal'Björn Gustavsson
* bjorn/stdlib/clean-up-otp_internal: Remove information for functions removed in R13 and R14 Remove clauses for functions that have already been removed
2016-04-04Merge branch 'bjorn/erts/clang-opt'Björn Gustavsson
* bjorn/erts/clang-opt: Fix unsafe transformation of apply/3 with fixed arguments
2016-04-04Merge branch 'bjorn/cuddle-with-tests'Björn Gustavsson
* bjorn/cuddle-with-tests: inet_SUITE: Handle pointtopoint devices in getifaddrs/1 file_SUITE: Increase timetrap for large_write/1 gen_fsm_SUITE: Make abnormal1/1 stop failing gen_fsm_SUITE: Use timer:sleep/1 instead of ct:sleep/1 inet_SUITE: Handle {error,enoent} in simple_netns_open inet_SUITE: Handle missing SCTP support in simple_netns/1 asn1_SUITE: Remove temporary files file_name_SUITE: Improve handling of missing permission for link creation file_name_SUITE: Remove useless put/2 to process dictionary file_name_SUITE: Handle the case that HOMEPATH may not be set code_SUITE: Skip on_load_embedded/1 if no symlinks gen_sctp_SUITE: Skip most SCTP test cases on Solaris before 5.12 heart_SUITE: Increase timeout in restart/1 heart_SUITE: Use unique node names init_SUITE: Quote pathname that may contain a space gen_tcp_misc_SUITE: Clean up send_timeout{_active}/1 Clean up the determination of the hostname
2016-04-04Merge branch 'dgud/wx/type-error'Dan Gudmundsson
* dgud/wx/type-error: wx: Fix wxListCtrl:hitTest arguments and delivered results wx: Fix type error in wxMouseState record
2016-04-04wx: Fix wxListCtrl:hitTest arguments and delivered resultsDan Gudmundsson
May cause incompatibility for applications but the flags argument is out only in C++.
2016-04-04wx: Fix type error in wxMouseState recordDan Gudmundsson
severe typo
2016-04-04Merge branch 'egil/erts/fix-flatmap-get/OTP-13459'Björn-Egil Dahlberg
* egil/erts/fix-flatmap-get/OTP-13459: erts: Don't search for non-existing Map keys twice
2016-04-04Merge branch 'dcorbacho/dist_util_logs'Zandra
OTP-13458 * dcorbacho/dist_util_logs: Keep error reasons for some common distribution errors
2016-04-01Updated OTP versionOTP-18.3.1Erlang/OTP
2016-04-01Prepare releaseErlang/OTP
2016-04-01Merge branch 'sverker/erts/trap_exit-race/OTP-13452' into maint-18Erlang/OTP
* sverker/erts/trap_exit-race/OTP-13452: erts: Fix race for process_flag(trap_exit,true)
2016-04-01Merge branch 'rickard/proc-free-fix/OTP-13446' into maint-18Erlang/OTP
* rickard/proc-free-fix/OTP-13446: Fix bad refc management of process struct # Conflicts: # erts/emulator/beam/erl_process.c
2016-04-01Merge branch 'rickard/port-sig-dropped-fix/OTP-13424' into maint-18Erlang/OTP
* rickard/port-sig-dropped-fix/OTP-13424: Fix implementation of dropped signal to port
2016-04-01Merge branch 'dgud/mnesia/hang-sym-trans/OTP-13423' into maint-18Erlang/OTP
* dgud/mnesia/hang-sym-trans/OTP-13423: mnesia: Send mnesia_down messages to waiting transactions
2016-04-01Merge branch 'rickard/ethr-event-futex-wait-timeout/OTP-13420' into maint-18Erlang/OTP
* rickard/ethr-event-futex-wait-timeout/OTP-13420: Fix premature timeouts for ethread events on Linux
2016-04-01Merge branch 'rickard/last_calls/OTP-13418' into maint-18Erlang/OTP
* rickard/last_calls/OTP-13418: Unbreak process_info(Pid,last_calls)
2016-04-01Merge branch 'lukas/erts/fix_enomem_error_code/OTP-13419' into maint-18Erlang/OTP
* lukas/erts/fix_enomem_error_code/OTP-13419: erts: Create erl_crash.dump when out of memory
2016-04-01Merge branch 'ia/inets/bracket-option/OTP-13417' into maint-18Erlang/OTP
* ia/inets/bracket-option/OTP-13417: inets: Prepare for release inets: Mend ipv6_host_with_brackets option
2016-04-01erts: Fix race for process_flag(trap_exit,true)Sverker Eriksson
and a concurrent exit signal. We now actually guarantee that the process will not die from exit signal *after* the call to process_flag(trap_exit,true) has returned. The race is narrow and probably quite hard to observe even if you manage to provoke it. Has only been confirmed with the help of return trace and a sleep in send_exit_signal(). Solution: Seize status lock to prevent send_exit_signal() from reading an old status (without TRAP_EXIT) and then writing PENDING_EXIT after TRAP_EXIT has been set by process_flag_2().
2016-04-01Don't crash in end_per_testcaseBjörn-Egil Dahlberg
2016-04-01Eliminate use of doc and suite clausesBjörn-Egil Dahlberg
Those clause are obsolete and never used by common_test.
2016-04-01Replace ?t:sleep/1 with ct:sleep/1Björn-Egil Dahlberg
2016-04-01Replace use of test_server:format/2 with io:format/2Björn-Egil Dahlberg
2016-04-01Eliminate use of test_server:fail/0,1Björn-Egil Dahlberg
2016-04-01Eliminate use of ?config() macroBjörn-Egil Dahlberg
2016-04-01Modernize use of timetrapsBjörn-Egil Dahlberg
2016-04-01erts: Don't search for non-existing Map keys twiceBjörn-Egil Dahlberg
* For maps:get/2,3 and maps:find/2, searching for an immediate key, e.g. an atom, the search was performed twice if the key did not exist in the map.
2016-04-01Remove ?line macrosBjörn-Egil Dahlberg
2016-04-01Merge branch 'sa/specs-for-callbacks'Hans Bolinder
* sa/specs-for-callbacks: Add documentation about -specs for callbacks
2016-04-01Add documentation about -specs for callbacksStavros Aronis
2016-04-01rpc: Remove functions deprecated in R12BBjörn Gustavsson
2016-04-01Merge branch 'bjorn/kernel/doc'Björn Gustavsson
* bjorn/kernel/doc: code: Remove 'bad_path' error code from set_path/1 Update Kernel documentation