Age | Commit message (Collapse) | Author |
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
The transformation on the following line will do the job.
|
|
* 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
|
|
|
|
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.
|
|
* lukas/stdlib/error_logger_SUITE/OTP-13471:
stdlib: Fix logfile testcase for hipelibs testrun
|
|
|
|
* FabioBatSilva/httpc-delete-body/PR-972/OTP-13383:
inets: Add DELETE Body to client
remove whitespaces
|
|
* legoscia/tls-dist-clean-shutdown/PR-962/OTP-13431:
TLS distribution: shut down accept process cleanly
|
|
=== 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
|
|
* 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
|
|
|
|
* bjorn/kernel/remove-deprecated/OTP-13449:
rpc: Remove functions deprecated in R12B
|
|
* bjorn/stdlib/clean-up-otp_internal:
Remove information for functions removed in R13 and R14
Remove clauses for functions that have already been removed
|
|
* bjorn/erts/clang-opt:
Fix unsafe transformation of apply/3 with fixed arguments
|
|
* 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
|
|
* dgud/wx/type-error:
wx: Fix wxListCtrl:hitTest arguments and delivered results
wx: Fix type error in wxMouseState record
|
|
May cause incompatibility for applications but the flags argument is
out only in C++.
|
|
severe typo
|
|
* egil/erts/fix-flatmap-get/OTP-13459:
erts: Don't search for non-existing Map keys twice
|
|
OTP-13458
* dcorbacho/dist_util_logs:
Keep error reasons for some common distribution errors
|
|
|
|
|
|
* sverker/erts/trap_exit-race/OTP-13452:
erts: Fix race for process_flag(trap_exit,true)
|
|
* rickard/proc-free-fix/OTP-13446:
Fix bad refc management of process struct
# Conflicts:
# erts/emulator/beam/erl_process.c
|
|
* rickard/port-sig-dropped-fix/OTP-13424:
Fix implementation of dropped signal to port
|
|
* dgud/mnesia/hang-sym-trans/OTP-13423:
mnesia: Send mnesia_down messages to waiting transactions
|
|
* rickard/ethr-event-futex-wait-timeout/OTP-13420:
Fix premature timeouts for ethread events on Linux
|
|
* rickard/last_calls/OTP-13418:
Unbreak process_info(Pid,last_calls)
|
|
* lukas/erts/fix_enomem_error_code/OTP-13419:
erts: Create erl_crash.dump when out of memory
|
|
* ia/inets/bracket-option/OTP-13417:
inets: Prepare for release
inets: Mend ipv6_host_with_brackets option
|
|
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().
|
|
|
|
Those clause are obsolete and never used by common_test.
|
|
|
|
|
|
|
|
|
|
|
|
* 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.
|
|
|
|
* sa/specs-for-callbacks:
Add documentation about -specs for callbacks
|
|
|
|
|
|
* bjorn/kernel/doc:
code: Remove 'bad_path' error code from set_path/1
Update Kernel documentation
|