aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe
AgeCommit message (Collapse)Author
2017-03-16hipe: Add module computing basic blocks weightsMagnus Lång
hipe_bb_weights computes basic block weights by using the branch probability predictions as the coefficients in a linear equation system. This linear equation system is then solved using Gauss-Jordan Elimination. The equation system representation is picked to be efficient with highly sparse data. During triangelisation, the remaining equations are dynamically reordered in order to prevent the equations from growing in the common case, preserving the benefit of the sparse equation representation. In the case that the input is very big, hipe_bb_weights automatically falls back to a rough approximation in order to keep compile times under control.
2017-03-16hipe: Add branch prediction accessor ra callbacksMagnus Lång
Adds a new register allocator callback Target:branch_preds(Instr, Context) which, for a control flow instruction Instr, returns a list of tuples {Target, Probability} for each label name Target that Instr may branch to. Probability is a float between 0.0 and 1.0 and corresponds to the predicted probability that control flow branches to the corresponding target. The probabilities may sum to at most 1.0 (rounding errors aside). Note that a sum less than 1.0 is valid.
2017-03-16hipe: Add range splitter restore_reuseMagnus Lång
hipe_restore_reuse is a simplistic range splitter that splits temps that are forced onto the stack by being live over call instructions. In particular, it attempts to avoid cases where there are several accesses to such stack allocated temps in straight-line code, uninterrupted by any calls. In order to achieve this it splits temps between just before the first access(es) and just after the last access(es) in such straight-line code groups. The hipe_restore_reuse pass is controlled by a new option ra_restore_reuse. ra_restore_reuse is added to o1.
2017-03-16hipe: Add basic range splitting ra callbacksMagnus Lång
In addition to the temporary name rewriting that hipe_regalloc_prepass does, range splitters also need to be able to insert move instructions, as well as inserting new basic blocks in the control flow graph. The following four callbacks are added for that purpose: * Target:mk_move(Src, Dst, Context) Returns a move instruction from the temporary (not just register number) Src to Dst. * Target:mk_goto(Label, Context) Returns a unconditional control flow instruction that branches to the label with name Label. * Target:redirect_jmp(Instr, ToOld, ToNew, Context) Modifies the control flow instruction Instr so that any control flow that would go to a label with name ToOld instead goes to the label with name ToNew. * Target:new_label(Context) Returns a fresh label name that does not belong to any existing block in the current function, and is to be used to create a new basic block in the control flow graph by calling Target:update_bb/4 with this new name.
2017-03-16hipe: Add basic_edge_cases test caseMagnus Lång
Two tests are added, primarily aimed at the range splitters. * test_float_spills, which exercises the rare case of high floating point register pressure, including spill slot move coalescing. * test_infinite_loops, which tests that various infinite loops are properly compiled and do contain reduction tests (otherwise they would permanently hog their scheduler and not notice being sent an exit signal).
2017-03-16hipe: Extract disjoint sets to its own moduleMagnus Lång
2017-03-16hipe_x86_subst: Fix bug with zero-arity #fp_unop{}Magnus Lång
2017-03-14Merge branch 'maint'Rickard Green
* maint: Updated OTP version Prepare release Conflicts: OTP_VERSION lib/typer/doc/src/notes.xml lib/typer/vsn.mk
2017-03-14Prepare releaseErlang/OTP
2017-03-14Merge branch 'hasse/hipe/remove_work_around'Hans Bolinder
* hasse/hipe/remove_work_around: hipe: Remove work around for Dialyzer bug
2017-03-13Merge branch 'maint'Rickard Green
* maint: Fix xml warnings in old release notes
2017-03-13Fix xml warnings in old release notesRickard Green
2017-03-13hipe: Remove work around for Dialyzer bugHans Bolinder
The bug in Dialyzer is fixed in commit 5ac2943.
2017-03-09Merge PR-1360 from margnus1/hipe-codegen/OTP-14261Sverker Eriksson
HiPE: Various small code cleanups and codegen improvements
2017-03-06hipe_amd64: Add missing makefile dependencyMagnus Lång
2017-03-06hipe_x86_assemble: 32-bit forms for movzx and xor-selfMagnus Lång
2017-03-06hipe_x86_postpass: Enable ElimSet0 ruleMagnus Lång
2017-03-06hipe_tagscheme: Small codegen improvementsMagnus Lång
2017-03-06hipe_x86: CleanupMagnus Lång
2017-03-06hipe_rtl_to_llvm: CleanupMagnus Lång
2017-03-06hipe: Improve code generation for element/2Magnus Lång
* Omit bounds check in more cases. A test case that needs this change to omit bounds check is added. * Improve code generation by reformulating bounds check to decrease register pressure.
2017-03-06hipe/ebb.inc: Cleanup recursive type workaroundMagnus Lång
2017-03-06hipe_amd64_encode: Add test for 16-bit 'test' with REXMagnus Lång
2017-03-06hipe_amd64_registers: Cleanup exit/1 callsMagnus Lång
2017-03-06hipe_beam_to_icode: Omit redtest in some closuresMagnus Lång
This is useful to generate shorter code for closures generated by (fun F/A).
2017-03-06Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Improve a warning dialyzer: Fix a weird warning dialyzer: Fix an opaque bug dialyzer: Minor fix Conflicts: lib/dialyzer/src/dialyzer_dataflow.erl
2017-03-02hipe_rtl_binary_construct: Refactor copy-pasteMagnus Lång
2017-03-02hipe_rtl: Inline more of match eq testMagnus Lång
With this change, both the matches and does not match cases have fastpaths that does not need to call primops.
2017-02-28dialyzer: Improve a warningHans Bolinder
When a pattern a type do not match, opaque warnings were given precedence before structure mismatches. This is no longer always the case. Mentioned by Nick Marino on erlang-questions.
2017-02-28dialyzer: Fix a weird warningHans Bolinder
2017-02-19ErLLVM: Drop code printing assembly for LLVM < 3.9Magnus Lång
2017-02-19ErLLVM: Demand LLVM 3.9 or greaterMagnus Lång
2017-02-14Fixed typos in lib/hipeAndrew Dryga
2017-02-09Merge pull request #1312 from richcarl/shell-smart-compileBjörn Gustavsson
Extend shell c(...) to find and recompile modules OTP-14190
2017-02-06Update use of filename:find_src/1 in hipe.erlRichard Carlsson
2017-02-03dialyzer: Do not keep the code server's type info on the heapHans Bolinder
The table used during translation of forms to types used to be a dictionary of the type info (-type(), -opaque(), and -record()) for all modules. Now it is reduced to the modules that are needed to handle references to types in other modules. The PLT:s type info is still kept on the heap.
2017-02-03Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Increase time limit for tests dialyzer: Optimize typesig dialyzer: Optimize evaluation of complex code dialyzer: Optimize collection of variables Conflicts: lib/dialyzer/src/dialyzer_typesig.erl
2017-02-01dialyzer: Optimize collection of variablesHans Bolinder
2017-01-25Update test cases for erlang:hash/2 removalBjörn-Egil Dahlberg
2017-01-12Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Compact 'file' annotations in Core code dialyzer: Try to reduce memory usage dialyzer: Use less memory when translating contracts dialyzer: Use maps instaed of dict dialyzer: Use maps instead of dict for module contracts map dialyzer: Compress a few more ETS tables dialyzer: Optimize memory consumption dialyzer: Reduce memory consumption during 'remote' phase dialyzer: Update code for finding parallelism compiler: Do not spawn process when dialyzing dialyzer: Reduce ETS usage during the typesig phase dialyzer: Optimize graph condensation dialyzer: Do not send full PLTs as messages
2017-01-11dialyzer: Use maps instaed of dictHans Bolinder
2017-01-11Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix check of parameterized opaque types Conflicts: lib/hipe/cerl/erl_types.erl
2017-01-11Merge branch 'hasse/dialyzer/fix_opaque_parms/OTP-14130' into maintHans Bolinder
* hasse/dialyzer/fix_opaque_parms/OTP-14130: dialyzer: Fix check of parameterized opaque types
2017-01-10Merge branch 'maint'Hans Bolinder
* maint: stdlib: Allow characters in types and constant patterns
2017-01-10dialyzer: Fix check of parameterized opaque typesHans Bolinder
Two parameters used to be "compatible" if one is a specialization of the other, in the way that the input type of t_limit() is a specialization of the output type. This check is now relaxed: any() in any of the two parameters is compatible with any type of the other parameter. The change is due to bugus warnings. A clause for maps has been added.
2016-12-21stdlib: Allow characters in types and constant patternsHans Bolinder
Characters ($char) can be used in constant pattern expressions. They can also be used in types and contracts.
2016-12-16Merge branch 'maint'Sverker Eriksson
2016-12-16Merge pull request #1270 from kostis/hipe-testSverker Eriksson
hipe: one more test file and some cleanups
2016-12-14Merge tag 'OTP-19.2'Dan Gudmundsson
=== OTP-19.2 === Changed Applications: - common_test-1.13 - compiler-7.0.3 - crypto-3.7.2 - dialyzer-3.0.3 - edoc-0.8.1 - erl_docgen-0.6.1 - erl_interface-3.9.2 - erts-8.2 - eunit-2.3.2 - hipe-3.15.3 - inets-6.3.4 - kernel-5.1.1 - mnesia-4.14.2 - observer-2.3 - odbc-2.12 - parsetools-2.1.4 - public_key-1.3 - runtime_tools-1.11 - sasl-3.0.2 - ssh-4.4 - ssl-8.1 - stdlib-3.2 - syntax_tools-2.1.1 - tools-2.9 - wx-1.8 Unchanged Applications: - asn1-4.0.4 - cosEvent-2.2.1 - cosEventDomain-1.2.1 - cosFileTransfer-1.2.1 - cosNotification-1.2.2 - cosProperty-1.2.1 - cosTime-1.2.2 - cosTransactions-1.3.2 - debugger-4.2.1 - diameter-1.12.1 - eldap-1.2.2 - et-1.6 - gs-1.6.2 - ic-4.4.2 - jinterface-1.7.1 - megaco-3.18.1 - orber-3.8.2 - os_mon-2.4.1 - otp_mibs-1.1.1 - percept-0.9 - reltool-0.7.2 - snmp-5.2.4 - typer-0.9.11 - xmerl-1.3.12 * tag 'OTP-19.2': Updated OTP version Prepare release Conflicts: OTP_VERSION
2016-12-09Prepare releaseErlang/OTP