Age | Commit message (Collapse) | Author | |
---|---|---|---|
2016-11-23 | compiler: Warn for repeated identical map keys | Björn-Egil Dahlberg | |
A map expression such as, #{'a' => 1, 'b' => 2, 'a' => 3} will produce a warning for the repeated key 'a'. | |||
2016-11-18 | Merge branch 'mm/stdlib/ord-docs/PR-1242' | Björn Gustavsson | |
* mm/stdlib/ord-docs/PR-1242: Document the ordering used in ordsets and orddicts | |||
2016-11-18 | Document the ordering used in ordsets and orddicts | Michal Muskala | |
Right now the exact order of elements is not specified, yet many programs rely on the ordering being the obvious one - erlang term order. It is only beneficial to make this an explicit part of the documentation. | |||
2016-11-18 | Merge branch 'bjorn/compiler/guards/PR-1232/OTP-14042' | Björn Gustavsson | |
* bjorn/compiler/guards/PR-1232/OTP-14042: compile_SUITE: Make sure that guards are optimized beam_dead: Remove redundant 'or' instruction beam_dead: Remove redundant 'bif' instructions Add test using LFE-generated Core Erlang modules Remove beam_bool v3_kernel: Generate optimized code for guards sys_core_fold: Remove unnecessary calls to opt_bool_case/1 record_SUITE: Strengthen test of record access in guards | |||
2016-11-18 | compile_SUITE: Make sure that guards are optimized | Björn Gustavsson | |
Guards should use the more efficient 'test' instructions, not 'bif' instructions. Add a test to make sure that the optimizations don't degrade. We do have to keep an exception list for functions where we can't replace all 'bif' calls with 'test' instructions. We try to keep that list a short as practically possible. | |||
2016-11-18 | beam_dead: Remove redundant 'or' instruction | Björn Gustavsson | |
In practice, this optimization will only apply to contrived guards that are almost never used in real applications. The only reason we add this optimization is to help approach the goal of zero tolerance for 'bif' instructions instead of 'test' instructions in guards. | |||
2016-11-18 | beam_dead: Remove redundant 'bif' instructions | Björn Gustavsson | |
A 'bif' or 'gc_bif' instruction is redundant if it has the same failure label as a 'jump' instruction immediately following it. There is no need to test for liveness of the destination register, because the code at the failure label cannot safely assume that the destination register is initialized. See the comments in the code for further details. In practice, this optimization will only apply to contrived guards that are almost never used in real applications. The only reason we add this optimization is to help approach the goal of zero tolerance for 'bif' instructions instead of 'test' instructions in guards. | |||
2016-11-18 | Add test using LFE-generated Core Erlang modules | Björn Gustavsson | |
Ensure that correct (not necessarily optimal) code is generated for Core Erlang code not originating from v3_core. | |||
2016-11-18 | Remove beam_bool | Björn Gustavsson | |
The guard optimizations in v3_kernel has removed the need for beam_bool. | |||
2016-11-18 | v3_kernel: Generate optimized code for guards | Björn Gustavsson | |
The compiler produces poor code for complex guard expressions with andalso/orelse. Here is an example from the filename module: -define(IS_DRIVELETTER(Letter),(((Letter >= $A) andalso (Letter =< $Z)) orelse ((Letter >= $a) andalso (Letter =< $z)))). skip_prefix(Name, false) -> Name; skip_prefix([L, DrvSep|Name], DrvSep) when ?IS_DRIVELETTER(L) -> Name; skip_prefix(Name, _) -> Name. beam_bool fails to simplify the code for the guard, leaving several 'bif' instructions: {function, skip_prefix, 2, 49}. {label,48}. {line,[{location,"filename.erl",187}]}. {func_info,{atom,filename},{atom,skip_prefix},2}. {label,49}. {test,is_ne_exact,{f,52},[{x,1},{atom,false}]}. {test,is_nonempty_list,{f,52},[{x,0}]}. {get_list,{x,0},{x,2},{x,3}}. {test,is_nonempty_list,{f,52},[{x,3}]}. {get_list,{x,3},{x,4},{x,5}}. {bif,'=:=',{f,52},[{x,1},{x,4}],{x,6}}. {test,is_ge,{f,50},[{x,2},{integer,65}]}. {bif,'=<',{f,52},[{x,2},{integer,90}],{x,7}}. {test,is_eq_exact,{f,51},[{x,7},{atom,false}]}. {test,is_ge,{f,50},[{x,2},{integer,97}]}. {bif,'=<',{f,52},[{x,2},{integer,122}],{x,7}}. {jump,{f,51}}. {label,50}. {move,{atom,false},{x,7}}. {label,51}. {bif,'=:=',{f,52},[{x,7},{atom,true}],{x,7}}. {test,is_eq_exact,{f,52},[{x,6},{atom,true}]}. {test,is_eq_exact,{f,52},[{x,7},{atom,true}]}. {move,{x,5},{x,0}}. return. {label,52}. return. We can add optimizations of guard tests to v3_kernel to achive a better result: {function, skip_prefix, 2, 49}. {label,48}. {line,[{location,"filename.erl",187}]}. {func_info,{atom,filename},{atom,skip_prefix},2}. {label,49}. {test,is_ne_exact,{f,51},[{x,1},{atom,false}]}. {test,is_nonempty_list,{f,51},[{x,0}]}. {get_list,{x,0},{x,2},{x,3}}. {test,is_nonempty_list,{f,51},[{x,3}]}. {get_list,{x,3},{x,4},{x,5}}. {test,is_eq_exact,{f,51},[{x,1},{x,4}]}. {test,is_ge,{f,51},[{x,2},{integer,65}]}. {test,is_lt,{f,50},[{integer,90},{x,2}]}. {test,is_ge,{f,51},[{x,2},{integer,97}]}. {test,is_ge,{f,51},[{integer,122},{x,2}]}. {label,50}. {move,{x,5},{x,0}}. return. {label,51}. return. Looking at the STDLIB application, there were 112 lines of BIF calls in guards that beam_bool failed to convert to test instructions. This commit eliminates all those BIF calls. Here is how I counted the instructions: $ PATH=$ERL_TOP/bin:$PATH erlc -I ../include -I ../../kernel/include -S *.erl $ grep "bif,'[=<>]" *.S | grep -v f,0 dets.S: {bif,'=:=',{f,547},[{x,4},{atom,read_write}],{x,4}}. dets.S: {bif,'=:=',{f,547},[{x,5},{atom,saved}],{x,5}}. dets.S: {bif,'=:=',{f,589},[{x,5},{atom,read}],{x,5}}. . . . $ grep "bif,'[=<>]" *.S | grep -v f,0 | wc 112 224 6765 $ | |||
2016-11-18 | Merge branch 'maint' | Björn Gustavsson | |
* maint: Run dialyzer as part of the travis script Correct tar_SUITE:unicode/1 | |||
2016-11-18 | Merge branch 'bjorn/cuddle-with-tests' into maint | Björn Gustavsson | |
* bjorn/cuddle-with-tests: Correct tar_SUITE:unicode/1 | |||
2016-11-18 | Merge branch 'maint' | Ingela Anderton Andin | |
2016-11-18 | Merge branch 'ingela/httpc/keep-alive-https/OTP-14041' into maint | Ingela Anderton Andin | |
* ingela/httpc/keep-alive-https/OTP-14041: inets: httpc - do not send absolute URIs over TLS tunnels | |||
2016-11-18 | Merge branch 'dgud/stdlib/rand-fixup-spec' | Dan Gudmundsson | |
* dgud/stdlib/rand-fixup-spec: Fixup of specs in rand | |||
2016-11-18 | Merge branch 'maint' | Ingela Anderton Andin | |
2016-11-18 | Merge branch 'ingela/odbc/mac' into maint | Ingela Anderton Andin | |
* ingela/odbc/mac: odbc: Remove support for old MACs | |||
2016-11-18 | odbc: Remove support for old MACs | Ingela Anderton Andin | |
Change configure to skip odbc for old MACs, the change in PR-1227 is not backwards compatible with old MACs, and we do not see a need to continue support for such old versions. However it is still possible to make it work on such machines using the --with-odbc configure option. | |||
2016-11-17 | Correct tar_SUITE:unicode/1 | Björn Gustavsson | |
Make sure that we always test the "+fnu" option on all systems. It seems that it was not tested in our daily builds, since they are run non-interactively. Make sure that we sort the list of names in do_unicode/1. Otherwise the test would only work in "+fnl" mode because the list would only contain one element. | |||
2016-11-17 | Merge branch 'elbrujohalcon/expand-sup-doc/PR-1233/OTP-14037' | Siri Hansen | |
* elbrujohalcon/expand-sup-doc/PR-1233/OTP-14037: Expand on the behavior of supervisors | |||
2016-11-17 | Fixup of specs in rand | Dan Gudmundsson | |
Fixed bad specs introduced in commit ff568b5e818. Also suppress improper_lists warnings. | |||
2016-11-17 | Merge branch 'dgud/mnesia/type-specs' | Dan Gudmundsson | |
* dgud/mnesia/type-specs: Add basic spec and types | |||
2016-11-17 | Add basic spec and types | Dan Gudmundsson | |
2016-11-17 | Merge branch 'richcarl/mnesia/mnesia-ext-dont-wrap-cont/PR-1240/OTP-14039' | Dan Gudmundsson | |
* richcarl/mnesia/mnesia-ext-dont-wrap-cont/PR-1240/OTP-14039: Don't wrap continuations from mnesia_ext backends | |||
2016-11-17 | Merge branch 'jj1bdx/stdlib/rand-jump/PR-1235/OTP-14038' | Dan Gudmundsson | |
* jj1bdx/stdlib/rand-jump/PR-1235/OTP-14038: Add jump functions to rand module | |||
2016-11-15 | Expand on the behavior of supervisors | Brujo Benavides | |
Add additional details on the behavior of supervisors when reaching maximum restart intensity, as stated by @rvirding at [Medium](https://goo.gl/XhwpSL) | |||
2016-11-14 | Merge branch 'maint' | Hans Nilsson | |
2016-11-14 | Merge branch 'hans/ssh/cuddle_tests_maint' into maint | Hans Nilsson | |
2016-11-14 | Merge branch 'tokitori/stdlib/optimize-sets/PR-1212/OTP-14035' | Björn Gustavsson | |
* tokitori/stdlib/optimize-sets/PR-1212/OTP-14035: Speed up sets:add_element/2 and sets:del_element/2 | |||
2016-11-14 | Merge branch 'maint' | Ingela Anderton Andin | |
2016-11-14 | Merge remote-tracking branch 'github/pr/1227' into maint | Ingela Anderton Andin | |
* github/pr/1227: Update configure to work better on Mac | |||
2016-11-14 | Add jump functions to rand module | Kenji Rikitake | |
Jump functions returns the state after performing jump calculation to a rand module internal state, which is equivalent to perform a large number of calls of calculating new states for XorShift*/+ algorithms. This commit add jump functions for exsplus and exs1024 algorithms, and a wrapper function jump/1. The wrapper function will cause error with reason "not_implemented" if the jump function for the algorithm is not implemented. This commit adds following new functionalities: - Add new functions rand:jump/0 and rand:jump/1 - Add the member jump to type alg_handler(), a fun for performing the jump function - Add jump functions for exsplus, equivalent to 2^64 calls - Add jump functions for exs1024, equivalent to 2^512 calls - Revise seed_put/1, seed/1, seed/2 See <https://github.com/erlang/otp/pull/1235#discussion_r86950557> - Add dummy jump function for exs64 calling erlang:error(not_implemented) - Add jump function test cases as follows: * Add Common Test group reference_jump * Add tests for jump/0 to reference_jump_procdict/1 * Rename tests for jump/1 to reference_jump_state/1 * Rename gen_jump/1 to gen_jump_1/1 * Add Common Tests reference_jump_procdict and reference_jump_state to the group reference_jump - Add jump function documentation This commit also changes the Copyright year for Kenji Rikitake's code from 2015 to 2015-2016. | |||
2016-11-13 | sys_core_fold: Remove unnecessary calls to opt_bool_case/1 | Björn Gustavsson | |
The fixpoint iteration added in 05130e48 makes those calls superfluous. | |||
2016-11-13 | record_SUITE: Strengthen test of record access in guards | Björn Gustavsson | |
2016-11-11 | Merge branch 'siri/appups-20.0' | Siri Hansen | |
* siri/appups-20.0: Update sasl/test/test_lib.hrl with recent versions of kernel and stdlib Update appups in kernel, stdlib and sasl for OTP-20 | |||
2016-11-11 | Merge branch 'tsloughter/mod_app/PR-1222/OTP-14029' | Siri Hansen | |
* tsloughter/mod_app/PR-1222/OTP-14029: Accept default value of 'start_phases' and 'mod' in .app | |||
2016-11-11 | Don't wrap continuations from mnesia_ext backends | Richard Carlsson | |
Continuations returned from mnesia_ext backends were originally wrapped with the backend module, but that was a remnant of the earliest implementation, and is not actually needed, since Mnesia already knows what the table storage type is when it applies the continuation. When mnesia_ext was ported to OTP 19, the wrapper got changed to use the table type alias instead of the module, which triggered an error in the mnesia_eleveldb backend. This patch removes the wrapping completely. | |||
2016-11-11 | Merge branch 'bjorn/compiler/tests' | Björn Gustavsson | |
* bjorn/compiler/tests: guard_SUITE: Add more test of guards compile_SUITE: Smoke test and cover more of v3_kernel_pp | |||
2016-11-11 | guard_SUITE: Add more test of guards | Björn Gustavsson | |
2016-11-11 | compile_SUITE: Smoke test and cover more of v3_kernel_pp | Björn Gustavsson | |
2016-11-11 | ssh: Adjust inet buffers if too small | Hans Nilsson | |
2016-11-11 | ssh: Change order on next_event actions in ssh_connection_handler | Hans Nilsson | |
2016-11-11 | ssh: Testcase polishing | Hans Nilsson | |
2016-11-11 | Merge branch 'maint' | Peter Andersson | |
2016-11-11 | Merge branch 'peppe/common_test/fix_default_gl/ERL-279/OTP-13973' into maint | Peter Andersson | |
* peppe/common_test/fix_default_gl/ERL-279/OTP-13973: Fix problem with printouts to incorrect parent group leader OTP-13973 | |||
2016-11-10 | ssh: exported ssh_dbg:shrink_bin and ssh_dbg:wr_record/3 for debugging purposes | Hans Nilsson | |
2016-11-10 | Merge branch 'maint' | Sverker Eriksson | |
# Conflicts: # lib/hipe/llvm/hipe_rtl_to_llvm.erl | |||
2016-11-10 | Merge branch 'margnus1/hipe_llvm39_bugs/PR-1237/OTP-14027/OTP-14028' into maint | Sverker Eriksson | |
* margnus1/hipe_llvm39_bugs/PR-1237: hipe_rtl_to_llvm: Constants for bits per byte/word hipe_llvm: Work around LLVM 3.9 sdesc bug hipe_llvm: Fix incorrect atom alignment assumption | |||
2016-11-10 | Merge branch 'maint' | Ingela Anderton Andin | |
2016-11-10 | ssl: Use SHA2 for signing ECC certs if possible | Ingela Anderton Andin | |
ECC certs should preferably use SHA2, this is what we want to be testing. Also assembling of all available test suites must consider TLS version. |