aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2017-10-11Optimize a catch whose return value is ignoredBjörn Gustavsson
Rewrite a catch expression like this: catch side_effect(), ... to: try side_effect() catch _:_ -> ok end, ... A try/catch is more efficient since no stack trace will be built when an exception occurs.
2017-10-11Do the receive optimization in the presence of try/catchBjörn Gustavsson
Improve the receive optimization to be able to handle code such as this: Ref = make_ref(), try side_effect() catch _:_ -> ok end, receive %% Clauses that all match Ref. . . . end
2017-10-11Optimize try/catch that ignores the return valueBjörn Gustavsson
If a try/catch is used to ignore the potential exception caused by some expression with a side effect such as: try side_effect() catch _Class:_Reason -> ok end, . . . the generated code will be wasteful: try YReg TryLabel %% call side_effect() here try_end Yreg jump GoodLabel TryLabel: try_case YReg %% try_case has set up registers as follows: %% x(0) -> error | exit | throw %% x(1) -> reason %% x(2) -> raw stack trace data GoodLabel: %% This code does not use any x registers. There will be two code paths that both end up at GoodLabel, and the try_case instruction will set up registers that are never used. We can do better by replacing try_case with try_end to obtain this code: try YReg TryLabel %% call side_effect() here try_end Yreg jump GoodLabel TryLabel: try_end YReg GoodLabel: The jump optimizer (beam_jump) can further optimize this code like this: try YReg TryLabel %% call side_effect() here TryLabel: try_end YReg
2017-10-09Slightly speed up try/catchBjörn Gustavsson
The try_end and try_case instructions are implemented the same way (try_case is translated to try_end by the loader). We can do better than that. We know that try_case will only be executed when an exception has been caught. Therefore, we know that x(0) is the non-value and that x(1) through x(3) need to be shifted down to x(0) through x(2). There is no need to test x(0) before shifting down. try_end does not need the register shifting code at all.
2017-10-09Merge branch 'bjorn/erts/pack-with-opcode/OTP-14325'Björn Gustavsson
OTP-14327 OTP-14340 * bjorn/erts/pack-with-opcode/OTP-14325: Pack operands for combined instructions into the instruction word beam_makeops: Use named arguments for the code generation functions Optimize packing for "optional use" operands beam_makeops: Print the instruction name for fatal packing errors Introduce a syntax for marking operands as "optional use" beam_makeops: Refactor parsing of specific instructions Optimize instruction prefetch Pack operands into the instruction word Use 32-bits pointers to C code Move LD flags for hipe from Makefile.in to configure.in beam_disasm: Correct printing of y registers ops.tab: Slightly optimize badmatch on a Y register macros.tab: Fix assertion in SET_I_REL()
2017-10-09Pack operands for combined instructions into the instruction wordBjörn Gustavsson
The operands for the first part of a combined instruction (the entry point following the OpCase() label) can safely be packed into the instruction word. This commit will make each of the following instructions one word shorter: bs_context_to_binary_x i_band_xcjtd i_bs_get_binary_all_reuse_xft i_bs_get_integer_imm_xWtftx i_bs_get_integer_small_imm_xWftx i_bs_init_bits_fail_xjtx i_bs_init_bits_fail_yjtx i_bs_init_bits_fail_heap_sIjtx i_bs_init_bits_heap_WItx i_bs_init_fail_xjtx i_bs_init_fail_yjtx i_bs_init_fail_heap_sIjtx i_bs_init_heap_WItx i_bs_start_match2_xfttx i_bs_start_match2_yfttx i_element_xjsd i_element_yjsd i_fast_element_xjId i_fast_element_yjId i_increment_xWtd i_increment_yWtd i_jump_on_val_xfIW i_jump_on_val_yfIW i_jump_on_val_zero_xfI i_jump_on_val_zero_yfI i_minus_xxjtd i_plus_xxjtd i_plus_xyjtd i_put_tuple_xI i_put_tuple_yI i_rem_xxjtd i_select_tuple_arity_xfI i_select_tuple_arity_yfI i_select_tuple_arity2_xfAA i_select_tuple_arity2_yfAA i_select_val2_xfcc i_select_val2_yfcc i_select_val_bins_xfI i_select_val_bins_yfI i_select_val_lins_xfI i_select_val_lins_yfI
2017-10-09beam_makeops: Use named arguments for the code generation functionsBjörn Gustavsson
The number of arguments has become unwieldy.
2017-10-05Merge branch 'maint'Rickard Green
* maint: Updated OTP version Update release notes Update version numbers
2017-10-05Merge branch 'maint-19' into maintRickard Green
* maint-19: Updated OTP version Update release notes Update version numbers Conflicts: OTP_VERSION erts/doc/src/notes.xml erts/vsn.mk lib/compiler/doc/src/notes.xml lib/compiler/vsn.mk otp_versions.table
2017-10-05Updated OTP versionOTP-19.3.6.3Erlang/OTP
2017-10-05Update release notesErlang/OTP
2017-10-05Update version numbersErlang/OTP
2017-10-05Merge branch 'sverker/bad-dist-msg-bug/ERIERL-80/OTP-14661' into maint-19Erlang/OTP
* sverker/bad-dist-msg-bug/ERIERL-80/OTP-14661: erts: Fix bug when detecting bad dist message Add distribution_SUITE:bad_dist_ext_size
2017-10-05Merge branch 'sverker/19/on_load-on_load-bug/OTP-14612' into maint-19Erlang/OTP
* sverker/19/on_load-on_load-bug/OTP-14612: erts: Fix 'on_load' tracing bug for modules with -on_load code_SUITE:on_load_trace_on_load
2017-10-05Merge branch 'sverker/19/binary_to_atom-utf8-crash/ERL-474/OTP-14590' into ↵Erlang/OTP
maint-19 * sverker/19/binary_to_atom-utf8-crash/ERL-474/OTP-14590: erts: Fix crash in binary_to_atom/term for invalid utf8
2017-10-05Merge branch 'rickard/timer-sid-bug/OTP-14548' into maint-19Erlang/OTP
* rickard/timer-sid-bug/OTP-14548: Fix scheduler id field in timers
2017-10-05Merge branch ↵Erlang/OTP
'john/compiler/fail-labels-in-blocks-otp-19/ERIERL-48/OTP-14522' into maint-19 * john/compiler/fail-labels-in-blocks-otp-19/ERIERL-48/OTP-14522: compiler: Fix live regs update on allocate in validator Take fail labels into account when determining liveness in block ops
2017-10-05Merge branch 'lukas/erts/beam-emu-vars'Lukas Larsson
* lukas/erts/beam-emu-vars: erts: Add makefile target to check emu register allocation
2017-10-05Merge pull request #1573 from RaimoNiskanen/raimo/crypto/rand-cachedRaimo Niskanen
Rand plugin for cached strong crypto bytes OTP-13370
2017-10-05Optimize packing for "optional use" operandsBjörn Gustavsson
Operands that are marked with a "?" are not always used when an instruction is executed. Enhance the packing algorithm to place optional use operands into the instruction word even they are not the first operand (as long as the total instruction size stays the same). Here are the instructions that will be packed differently because of this change: allocate_heap t I t? allocate_heap_zero t I t? test_heap I t? i_bs_get_integer_8 x f? x i_bs_get_integer_16 x f? x i_bs_get_integer_32 x f? x
2017-10-05beam_makeops: Print the instruction name for fatal packing errorsBjörn Gustavsson
Having the instruction name available in the functions that implement packing also simplifies debugging.
2017-10-05Introduce a syntax for marking operands as "optional use"Björn Gustavsson
Introduce a syntax to mark an operand that is not always used when an instrution is executed. Example of such operands are the fail label for is_nil or the number of live registers for an allocate instruction. Use a question mark to annotate optional use: is_nil f? xy allocate t t?
2017-10-05beam_makeops: Refactor parsing of specific instructionsBjörn Gustavsson
2017-10-05Optimize instruction prefetchBjörn Gustavsson
2017-10-05Pack operands into the instruction wordBjörn Gustavsson
On 64-bit machines where the C code is always at address below 4Gb, pack one or more operands into the instruction word.
2017-10-05Use 32-bits pointers to C codeBjörn Gustavsson
On a 64-bit machine, we only need 32 bits to store a pointer to the C code that implements a BEAM instruction. Refactor the code to only use the lower 32 bits of each instruction word, and take care to preserve the high 32 bits.
2017-10-05Move LD flags for hipe from Makefile.in to configure.inBjörn Gustavsson
We want the flags to be available for other tests in configure.in.
2017-10-05beam_disasm: Correct printing of y registersBjörn Gustavsson
2017-10-05Merge branch 'lukas/erts/poll-thread/OTP-14346'Lukas Larsson
* lukas/erts/poll-thread/OTP-14346: erts: Update +IOt and msacc docs
2017-10-05ops.tab: Slightly optimize badmatch on a Y registerBjörn Gustavsson
2017-10-05macros.tab: Fix assertion in SET_I_REL()Björn Gustavsson
9a50a5d5fc1 changed the update of I, but forgot to update the preceding assertion.
2017-10-05Merge pull request #1567 from ↵Björn Gustavsson
bjorng/bjorn/stdlib/wildcard-escaping/ERL-451/OTP-14577 Implement escaping of special characters in wildcards
2017-10-04Implement escaping of special characters in wildcardsBjörn Gustavsson
Allow characters with special meaning to be escaped using \ (which must be writen as \\ in a string). That allows matching of filenames containing characters that are special in wildcards. This is an incompatible change, but note that the use of backslashes in wildcards would already work differently on Windows and Unix. Take for example this call: filelib:wildcard("a\\b") On Windows, filelib:wildcard/1 would look for a directory named "a", and a file or directory named "b" inside it. On Unix, filelib:wildcard/1 would look for a file named "a\\b". With this commit applied, filelib:wildcard/1 will look for a file named "ab" on both Windows and Unix. https://bugs.erlang.org/browse/ERL-451
2017-10-04Merge branch 'maint'Hans Nilsson
2017-10-04Merge branch 'hans/crypto/evp_asym_crypto/OTP-14446' into maintHans Nilsson
2017-10-04crypto: ifdef of EVP for old cryptolibs (< 1.0.0)Hans Nilsson
2017-10-04crypto: disable tests of non-working assymetric ciphersHans Nilsson
ECDSA and DSA (DSS) public/private encryption/decryption does not work
2017-10-04crypto: Added pkey_crypt_nif from PR838Hans Nilsson
Testcases for ECDSA and DSA encrypt/decrypt and some other adaptions
2017-10-04Merge branch 'maint'Hans Nilsson
2017-10-04Merge branch 'hans/ssh/cuddle_tests' into maintHans Nilsson
2017-10-03ssh: Use cipher=none and mac=none in benchmarks againHans Nilsson
2017-10-03ssh: Put ssh_property_test_SUITE back in test/MakefileHans Nilsson
2017-10-03Merge branch 'maint'Hans Nilsson
2017-10-03Merge branch 'hans/ssh/ssh_dbg_hostkey/OTP-14658' into maintHans Nilsson
2017-10-03ssh: ssh_dbg reports cryptolib infoHans Nilsson
2017-10-03ssh: enable host key debugging in ssh_dbgHans Nilsson
2017-10-03ssh: Make host key checking more debug friendlyHans Nilsson
2017-10-03Merge branch 'maint'Hans Nilsson
* maint: Updated OTP version Prepare release Fix zlib merge snafu ssh: fix broken printouts ssh: exclude aes_gcm if peer is OpenSSH 6.2 (known bug) Conflicts: OTP_VERSION
2017-10-03Merge branch 'maint-20' into maintHans Nilsson
* maint-20: Updated OTP version Prepare release Fix zlib merge snafu ssh: fix broken printouts ssh: exclude aes_gcm if peer is OpenSSH 6.2 (known bug)
2017-10-02Merge branch 'maint'Sverker Eriksson