aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2016-09-05hipe: Refactor ra callbacks to accept context argMagnus Lång
This allows us to pass around the context data that hipe_regalloc_prepass needs cleanly, without using process dictionary or parameterised modules (like it was previous to this change).
2016-09-05hipe: Reuse liveness between regalloc iterationsMagnus Lång
This is sound because the liveness data structure only stores liveness info at basic block boundaries, and the rewrites that happen in TargetSpecific:check_and_rewrite/2 preserves all existing definitions and uses, and all new liveness intervals, belonging to newly introduced temporaries, are always local to a basic block, and thus do not show up in the liveout or livein sets for the basic block.
2016-09-05hipe: Add ra_partitioned to o1 and upMagnus Lång
ra_partitioned significantly speeds up register allocation of larger functions without affecting allocation quality negatively. This is the final change needed to make o1 suitable for compiling really large functions without choking.
2016-09-05hipe_regalloc_prepass: Change splitting heuristicMagnus Lång
The division into an initial pass that may introduce temps, and following passes that must not forces us to make the same heuristic decision during each of these passes. Thus, the splitting heuristic can't be based on the number of temporaries -- at least without excluding temporaries above SpillLimit.
2016-09-02hipe: Make sure prepass temps are below SpillLimitMagnus Lång
If temps introduced by hipe_regalloc_prepass end up above SpillLimit, the register allocators will not spill them. This constraint is unnecessarily limiting the allocators and might theoretically lead to unallocatable programs (more temps above SpillLimit alive at a time than there are physical registers).
2016-09-02hipe_regalloc_prepass: Rename coloring collisionsMagnus Lång
2016-09-02hipe_ppc: Add code rewrite RA callbacksMagnus Lång
These will not only be useful for hipe_regalloc_prepass, but also, after the introduction of a mk_move/2 (or similar) callback, for the purpose of range splitting. Since the substitution needed to case over all the instructions, a new module, hipe_ppc_subst, was introduced to the ppc backend.
2016-09-02hipe_sparc: Add code rewrite RA callbacksMagnus Lång
These will not only be useful for hipe_regalloc_prepass, but also, after the introduction of a mk_move/2 (or similar) callback, for the purpose of range splitting. Since the substitution needed to case over all the instructions, a new module, hipe_sparc_subst, was introduced to the sparc backend.
2016-09-02hipe_arm: Add code rewrite RA callbacksMagnus Lång
These will not only be useful for hipe_regalloc_prepass, but also, after the introduction of a mk_move/2 (or similar) callback, for the purpose of range splitting. Since the substitution needed to case over all the instructions, a new module, hipe_arm_subst, was introduced to the arm backend.
2016-09-02hipe_x86: Add code rewrite RA callbacksMagnus Lång
These will not only be useful for hipe_regalloc_prepass, but also, after the introduction of a mk_move/2 (or similar) callback, for the purpose of range splitting. Since the substitution needed to case over all the instructions, a new module, hipe_x86_subst, was introduced to the x86 backend. Due to differences in the 'jtab' field of a #jmp_switch{} between x86 and amd64, it regrettably needed to be duplicated to hipe_amd64_subst.
2016-09-02hipe: Remove defun_to_cfg/1 RA callbackMagnus Lång
Now that all backends do register allocation on a CFG directly and define the defun_to_cfg/1 callback as the identity function, it can be removed.
2016-09-02Add new sanity assertion to hipe_regalloc_prepassMagnus Lång
As the just_as_good_as assertion was loosened with the `NowRegs >= CheckRegs` check, it no longer verified that hipe_regalloc_prepass had not incorrectly labeled a temp as unallocatable. We add that behaviour back.
2016-09-02Simplify hipe_x86_ra_finalise:conv_ra_maplet/3Magnus Lång
2016-09-02hipe_x86: Simplify ra_postconditions is_mem_opndMagnus Lång
This is due to the improvements in hipe_temp_map, removing the need for duplicated logic in the backends.
2016-09-02hipe_x86: Fix pseudo_tailcall prettyprintingMagnus Lång
2016-09-02hipe_x86: Extra sanity assertionsMagnus Lång
2016-09-02hipe: clean up unnecessary catchesMagnus Lång
2016-09-02hipe: Remove temp reuse from call_funMagnus Lång
2016-09-02hipe: Add IG partitioning to hipe_regalloc_prepassMagnus Lång
2016-09-02hipe: Add hipe_regalloc_prepassMagnus Lång
hipe_regalloc_prepass speeds up register allocation by spilling any temp that is live over a call (which clobbers all register). In order to detect these, a new function was added to the target interface; defines_all_alloc/1, that takes an instruction and returns a boolean.
2016-09-02Merge branch 'sverker/hipe-performance-o1/PR-1154/OTP-13862'Sverker Eriksson
* sverker/hipe-performance-o1/PR-1154: hipe_sparc: Minimise CFG<->linear conversions hipe_ppc: Minimise CFG<->linear conversions hipe_arm: Minimise CFG<->linear conversions hipe_x86: Use lea instead of move+add hipe_arm: Improve peephole optimiser hipe_arm: Be resilient to crappy RTL hipe_ppc: Be resilient to crappy RTL hipe_sparc: Be resilient to crappy RTL hipe: Reuse liveness info for spillmin hipe_x86: Minimise CFG<->linear conversions hipe: Fix o0 and o1 hipe: Add o0 and o1 to tests hipe_rtl_binary:get_word_integer/4: Handle imms hipe_x86: Be resilient to crappy RTL hipe_x86: LSRA for SSE2
2016-09-02Merge branch 'maint'Sverker Eriksson
2016-09-02Merge branch 'sverker/hipe-sparc-19/PR-1148/OTP-13861' into maintSverker Eriksson
* sverker/hipe-sparc-19/PR-1148: Eliminate catch-all clause from two functions Increase the time limit used by the test suite
2016-09-02Merge branch 'bjorn/eliminate-sys_pre_expand/OTP-13856'Björn Gustavsson
* bjorn/eliminate-sys_pre_expand/OTP-13856: Remove sys_pre_expand xref: Eliminate use of sys_pre_expand debugger: Eliminate use of sys_pre_expand compiler: Eliminate use of sys_pre_expand shell_SUITE: Eliminate references to sys_pre_expand in comments qlc_pt: Simplify code because of updated erl_expand_records Teach erl_expand_records to translate module-less calls erl_internal: Add add_predefined_functions/1 cover: Remove always stale comment
2016-09-02Merge branch 'maint'Hans Bolinder
* maint: Fix documentation of an option of erl_tidy
2016-09-02Merge branch 'fenollp/syntax_tools/erl_tidy_option/PR-1151' into maintHans Bolinder
* fenollp/syntax_tools/erl_tidy_option/PR-1151: Fix documentation of an option of erl_tidy
2016-09-02Merge branch 'maint'Hans Bolinder
* maint: doc: Correct errors introduced by Editorial changes
2016-09-02Merge branch 'hasse/doc/fix_editorial_changes' into maintHans Bolinder
* hasse/doc/fix_editorial_changes: doc: Correct errors introduced by Editorial changes
2016-09-01Remove sys_pre_expandBjörn Gustavsson
The previous commits have made sys_pre_expand superfluous. Since sys_pre_expand is undocumented and unsupported it can be removed in a major release without prior deprecation. Also remove code in erl_parse that handles abstract code that has passed through sys_pre_expand. We considered deprecating sys_pre_expand just in case, but decided against it for the following reasons: - Anyone brave and knowledgeable enough to use sys_pre_expand should be able to cope with sys_pre_expand being removed. - If we kept it, but didn't test it anywhere in OTP, it could potentially stop working. So we would probably have to add some test cases.
2016-09-01xref: Eliminate use of sys_pre_expandBjörn Gustavsson
2016-09-01debugger: Eliminate use of sys_pre_expandBjörn Gustavsson
2016-09-01compiler: Eliminate use of sys_pre_expandBjörn Gustavsson
sys_pre_expand previously did a lot more work, for example, translating records and funs, but now is merely a grab bag of small transformations. Move those transformations to v3_core.
2016-09-01shell_SUITE: Eliminate references to sys_pre_expand in commentsBjörn Gustavsson
Make it clear that we test that the shell is not dependent on the compiler application being in the path.
2016-09-01qlc_pt: Simplify code because of updated erl_expand_recordsBjörn Gustavsson
erl_expand_records now adds "erlang:" to calls to BIFs, so we can simplify the code.
2016-09-01Teach erl_expand_records to translate module-less callsBjörn Gustavsson
As the next step in eliminating sys_pre_expand, teach erl_expand_records to handle calls without explicit module name. If such call refer to a BIF or imported function, add an explicit module name. That means that any subsequent pass will know that a call without a module name is always to a local function defined in the module.
2016-09-01erl_internal: Add add_predefined_functions/1Björn Gustavsson
The sys_pre_expand module used to do a lot more (translate records and funs, for example), but now it does very little. Most of the code is an identify transformation of the abstract format. The identity transformation part of the code must be maintained and kept correct when new forms are added to the abstract format. That adds to the maintance burden. It also adds (slightly) to compilation times. Therefore, we want to eliminate sys_pre_expand, moving all of its (non-identity) transformations to better places. As a preliminary first step, move the code that adds the pre-defined functions (such as module_info/0) to a new function in erl_internal.
2016-09-01cover: Remove always stale commentBjörn Gustavsson
The comment in the catch-all clause in munge_expr/2 will always be stale. There is no way it can be kept up to date. For example, 'eof' is listed, but 'eof' is a top-level form and is actually handled in the catch-all clause for munge/4.
2016-09-01Merge branch 'maint'Björn Gustavsson
* maint: beam_lib: Correct type for the abstract code chunk
2016-09-01beam_lib: Correct type for the abstract code chunkBjörn Gustavsson
The abstract_code chunk can also contain {eof,_}, {error,_}, and {warning,_} in addition to the abstract forms that make up the Erlang syntax proper.
2016-09-01doc: Correct errors introduced by Editorial changesHans Bolinder
Fix some older errors as well.
2016-09-01Merge branch 'maint'Dan Gudmundsson
* maint: observer: Fix error msg loop in table viewer
2016-09-01Merge branch 'dgud/observer/table-viewer-bug/ERL-237/OTP-13845' into maintDan Gudmundsson
* dgud/observer/table-viewer-bug/ERL-237/OTP-13845: observer: Fix error msg loop in table viewer
2016-09-01observer: Fix error msg loop in table viewerDan Gudmundsson
When observing mnesia table on remote node and connection to that node is lost, a loop of error messages occur if mnesia is not running on the observer node. ERL-237
2016-09-01Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Increase time limit of suites dialyzer: Remove a check that always fails dialyzer: Optimize an opaque type case
2016-09-01Merge branch 'hasse/dialyzer/fix_forms_to_type/OTP-13682' into maintHans Bolinder
* hasse/dialyzer/fix_forms_to_type/OTP-13682: dialyzer: Increase time limit of suites dialyzer: Remove a check that always fails dialyzer: Optimize an opaque type case
2016-09-01Merge branch 'maint'Hans Bolinder
* maint: Fix xmllint-warnings
2016-09-01Merge branch 'hasse/doc/fix_xmllint_warnings' into maintHans Bolinder
* hasse/doc/fix_xmllint_warnings: Fix xmllint-warnings
2016-08-31Fix documentation of an option of erl_tidyPierre Fenoll
2016-08-31Merge branch 'maint'Dan Gudmundsson
* maint: Emacs: make tags unit test more robust Emacs: extend support for compile options Function instead of lambda in advice Enable tag completion in emacs erlang shell
2016-08-31Emacs: make tags unit test more robustJohan Claesson