aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe
AgeCommit message (Collapse)Author
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-08-31dialyzer: Optimize an opaque type caseHans Bolinder
Fix a mistake in commit 85f6fe3b. Instead of using the declared opaque type, the form's type is used in a case where the opaque type is turned into a non-opaque type. The result is more general types (smaller Erlang terms) and faster analyses.
2016-08-26Merge branch 'maint'Sverker Eriksson
2016-08-22hipe: Fix amd64 SSE2 encoding crashMagnus Lång
Register allocation could transform something like fmove u32, d99 to fmove $rdx, 0x20($rsp) which is an invalid instruction.
2016-08-22hipe: Fix tailcall stackarg clobber bugMagnus Lång
Since the link register/return address is restored before stack arguments are stored to the frame, we must not use it to store a stack argument. We do that by adding it to the registers clobbered by pseudo_tailcall_prepare.
2016-08-22hipe_arm: Fix translation of shift by 0Magnus Lång
The problem was caused by shift-by-immediate-zero, which wraps to immediate-32 with some shiftops. TODO: Someplace should be modified to crash when these are generated so debugging further instances of this gets easier in the future.
2016-08-22hipe_ppc: Fix PPC64 bug encoding large immediatesMagnus Lång
2016-08-22hipe_ppc: Fix incorrect encoding of shift by 0Magnus Lång
2016-08-22hipe_x86: Fix illegal inst from peephole optMagnus Lång
2016-07-11hipe_vectors: Change implementation to 'array'Magnus Lång
The 'array' module is highly optimised for the hipe_vectors use-case, and seems to perform slightly better than the gb_trees implementation. Also, we remove the completely unnecessary hipe_vectors.hrl header.
2016-07-11hipe: Faster unreachable basic block removalMagnus Lång
2016-07-11hipe_ssa_liveness: Use map as liveness ADTMagnus Lång
2016-07-11hipe/flow/liveness.inc: Use map for liveness typeMagnus Lång
Slightly improves performance.
2016-07-11hipe_x86_frame: speed up find_tempsMagnus Lång
2016-07-11hipe_icode_range: Use maps over gb_trees,setsMagnus Lång
Also, remove unused field 'counter' from #state{}.
2016-07-11hipe_icode_coordinator: Rewrite concurrentlyMagnus Lång
2016-07-11hipe: segment tree delete operationMagnus Lång
Profiling showed that hipe_sdi spent most of its time in updateParents, discarding nodes that were already deleted. By introducing a delete operation to the segment trees, we can pay this cost only once, when deleting the node from the graph. Instead of keeping the ranges around, we recompute the range of the node when we delete it, since this can be done in constant time, without any memory allocation. Although segment trees are not designed to be modified once built, implementing a delete operation turned out to be a simple matter of repeating insertion, but deleting the index from, instead of consing it on, the appropriate nodes' values (segment lists). This optimisation drastically sped up hipe_sdi to the point of no longer being the bottleneck in the Assembly stage.
2016-07-11hipe_sdi: Use segment trees to represent PARENTSMagnus Lång
This speeds up parentsOfChild/2 from O(n) to O(lg n + k). A new module misc/hipe_segment_trees.erl is introduced.
2016-07-11hipe_icode_{bincomp,range}: Improve complexityMagnus Lång
hipe_icode_bincomp:find_bs_get_integer/3 was quadratic for no good reason. By observing that NewSuccs and Rest are always disjoint, we can see that the worklist does not need to be a set. Furthermore, by replacing the ordset Visited with a map, we reduce complexity to (a very low) O(n lg n). On cuter_binlib, this change reduced the time for hipe_icode_bincomp from 60s to .25s. Using a gb_set for Visited gives .5s, and a sets:set 1s. We apply the same optimisation to hipe_icode_range.
2016-06-28erl_types: Normalise X:=none() pairs in t_map/3Magnus Lång
t_map/3 previously required callers to perform this normalisation, but as t_from_form/5 would sometimes fail to do so, this requirement is relaxed. Bug (ERL-177) reported and shrunk by Luke Imhoff.
2016-06-21Prepare releaseErlang/OTP
2016-06-15hipe: Pattern matching compilation of binaries and bistringsKostis Sagonas
The Core Erlang pattern matching compiler was written long ago, at a time when binaries and bistrings did not really exist in Erlang. This patch, taken from the code of CutEr where it's used for more than a year now, extends the transformation for pattern matching compilation to also include binaries and bistrings. Some code that was found erroneous and causes errors when compiling the transformed code to native code was also taken out while at it. Thanks to @aggelgian for most of the changes in the code.
2016-06-10Merge branch 'hasse/dialyzer/improve_from_form/OTP-13547'Hans Bolinder
* hasse/dialyzer/improve_from_form/OTP-13547: Update primary bootstrap stdlib: Correct types and specs dialyzer: Minor adjustments dialyzer: Suppress unmatched_return for send/2 dialyzer: Improve the translation of forms to types dialyzer: Use a cache when translating forms to types dialyzer: Prepare erl_types:t_from_form() for a cache dialyzer: Optimize erl_types:t_form_form() dialyzer: Correct types syntax_tools: Correct types erts: Correct character repr in doc of the abstract format stdlib: Correct types and specs
2016-06-09Remove support for '...' in Maps typesHans Bolinder
It is possible that '...' is added later (OTP 20.0), but for now we are not sure of all details.
2016-06-09dialyzer: Improve the translation of forms to typesHans Bolinder
Spend less of the limited resources on recursive types.
2016-06-09dialyzer: Use a cache when translating forms to typesHans Bolinder
2016-06-09dialyzer: Prepare erl_types:t_from_form() for a cacheHans Bolinder
No change of functionality.
2016-06-09dialyzer: Optimize erl_types:t_form_form()Hans Bolinder
When the translation from forms to types exceeds some limit, it is faster to try small depths first.
2016-06-09dialyzer: Correct typesHans Bolinder
2016-06-02Revert "Prepare release"Erlang/OTP
This reverts commit e020f75c10410a6943cd055bfa072a2641eab7da.
2016-06-02Prepare releaseErlang/OTP
2016-05-31Code rewrites to avoid exported vars warningsKostis Sagonas
2016-05-31Code rewrites to avoid exported vars compiler warningsKostis Sagonas
2016-05-31Define, export and use a hipe_icode:params() typeKostis Sagonas
2016-05-31Fix name of compiler option and the related warningsKostis Sagonas
2016-05-31Cleanups in hipe/main and hipe/rtlKostis Sagonas
* Rewrite matching statements in ?when_option macro to form that silences dialyzer's unmatched_return warnings * Treat compiler warnings as errors when compiling files in main
2016-05-31Eliminate stupid if constructKostis Sagonas
2016-05-31Use type name, not record notation, in specsKostis Sagonas
2016-05-31Various cleanups and simplificationsKostis Sagonas
2016-05-31Add missing type declarations to a recordKostis Sagonas
2016-05-31Make a type opaqueKostis Sagonas
2016-05-31Cosmetic cleanupsKostis Sagonas
2016-05-31Add compiler option -Werror to MakefilesKostis Sagonas
and correct the name of another, erroneously spelt, option in the process.
2016-05-31Merge branch 'sverker/dialyzer/erlang-halt'Sverker Eriksson
2016-05-30Merge branch 'margnus1/llvm-upgrades/PR-1070'Sverker Eriksson
2016-05-30Reintroduce erlang:halt/0/1 in erl_bif_types.erlSverker Eriksson
Removed in f9cb80861f169743 when changed impl from C to Erlang. But seems they are needed to keep dialyzer tests happy. Also improved bif_SUITE:shadow_comments to include all exported in module erlang, not just the "snifs". ...which detected that apply/2 was missing Shadowed comment as well.
2016-05-27Merge branch 'richcarl/erts/fix-init-stop/PR-911/OTP-13630/OTP-13631'Sverker Eriksson
2016-05-26hipe_llvm: Export hipe literals as LLVM metadataMagnus Lång
LLVM currently hard-codes these. Since it is desirable to be able to change things like PCB layout without requiring a change to LLVM, we export these as LLVM metadata, which can easily be used from LLVM to make it independent of them.
2016-05-26Merge branch 'margnus1/llvm-compatibility/PR-1057/OTP-13626'Sverker Eriksson
2016-05-26Merge branch 'margnus1/hipe/maps-is_key-opts/PR-1069/OTP-13625'Björn-Egil Dahlberg
* margnus1/hipe/maps-is_key-opts/PR-1069/OTP-13625: hipe: Add test suite for verifying optimisations Added elimination of maps:is_key/2 calls to HiPE