aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe
AgeCommit message (Collapse)Author
2015-01-11hipe: rtl: fix phi_remove_pred/2 FP movesMikael Pettersson
hipe_rtl:phi_remove_pred/2 can produce a #move{} instruction with floating-point temporaries as operands, even though such moves MUST be #fmove{} instructions. Added type checks to the #move{} and #fmove{} constructor and setter functions to ensure that similar mishaps cannot happen again.
2015-01-11hipe: backends: correct #fconv{} translationMikael Pettersson
RTL can produce an #fconv{} instruction with an immediate operand, but the backends unconditionally access the operand as a temporary. This results in broken representation in the backends and eventually they crash.
2014-12-18Merge branch 'haguenau/fix-endianness-speling' into maintBruce Yinhe
* haguenau/fix-endianness-speling: Replaced "Endianess" with "Endianness" everywhere
2014-12-09Prepare releaseErlang/OTP
2014-12-02Replaced "Endianess" with "Endianness" everywhereDavid Haguenauer
2014-11-07Fix typo in llvm/elf_format.hrlGarret Smith
2014-09-15Update release notesErlang/OTP
2014-09-15Update version numbersErlang/OTP
2014-08-21dialyzer, hipe: Fix a bug concerning is_record/2,3Hans Bolinder
Also fixed some cases where Dialyzer could crash due to reaching system limits.
2014-06-26hipe: Correct pretty-printing of bitstringsHans Bolinder
2014-06-19Prepare releaseErlang/OTP
2014-06-18Merge branch 'egil/fix-doc-links' into maintBjörn-Egil Dahlberg
* egil/fix-doc-links: doc: Fix broken links in Installation Guide doc: Fix broken links
2014-06-17doc: Fix broken linksBjörn-Egil Dahlberg
2014-06-17[dialyzer] Fix handling of literal recordsHans Bolinder
This ticket is about records in Erlang code, and when to check the fields against the (optional) types given when defining records. Dialyzer operates on the Erlang Core format, where there are no trace of records. The fix implemented is a Real Hack: Given the new option 'dialyzer' erl_expand_records marks the line number of records in a way that is undone by v3_core, which in turn inserts annotations that can be recognized by Dialyzer.
2014-05-26Merge branch 'egil/fix-maps-pretty-layout/OTP-11947' into maintBjörn-Egil Dahlberg
* egil/fix-maps-pretty-layout/OTP-11947: dialyzer: Add Maps type mismatch test hipe,compiler: Fix Map literals pretty printing
2014-05-23hipe: fix a bug concerning typed record fieldsHans Bolinder
2014-05-13hipe: fix a bug concerning typed record fieldsHans Bolinder
When checking typed record fields Dialyzer failed to handle types containing remote types. Thanks to Erik Søe Sørensen for reporting this bug.
2014-05-09Merge branch 'ks/hipe-map-support/OTP-11900' into maintBjörn-Egil Dahlberg
* ks/hipe-map-support/OTP-11900: Add five new test files for maps in the HiPE test suite Copy the tests for maps from the compiler application to a new HiPE test suite Translate the put_map_assoc and put_map_exact BEAM instructions to ICode Translate the has_map_fields and get_map_elements BEAM instructions to ICode
2014-04-29Add five new test files for maps in the HiPE test suiteKostis Sagonas
2014-04-29Copy the tests for maps from the compiler application to a new HiPE test suiteMagnus Lång
Change the maps_guard_fun test to accept the HiPE trace format.
2014-04-29Translate the put_map_assoc and put_map_exact BEAM instructions to ICodeErik Norgren
2014-04-29Translate the has_map_fields and get_map_elements BEAM instructions to ICodeKostis Sagonas
2014-04-28hipe,compiler: Fix Map literals pretty printingBjörn-Egil Dahlberg
2014-04-17hipe, dialyzer: Fix a bug concerning opaque typesHans Bolinder
Dialyzer sometimes output warnings like Attempt to test for inequality between a term of type 'false' and a term of opaque type 'false' | gb_set() The reason was that erl_types:t_inf/3 when called from erl_types:t_find_unknown_opaque() did not return 'false' but found the mismatch. It should not return the mismatch unless the intersection is empty ('none'). Thanks to Shayan Pooya [[email protected]] for pointing out the bug.
2014-04-07Update release notesErlang/OTP
2014-04-01Merge branch 'yiannist/erllvm-fixes'Sverker Eriksson
* yiannist/erllvm-fixes: Fix frame size adjustment of stack descriptors Fix counting of arguments of closures Check for required LLVM version or issue error
2014-03-31Merge branch 'kostis/hipe-test-fix'Sverker Eriksson
* kostis/hipe-test-fix: Add support for testing the LLVM backend too Ensure generated modules are properly included in the Emakefile
2014-03-30Fix frame size adjustment of stack descriptorsYiannis Tsiouris
In case of function calls with arguments that are passed to the stack, the frame size of corresponding stack descriptors needs to be reduced by the number of stack arguments. This commit fixes a bug in this adjustment which was caused by an incorrect check.
2014-03-30Fix counting of arguments of closuresChristos Stavrakakis
Do not rely on MFA name for the arity of functions, since closures have an extra argument. Instead, just use the length of the arguments list.
2014-03-30Check for required LLVM version or issue errorYiannis Tsiouris
This checks that a required LLVM version (i.e. 3.4 or greater) appears in $PATH when 'to_llvm' flag is used; in case of failure, abort compilation with an error.
2014-03-28Add support for the compilation of the is_map/1 guard to native codeKostis Sagonas
Namely, extend the HiPE tagging scheme info, properly handle the translation of the (is_)map type test to Icode and RTL and support handling of the map() type in the type system. While at it, also performed some clean up of things that needed small fixes.
2014-03-28Add 'map' to the set of icode_type_test()sKostis Sagonas
2014-03-28Support the translation of the is_map BEAM instruction to IcodeKostis Sagonas
2014-03-26Merge branch 'aronisstav/hipe/opaque_fix'Hans Bolinder
* aronisstav/hipe/opaque_fix: Don't 'opaque-decorate' a success typing using an incompatible spec
2014-03-25Merge branch 'ks/hipe-rtl-remove-constant/OTP-11822'Björn-Egil Dahlberg
* ks/hipe-rtl-remove-constant/OTP-11822: Remove RTL code that handled the (is_)constant guard
2014-03-24Don't 'opaque-decorate' a success typing using an incompatible specStavros Aronis
Without this patch Dialyzer crashes when analyzing the supplemented test case.
2014-03-24hipe: Correct last commit of OTP-10342Hans Bolinder
Remove debug printouts.
2014-03-24stdlib: warn if the type map() is redefinedHans Bolinder
2014-03-24hipe: Add a few clauses for maps in erl_typesHans Bolinder
2014-03-23Add support for testing the LLVM backend tooKostis Sagonas
2014-03-23Ensure generated modules are properly included in the EmakefileKostis Sagonas
2014-03-21Merge branch 'yiannist/hipe-llvm-backend'Henrik Nord
* yiannist/hipe-llvm-backend: Support the LLVM backend in HiPE Implement the LLVM backend Extend RTL API to support the LLVM backend Add support for llvm unique symbols in hipe_gensym Add a BIF that only returns the atom ok Move some common code in hipe_pack_constants Add better specs in hipe_pack_constants and cleanup OTP-11801
2014-03-20Introduce runtime_dependencies in .app filesRickard Green
Most dependencies introduced are exactly the dependencies to other applications found by xref. That is, there might be real dependencies missing. There might also be pure debug dependencies listed that probably should be removed. Each application has to be manually inspected in order to ensure that all real dependencies are listed. All dependencies introduced are to application versions used in OTP 17.0. This since the previously used version scheme wasn't designed for this, and in order to minimize the work of introducing the dependencies.
2014-03-20Bump versions and ensure that all are "normal" versionsRickard Green
Ensure all are "normal" versions according to the new version scheme introduced in OTP 17.0
2014-03-19Remove RTL code that handled the (is_)constant guardKostis Sagonas
The (is_)constant/1 guard is removed from Erlang long ago and thus there is no need to handle it in RTL. While editing these files, also performed some minor cleanup.
2014-03-19Merge branch 'kostis/hipe-rc2-patch'Henrik Nord
* kostis/hipe-rc2-patch: Cleanup and make sure warnings are treated as errors Add specs for exported functions (to shut off a warning) and types in some record fields Introduce and use a hipe_icode:icode() type Substitude uses of lists:reverse(L1) ++ L2 with lists:reverse(L1, L2)
2014-03-17hipe: Properly identify map() type form termsBjörn-Egil Dahlberg
2014-03-07Support the LLVM backend in HiPEYiannis Tsiouris
Add flags to enable and use the LLVM backend: * to_llvm: use the LLVM pipeline for compilation (default optimization level is O3), * llvm_save_temps: save the intermediate files in current directory in order to be able to debug or optimize the LLVM assembly, * {to_llvm, O}: set the optimization level of LLVM opt and llc tools. Add some debug support to the loader; no semantic change intented.
2014-03-07Implement the LLVM backendYiannis Tsiouris
2014-03-07Extend RTL API to support the LLVM backendYiannis Tsiouris
Extend the 'rtl_var' definition to host liveness information needed for a simple liveness analysis performed by the LLVM backend. Also, uncomment some function definitions (mostly simple accessors) that are already there and are useful for the translation of RTL code to LLVM assembly. Finally, extend the RTL 'call' instruction with the 'normalcontinuation' field which is required for translating calls that are in the scope of an exception handler. This extra field is required in order to point to a new basic block which will hold the 'unwind label' of LLVM's invoke instruction. While the 'unwind label' is semantically equivalent with the 'failcontinuation', in LLVM this block must have a 'landingpad' instruction. The problem arises by the fact that an RTL 'continuation' block can also be accessible by other paths in the RTL CFG, and so cannot be marked as a landing pad. To overcome this issue we create a new block (the 'normalcontinuation') which is used as the 'unwind label' of LLVM's invoke instruction and which will eventually transfer control to the 'continuation' block.