aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2012-10-09Introduce the mandatory beam_a and beam_z passesBjörn Gustavsson
Introduce the mandary beam_a pass that will be run directly after code generation, and the mandatory beam_z pass that will be run just before beam_asm. Since these passes surround the optimizations, beam_a can (for example) do instruction renaming to simplify the optimization passes and beam_z can undo those renamings.
2012-10-09compile: Fix bug in selection of passesBjörn Gustavsson
2012-10-09beam_receive: Optimize receives using refs created by spawn_monitor/{1,3}Björn Gustavsson
2012-10-09compile: Give a friendler error message if a parse transform cannot be foundBjörn Gustavsson
Don't throw the parse tree in the face of the user. OTP-8707
2012-10-09beam_jump: Don't move a block which can be entered via a fallthroughBjörn Gustavsson
beam_jump moves short code sequences ending in an instruction that causes an exception to the end of the function, in the hope that a jump around the moved blocked can be replaced with a fallthrough. Therefore, moving a block that is entered via a fallthrough defeats the purpose of the optimization. Also add two more test cases for the beam_receive module to ensure that all lines are still covered.
2012-10-09beam_jump: Fix broken optimizationBjörn Gustavsson
A test instruction with the same target label as jump immediately followed it was supposed to be removed, but it was kept anyway. Fix that optimization, but also make sure that the test instruction is kept if the test instruction may have side effects (such as a bit syntax matching instruction). While at it, make the code cleaner by breaking it up into two clauses and don't remove the jump instruction if it is redudant (removal of redundant jump instructions is already handled in another place).
2012-10-09v3_kernel: Fix match code for matched out segment size in multiple clausesBjörn Gustavsson
When matched variable is used as a size field in multiple clauses, as in: foo(<<L:8,A:L>>) -> A; foo(<<L:8,A:L,B:8>>) -> {A,B}. the match tree would branch out before the segment that used the matched-out variable (in this example, the tree would branch out before the matching of A:L). That happens because the pattern matching compilator did not take variable substitutions into account when grouping clauses that match the same value. That is, the generated code would work similarly to this code: foo(<<L:8,T/binary>>) -> case T of <<A:L>> -> A; _ -> case T of <<A:L,B:8>> -> %% A matched out again! {A,B} end end. We would like the matching to work more like: foo(<<L,A:L,T/binary>>) -> case T of <<>> -> A; <<B:8>> -> {A,B} end. Fix the problem by taking the substitutions into account when grouping clauses that match out the same value.
2012-10-09Improve binary matching of literalsBjörn Gustavsson
The bs_match_string instruction is used to speed up matching of binary literals. For example, given this source code: foo1(<<1,2,3>>) -> ok. The matching part of the code will look like: {test,bs_start_match2,{f,1},1,[{x,0},0],{x,0}}. {test,bs_match_string,{f,3},[{x,0},24,{string,[1,2,3]}]}. {test,bs_test_tail2,{f,3},[{x,0},0]}. Nice. However, if we do a simple change to the source code: foo2(<<1,2,3>>) -> ok; foo2(<<>>) -> error. the resulting matching code will look like (sligthly simplified): {test,bs_start_match2,{f,4},1,[{x,0},0],{x,0}}. {test,bs_get_integer2,{f,7},1,[{x,0},{integer,8},1,Flags],{x,1}}. {test,is_eq_exact,{f,8},[{x,1},{integer,1}]}. {test,bs_match_string,{f,6},[{x,0},16,{string,[2,3]}]}. {test,bs_test_tail2,{f,6},[{x,0},0]}. {move,{atom,ok},{x,0}}. return. {label,6}. {bs_restore2,{x,0},{atom,start}}. {label,7}. {test,bs_test_tail2,{f,8},[{x,0},0]}. That is, matching of the first byte is not combined into the bs_match_string instruction that follows. Fix this problem by allowing a bs_match_string instruction to be used if all clauses will match either the same integer literal or the empty binary.
2012-10-09v3_codegen: Combine adjacent bs_match_string instructionsBjörn Gustavsson
In modules with huge functions with many bs_match_string instructions, we can speed up the compilation by combining adjacent bs_match_strings instruction in v3_codegen (as opposed to in beam_block where we used to do it). For instance, on my computer the v3_codegen became more than twice as fast when compiling the re_testoutput1_split_test module in the STDLIB test suites.
2012-10-09Merge branch 'maint'Lukas Larsson
* maint: Add comment about eproviderfailedinit error Increase sbct for win64 as block alignment is 16
2012-10-09Merge branch 'lukas/erts/bucket_mask_fix/OTP-10374' into maintLukas Larsson
* lukas/erts/bucket_mask_fix/OTP-10374: Add comment about eproviderfailedinit error Increase sbct for win64 as block alignment is 16
2012-10-09Add comment about eproviderfailedinit errorLukas Larsson
2012-10-09Increase sbct for win64 as block alignment is 16Lukas Larsson
2012-10-09beam_bool: Recognize more safe optimizationsBjörn Gustavsson
The optimizer of boolean expressions can often reject optimizations that it does not recognize as safe. For instance, if a boolean expression was preceded by 'move' instructions that saved x registers into y registers, it would almost certainly reject the optimization because it required the y register not be used in the code that follows. Fix this problem by allowing identical 'move' instructions that assing to y registers at the beginning of the old and the optimized code. While at it, correct the spelling of "preceding".
2012-10-09beam_utils: Correct usage calculations for GC BIFs in blocksBjörn Gustavsson
The usage calculation only looked at the allocation in GC BIFs, not at the source and destination registers. Also, if there is a failure label, make sure that we test whether the register can be used there.
2012-10-09beam_utils:live_opt/1: Correct liveness calculation for 'try'Björn Gustavsson
The liveness at the failure label should be ignored, because if there is an exception, all x registers will be killed.
2012-10-09beam_utils: Extend live_opt/1 to recalculate live registers in allocsBjörn Gustavsson
The code generator uses conservative liveness information. Therefore the number of live registers in allocation instructions (such as test_heap/2) may be too high. Use the actual liveness information to lower the number of live register if it's too high. The main reason we want to do this is to enable more optimizations that depend on liveness analysis, such as the beam_bool and beam_dead passes.
2012-10-09beam_utils: Check liveness in catches and try/catch blocksBjörn Gustavsson
Less conservative liveness analysis allows more optimizations to be applied (such as the ones in beam_bool).
2012-10-09v3_codegen: Clarify code generation for binary constructionBjörn Gustavsson
Add some comments to make the code generation for binary construction somewhat clearer. Also get rid of the cg_bo_newregs/2 function that serves no useful purpose. (It was probably intended to undo the effect of cg_live/2, but note that the value passed to cg_bo_newregs/2 has not passed through cg_live/2.)
2012-10-09v3_codegen: Clean up comments and remove out-commented codeBjörn Gustavsson
2012-10-09v3_codegen: Don't duplicate the functionality of cg_reg_arg/2Björn Gustavsson
2012-10-08test_server: Let start_node/3 utilize scalefactorBjörn-Egil Dahlberg
* test_server_node:start_node/3 now uses timetrap_scale_factor for timeouts (peer nodes)
2012-10-08test_server: Refactor timetrap_scale_factor/0Björn-Egil Dahlberg
2012-10-08Merge branch 'egil/inets/remove-tracing-in-tests'Björn-Egil Dahlberg
* egil/inets/remove-tracing-in-tests: inets: Remove dbg tracing from testcases
2012-10-08Merge branch 'egil/remove-unused-files'Björn-Egil Dahlberg
* egil/remove-unused-files: Remove unused files from old native dns resolver
2012-10-08Merge branch 'sze/improve-interoperability-SSH-clients'Henrik Nord
* sze/improve-interoperability-SSH-clients: Improve interoperability with SSH clients OTP-10475
2012-10-08Merge branch 'jn/ets-match-pattern-export-type'Henrik Nord
* jn/ets-match-pattern-export-type: Export ets:match_pattern/0 type Conflicts: lib/stdlib/src/ets.erl OTP-10472
2012-10-08Under Unix enable TCP_NODELAY to disable Nagel's socket algorithmAndy Richards
Under Unix enable TCP_NODELAY to disable Nagel's socket algorithm (Removes ~40ms delay on Redhat ES 6).
2012-10-08Fix the contract of erl_ddll:format_error/1Hans Bolinder
The bug in the contract of erl_ddll:format_error_int/1 in R15B that was copied to R16B (OTP-9862) has been fixed.
2012-10-08Set new peeled off SCTP socket to nonblocking socketJonas Falkevik
Peeloff feature of SCTP association creates a new socket which is not set to nonblocking. Function for receving data is shared with udp which has a default loop when reading packets which is set to 5. Calling the receive function more then once, is fine as long as there are more data to receive or socket are nonblocking. Set new peeled off socket to be nonblocking to prevent a erlang vm hangup.
2012-10-08SCTP test case with socket active options once and trueJonas Falkevik
Test case for testing socket option {active, true} after association is peeled off.
2012-10-08Merge branch 'hb/stdlib/opaque_warnings/OTP-10436'Hans Bolinder
* hb/stdlib/opaque_warnings/OTP-10436: Fix Dialyzer warnings
2012-10-05Merge branch 'sverk/code-load-refactor-later-op'Sverker Eriksson
* sverk/code-load-refactor-later-op: erts: Fix faulty lock check assert erts: Refactor naming regarding code_write_permission erts: Refactor tracing to use erts_schedule_thr_prgr_later_op erts: Allow thr_prgr_later_op to reschedule erts: Refactor code loading to use erts_schedule_thr_prgr_later_op erts: Remove some compiler warnings
2012-10-05Merge branch 'ia/ssl/controlling-process-on-listen-socket/OTP-10447'Ingela Anderton Andin
* ia/ssl/controlling-process-on-listen-socket/OTP-10447: ssl: Improve #sslsocket{} API ssl: It is now possible to call controlling_process on a listen socket, same as in gen_tcp.
2012-10-05Have supervisor send errors up the chainTomas Pihl
If a child fails to start, supervisor relies upon error_logger which does not work when IO is inhibited. Instead pass the error up the chain and let someone else use a proper Reason for any possible printouts.
2012-10-05Improve interoperability with SSH clientsStefan Zegenhagen
This patch fixes a few problems of the SSH shell server that affect the interoperability with SSH clients in widespread use. First problem is that, whenever a channel_request message is received with want_reply=true, the reply ends up being sent to the servers channel id, not the clients channel id. This causes the client to terminate the connection. The easiest solution to the problem appears to be a new function in ssh_connection_manager.erl that translates the servers channel id before sending the reply (in the same manner as other functions do it). Second problem is in ssh_cli.erl. When an SSH client sends a window_change request between PTY allocation and starting the shell (which appears to happen with some clients), ssh_cli.erl crashes because #state.buf is yet 'undefined'. Allocating an empty buffer at PTY allocation time solves the problem. Affected SSH clients: - all clients based on SSH-2.0-TrileadSSH2Java_213 (problem #1) - SSH Term Pro (problem #2)
2012-10-05ts_run: Always turn on timetrap scaling when starting common_testBjörn Gustavsson
Scaling timetraps depending on cover, debug-compiled emulator and so on is built-in to the test_server. Therefore, {multiply_timetraps,Scale} should not be set (it would multiply the timeout value twice). Only {scale_timetraps,true} needs to be set, and it must be set unconditionally as the feature tests in test_server:timetrap_scale_factor() may not return the correct scale factor until the test_server node and test cases have been started (for example, there is no cover server running).
2012-10-05Fix Dialyzer warningsHans Bolinder
Opaque types need to be exported.
2012-10-04Merge branch 'ia/ssh/sending-large-data-and-eof/OTP-10467'Ingela Anderton Andin
* ia/ssh/sending-large-data-and-eof/OTP-10467: ssh: Make test case platform independant ssh: ssh_connection:channel_data() and send_eof() now return {error, closed} for closed or invalid channels. ssh: Ensure that all data is sent before ssh:send returns. ssh: add test suite for testing channel send/receive behavior.
2012-10-04Merge branch 'ia/ssl/sslv2-test'Ingela Anderton Andin
* ia/ssl/sslv2-test: ssl: Better test to determine if sslv2 is supported by openssl
2012-10-03ssh: Make test case platform independantIngela Anderton Andin
The test case interrupted_send did not work on all platforms. Also ct-ify the test suite
2012-10-03ssh: ssh_connection:channel_data() and send_eof() now return {error, closed} ↵Daniel Goertzen
for closed or invalid channels. ssh_connection:handle_msg(#ssh_msg_channel_close...) will now cause any send() that was in progress to immediately return {error,closed}.
2012-10-03ssh: Ensure that all data is sent before ssh:send returns.Daniel Goertzen
2012-10-03ssh: add test suite for testing channel send/receive behavior.Daniel Goertzen
2012-10-03inets: Remove dbg tracing from testcasesBjörn-Egil Dahlberg
2012-10-03Merge branch 'gp/make_erlang_mode_elpa_friendly'Henrik Nord
* gp/make_erlang_mode_elpa_friendly: Make erlang-mode more compatible with package.el OTP-10465
2012-10-03Fix release_handler:find_script so it can read regexp in appupsSiri Hansen
2012-10-03Merge branch 'maint'Henrik Nord
2012-10-03Merge branch 'sa/dialyzer-fix-r15b02' into maintHenrik Nord
* sa/dialyzer-fix-r15b02: Fix a crash in race condition detection Remove old untested experimental extension Respect {plt_check,false} option when using dialyzer:run/1 Fix handling of tuple set remote types appearing in tuple sets OTP-10464
2012-10-03Merge branch 'bjorn/test_server/fix-test-cases'Björn Gustavsson
* bjorn/test_server/fix-test-cases: Provided better information when the test cases fail Remove the useless test_server_line_SUITE test suite test_server_SUITE: Remove the undefined_functions/1 test case