aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe
AgeCommit message (Collapse)Author
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-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.
2014-03-07Add support for llvm unique symbols in hipe_gensymYiannis Tsiouris
This is used by the LLVM backend in order to generate unique names for temporary SSA values and functions.
2014-03-07Move some common code in hipe_pack_constantsYiannis Tsiouris
All backends (e.g. arm, ppc, sparc, x86) share the same code for the following functions: * find_const/2, * mk_data_relocs/2, and * slim_sorted_exportmap/3 This commit moves those definitions (along with some helper functions) in misc/hipe_pack_constants.erl and adds the appropriate specs. This is a structural change; no change in semantics intented.
2014-03-07Add better specs in hipe_pack_constants and cleanupYiannis Tsiouris
2014-03-05Add types for new HiPE BIFsKostis Sagonas
Commit 81c7db0e247a6ee1b7a5c2764aa9575d7f6fb88a broke apart hipe_bif:make_fe/3 into two BIFs but forgot to properly update the type information about HiPE BIFs in erl_bif_types.erl. This commit fixes this by taking out the types of hipe_bifs:make_fe/3 and adding types for the new BIFs hipe_bifs:get_fe/2 and hipe_bifs:hipe_bifs_set_native_address_in_fe/2.
2014-02-26Cleanup and make sure warnings are treated as errorsKostis Sagonas
2014-02-26Add specs for exported functions (to shut off a warning) and types in some ↵Kostis Sagonas
record fields
2014-02-26Introduce and use a hipe_icode:icode() typeKostis Sagonas
2014-02-26Substitude uses of lists:reverse(L1) ++ L2 with lists:reverse(L1, L2)Kostis Sagonas
2014-02-25Merge branch 'kostis/hipe-tests-bs/OTP-11748'Henrik Nord
* kostis/hipe-tests-bs/OTP-11748: Up the time limit (globally) for some slow machines Add check so that tests are skipped if HiPE is not available Add a Makefile for the HiPE tests Add tests for the HiPE compiler (Part 1: binaries and bitstrings)
2014-02-24Up the time limit (globally) for some slow machinesKostis Sagonas
2014-02-24Add check so that tests are skipped if HiPE is not availableKostis Sagonas
2014-02-24Add a Makefile for the HiPE testsKostis Sagonas
2014-02-24Add tests for the HiPE compiler (Part 1: binaries and bitstrings)Kostis Sagonas
Create tests for the HiPE native code compiler. This is the first part of the effort and contains tests that check that the native code produced by the HiPE compiler for binaries and bitstrings is OK and behaves similarly to the code produced by the BEAM compiler.
2014-02-24Merge branch 'lukas/ose/master/OTP-11334'Lukas Larsson
* lukas/ose/master/OTP-11334: (71 commits) erts: Fix unix efile assert ose: Use -O2 when building ose: Expand OSE docs ose: Add dummy ttsl driver ose: Cleanup cleanup of mutex selection defines ose: Polish mmap configure checks ose: Add ose specific x-compile flags ose: Updating fd_driver and spawn_driver for OSE ose: Updating event and signal API for OSE ose: Cleanup of mutex selection defines win32: Compile erl_log.exe ose: Remove uneccesary define ose: Fix ssl configure test for osx erts: Fix sys_msg_dispatcher assert ose: Fix broken doc links ose: Thread priorities configurable from lmconf ose: Yielding the cpu is done "the OSE" way ose: Start using ppdata for tse key ose: Do not use spinlocks on OSE ose: Fix support for crypto ... Conflicts: lib/crypto/c_src/crypto.c
2014-02-24Added support for ENEA OSELukas Larsson
This port has support for both non-smp and smp. It contains a new way to do io checking in which erts_poll_wait receives the payload of the polled entity. This has implications for all linked-in drivers.
2014-02-24Merge branch 'hb/dialyzer/deprecate_types/OTP-10342'Hans Bolinder
* hb/dialyzer/deprecate_types/OTP-10342: Deprecate pre-defined built-in types
2014-02-24Merge branch 'schlagert/fix_basic_appups'Siri Hansen
* schlagert/fix_basic_appups: Dynamically configure typer_SUITE according to environment Disable hipe_SUITE when environment doesn't support it Make hipe non-upgradable by setting appup file empty Fix missing module on hipe app file template Add test suites performing app and appup file checks Introduce appup test utility Fix library application appup files Fix non-library appup files according to issue #240 OTP-11744
2014-02-24Disable hipe_SUITE when environment doesn't support itTobias Schlager
2014-02-24Make hipe non-upgradable by setting appup file emptyTobias Schlager
The reason for this is that if you are running a system with native compiled code, then you will have major problems with soft upgrade and the only reasonable way to go is to restart your emulator. Currently there is no instruction that will force ONLY a restart of the emulator, so the solution would be to hand write a relup with only a restart_emulator instruction. By letting hipe.appup be empty, systools will complain and not generate a relup - which should indicate that you might have to write your relup by hand.
2014-02-24Fix missing module on hipe app file templateTobias Schlager
2014-02-24Add test suites performing app and appup file checksTobias Schlager
Add the mentioned test suites for *all* library and touched non-library applications.
2014-02-23Deprecate pre-defined built-in typesHans Bolinder
The types array(), dict(), digraph(), gb_set(), gb_tree(), queue(), set(), and tid() have been deprecated. They will be removed in OTP 18.0. Instead the types array:array(), dict:dict(), digraph:graph(), gb_set:set(), gb_tree:tree(), queue:queue(), sets:set(), and ets:tid() can be used. (Note: it has always been necessary to use ets:tid().) It is allowed in OTP 17.0 to locally re-define the types array(), dict(), and so on. New types array:array/1, dict:dict/2, gb_sets:set/1, gb_trees:tree/2, queue:queue/1, and sets:set/1 have been added.
2014-02-22Introduce parameterized opaque typesHans Bolinder
Handle immediate opaque types as aliases: A declaration of dict/0 -opaque dict() :: dict(_, _). -opaque dict(Key, Value) :: ... is handled as an alias, that is, when using dict() it is immediately replaced by dict(_, _). This is a means to avoid having to handle equivalent opaque types later. To be changed if it doesn't work well.
2014-02-22Fix a bug concerning parameterized typesHans Bolinder
This should fix a problem with variables in parameterized types. In particular it concerns parameterized opaque types and records.
2014-02-22Solve remote types in parametersHans Bolinder
2014-02-18Fix library application appup filesTobias Schlager
As discussed in issue #240 *all* OTP library applications use the '.*' wildcard as up and down version. This makes library applications always up- and downgradeable. Using the wildcard version obsoletes all maintenance tasks regarding library applications' appup files. Additionally, it prevents upgrade problems caused by automatically included application dependencies when using reltool to create releases. Missing copyright headers are now consistently present.
2014-01-29hipe: Fixup update cerl pretty printerBjörn-Egil Dahlberg
2014-01-29hipe: Update cerl pretty printerBjörn-Egil Dahlberg
2014-01-28dialyzer,hipe,stdlib: Add Maps understanding to DialyzerBjörn-Egil Dahlberg
2014-01-21[dialyzer] Re-work the handling of opaque typesHans Bolinder
It is now OK to inspect and modify the internals of opaque types within the scope of the module. The contracts are used for decorating types with opaqueness when it is harmless to do so. The opaqueness is propagated by the typesig module and also by the dataflow module. A lot of details have been fixed or updated. In particular the modules erl_types and erl_bif_types have been modified extensively. The version in vsn.mk has been updated to 2.7. The reason is a modification of #opaque{} in erl_types. Dialyzer seems to be about five percent slower than it used to be.
2014-01-10hipe: Fix compilation with 'no_remove_comments'Johannes Weißl
To reproduce the error: $ echo '-module(hello).' > hello.erl $ erl 1> c(hello, [native,{hipe,[no_remove_comments]}]). [...] <HiPE (v 3.10.2.1)> Error: [hipe:834]: ERROR: {{case_clause, {icode_comment,call_ext_only}}, [{hipe_icode,successors,1, [{file,"hipe_icode.erl"}, {line,1444}]}, [...]
2013-12-20Merge remote-tracking branch 'origin/kostis/dialyzer_hipe-remove-gs'Dan Gudmundsson