aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2018-01-29Merge branch 'maint'Sverker Eriksson
2018-01-29Merge branch 'sverker/ets-match_spec_run-spec/OTP-14889' into maintSverker Eriksson
2018-01-29Merge PR-1685 from sverker/sverker/hipe-verify-gcsafe OTP-14900Sverker Eriksson
Make hipe compile option verify_gcsafe the default
2018-01-29Merge branch 'bjorn/compiler/integer-encoding'Björn Gustavsson
* bjorn/compiler/integer-encoding: Speed up misc_SUITE:integer_encoding/1 beam_asm: Encode big numbers as literals
2018-01-29Merge branch 'maint'Hans Nilsson
* maint: ssh: Disable test failing if docker command exists ssh: Skeleton of build scripts for DropBear image ssh: Can use DropBear SSH dockers ssh: Remove duplicate test cases from ssh_to_openssh_SUITE ssh: Add more tests ssh: Change the default list of ssh and ssl version images ssh: Enable building openssh 0.9.8[a-l] ssh: Add LibreSSL to compat tests
2018-01-29Merge branch 'hans/ssh/docker_compat_tests/OTP-14194' into maintHans Nilsson
* hans/ssh/docker_compat_tests/OTP-14194: ssh: Disable test failing if docker command exists ssh: Skeleton of build scripts for DropBear image ssh: Can use DropBear SSH dockers ssh: Remove duplicate test cases from ssh_to_openssh_SUITE ssh: Add more tests ssh: Change the default list of ssh and ssl version images ssh: Enable building openssh 0.9.8[a-l] ssh: Add LibreSSL to compat tests
2018-01-26Merge branch 'maint'Ingela Anderton Andin
2018-01-26Merge branch 'ingela/ssl/no-dsa-libressl' into maintIngela Anderton Andin
* ingela/ssl/no-dsa-libressl: ssl: Check OpenSSL version for DSS (DSA) support
2018-01-26ssh: Disable test failing if docker command existsHans Nilsson
This test is just to get a marking in test result listings where a docker system is installed
2018-01-26ssh: Skeleton of build scripts for DropBear imageHans Nilsson
2018-01-26ssh: Can use DropBear SSH dockersHans Nilsson
2018-01-26Speed up misc_SUITE:integer_encoding/1Björn Gustavsson
misc_SUITE:integer_encoding/1 was written to make sure that big integers were encoding correctly in a reasonable amount of time. Now that beam_asm will encode big integers as literals, we can reduce the scope of integer_encode/1. That will make it significantly faster, especially when cover is running.
2018-01-26Merge branch 'maint'Peter Andersson
2018-01-26Fix skip_groups option in combination with all suites in test specPeter Andersson
2018-01-26beam_asm: Encode big numbers as literalsBjörn Gustavsson
Numbers that clearly are not smalls can be encoded as literals. Conservatively, we assume that integers whose absolute value is greater than 1 bsl 128 are bignums and that they can be encoded as literals. Literals are slightly easier for the loader to handle than huge integers.
2018-01-26Merge pull request #1691 from bjorng/bjorn/compiler/local-cseBjörn Gustavsson
Do local common sub expression elimination (CSE)
2018-01-26Merge pull request #1690 from bjorng/bjorn/compiler/binary-matching/OTP-14774Björn Gustavsson
Do some minor optimizations of binary matching
2018-01-25ssh: Remove duplicate test cases from ssh_to_openssh_SUITEHans Nilsson
2018-01-25ssh: Add more testsHans Nilsson
2018-01-25ssh: Change the default list of ssh and ssl version imagesHans Nilsson
2018-01-25ssh: Enable building openssh 0.9.8[a-l]Hans Nilsson
2018-01-25ssh: Add LibreSSL to compat testsHans Nilsson
2018-01-25Merge branch 'ingela/DTLS-supported'Ingela Anderton Andin
* ingela/DTLS-supported: ssl: Fix typo dtls: Add DTLS handling to utility functions ssl: Document enhancment ssl: Document DTLS
2018-01-25ssl: Fix typoIngela Anderton Andin
2018-01-25ssl: Check OpenSSL version for DSS (DSA) supportIngela Anderton Andin
LibreSSL-2.6.3 dropped DSS (DSA) support
2018-01-25Merge branch 'dgud/wx/fix-driver-usage'Dan Gudmundsson
* dgud/wx/fix-driver-usage: wx: open_port doesn't allow 0 terminated strings anymore
2018-01-25beam_type: Optimize away unnecessary test_unit instructionsBjörn Gustavsson
Optimize away unnecessary test_unit instructions that verify that binaries are byte-aligned. In a tight loop, eliminating an instruction can have a small but measurable improvement of the execution time.
2018-01-25beam_type: Refactor simplify_basic/2 and friendsBjörn Gustavsson
Separate the simplification of instructions from updating of the type data base.
2018-01-24Merge branch 'maint'Raimo Niskanen
Conflicts: lib/stdlib/src/gen_statem.erl
2018-01-24Merge branch 'raimo/stdlib/optimize-gen_statem' into maintRaimo Niskanen
* raimo/stdlib/optimize-gen_statem: Optimize plain call response time Correct typo in design principles for gen_statem
2018-01-24Merge branch 'maint'Ingela Anderton Andin
2018-01-24Merge branch 'ingela/ssl/record-version-check/OTP-14892' into maintIngela Anderton Andin
* ingela/ssl/record-version-check/OTP-14892: ssl: Add record version sanity check
2018-01-24Merge branch 'maint'Sverker Eriksson
2018-01-24Merge branch 'sverker/hipe-load-fixing/OTP-14891' into maintSverker Eriksson
2018-01-24Optimize matching of empty binariesBjörn Gustavsson
Extend an existing optimization in beam_dead to avoid creating a match context when matching an empty binary.
2018-01-24Apply common subexpression elimination in blocksBjörn Gustavsson
Eliminate repeated evaluation of guard BIFs and building of cons cells in blocks. This optimization is applicable in more places than might be expected, because code generation for binaries and record can generate common sub expressions not visible in the original source code. For example, consider this function: make_binary(Term) -> Bin = term_to_binary(Term), Size = byte_size(Bin), <<Size:32,Bin/binary>>. The compiler inserts a call to byte_size/2 to calculate the size of the binary being built: {function, make_binary, 1, 2}. {label,1}. {line,...}. {func_info,{atom,t},{atom,make_binary},1}. {label,2}. {allocate,0,1}. {line,...}. {call_ext,1,{extfunc,erlang,term_to_binary,1}}. {line,...}. {gc_bif,byte_size,{f,0},1,[{x,0}],{x,1}}. %Present in original code. {line,...}. {gc_bif,byte_size,{f,0},2,[{x,0}],{x,2}}. %Inserted by compiler. {bs_add,{f,0},[{x,2},{integer,4},1],{x,2}}. {bs_init2,{f,0},{x,2},0,2,{field_flags,[]},{x,2}}. {bs_put_integer,{f,0},{integer,32},1,{field_flags,[unsigned,big]},{x,1}}. {bs_put_binary,{f,0},{atom,all},8,{field_flags,[unsigned,big]},{x,0}}. {move,{x,2},{x,0}}. {deallocate,0}. return. Common sub expression elimination (CSE) eliminates the second call to byte_size/2: {function, make_binary, 1, 2}. {label,1}. {line,...}. {func_info,{atom,t},{atom,make_binary},1}. {label,2}. {allocate,0,1}. {line,...}. {call_ext,1,{extfunc,erlang,term_to_binary,1}}. {line,...}. {gc_bif,byte_size,{f,0},1,[{x,0}],{x,1}}. {move,{x,1},{x,2}}. {bs_add,{f,0},[{x,2},{integer,4},1],{x,2}}. {bs_init2,{f,0},{x,2},0,2,{field_flags,[]},{x,2}}. {bs_put_integer,{f,0},{integer,32},1,{field_flags,[unsigned,big]},{x,1}}. {bs_put_binary,{f,0},{atom,all},8,{field_flags,[unsigned,big]},{x,0}}. {move,{x,2},{x,0}}. {deallocate,0}. return. Note: A possible future optimization would be to include binary construction instructions in blocks. If that is done, the {move,{x,1},{x,2}} instruction could also be eliminated.
2018-01-24Merge pull request #1682 from bjorng/bjorn/optimize-unbuilt-stacktraceBjörn Gustavsson
Don't build a stacktrace if it's only passed to erlang:raise/3
2018-01-24Merge branch 'raimo/stdlib/gen-bench-fsm-vs-statem'Raimo Niskanen
* raimo/stdlib/gen-bench-fsm-vs-statem: Dodge divide by zero Introduce gen_statem vs gen_fsm benchmark Remove test suite warning
2018-01-24Correct bug in beam_block:opt/2Björn Gustavsson
The folling sequence in a block: {move,{x,1},{x,2}}. {move,{x,2},{x,2}}. would be incorrectly rewritten to: {move,{x,2},{x,2}}. (Which in turn would be optimized away a little bit later.)
2018-01-24Correct unsafe optimizations in beam_blockBjörn Gustavsson
When attempting to eliminate the move/2 instruction in the following code: {bif,self,{f,0},[],{x,0}}. {move,{x,0},{x,1}}. . . . {put_tuple,2,{x,1}}. {put,{atom,ok}}. {put,{x,0}}. beam_block would produce the following unsafe code: {bif,self,{f,0},[],{x,1}}. . . . {put_tuple,2,{x,1}}. {put,{atom,ok}}. {put,{x,1}}. It is unsafe because the tuple is self-referential. The following code: {put_list,{y,6},nil,{x,4}}. {move,{x,4},{x,5}}. {put_list,{y,1},{x,5},{x,5}}. . . . {put_tuple,2,{x,6}}. {put,{x,4}}. {put,{x,5}}. would be incorrectly transformed to: {put_list,{y,6},nil,{x,5}}. {put_list,{y,1},{x,5},{x,5}}. . . . {put_tuple,2,{x,6}}. {put,{x,5}}. {put,{x,5}}. (Both elements in the built tuple get the same value.)
2018-01-23stdlib: Indent example codeSverker Eriksson
2018-01-23stdlib: Fix spec for match_spec_run/2Sverker Eriksson
Matching can be done on any terms.
2018-01-23Merge branch 'maint'Hans Bolinder
* maint: kernel: Correct contracts and a bug in group_history stdlib: Correct contracts dialyzer: Optimize handling of a lot of warnings Conflicts: lib/kernel/src/erl_boot_server.erl
2018-01-23ssl: Add record version sanity checkIngela Anderton Andin
2018-01-23beam_validator: Validate building of tuplesBjörn Gustavsson
Make sure that there is the correct number of put/1 instructions following put_tuple/2. Also make it illegal to reference the register for the tuple being built in a put/1 instruction. That is, beam_validator will now issue a diagnostice for the the following code: {put_tuple,1,{x,0}}. {put,{x,0}}.
2018-01-22kernel: Correct contracts and a bug in group_historyHans Bolinder
2018-01-22stdlib: Correct contractsHans Bolinder
2018-01-22dialyzer: Optimize handling of a lot of warningsHans Bolinder
If the number of warnings is huge the '--'/2 operator is slow.
2018-01-22Don't build a stacktrace if it's only passed to erlang:raise/3Björn Gustavsson
Consider the following function: function({function,Name,Arity,CLabel,Is0}, Lc0) -> try %% Optimize the code for the function. catch Class:Error:Stack -> io:format("Function: ~w/~w\n", [Name,Arity]), erlang:raise(Class, Error, Stack) end. The stacktrace is retrieved, but it is only used in the call to erlang:raise/3. There is no need to build a stacktrace in this function. We can avoid the building if we introduce an instruction called raw_raise/3 that works exactly like the erlang:raise/3 BIF except that its third argument must be a raw stacktrace.
2018-01-22Merge branch 'maint'Björn Gustavsson
* maint: ErLLVM: Preserve precise BEAM tailcall semantics observer: Fix change accum Remove double calls observer: Don't crash for late messages observer: Optimize tv tab for many tables