aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe/icode
AgeCommit message (Collapse)Author
2017-03-28hipe_icode_range: Add comment about side-effectsMagnus Lång
2017-03-27hipe: Fix range analysis of calls with ignored resMagnus Lång
HiPE's range analysis would not update the arguments of a callee when the result of the call was ignored. Fixes ERL-278.
2017-03-27hipe: Fix range analysis of 'rem' operatorMagnus Lång
erl_bif_types contains a fixed and improved copy-paste (obvious from the dead Max_range2_leq_zero if branches) of hipe_icode_range:range_rem/2. For now, delete the dead code and propagate back fixes and improvements to hipe_icode_range.
2017-03-24hipe: Transform is_tagged_tuple instructionBjörn-Egil Dahlberg
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_beam_to_icode: Omit redtest in some closuresMagnus Lång
This is useful to generate shorter code for closures generated by (fun F/A).
2016-11-25Merge branch 'richarl/fix-license-headers/PR-788'Björn Gustavsson
* richarl/fix-license-headers/PR-788: Make use of the Header feature in yecc Remove Emacs timestamp markers Remove obsolete CVS keyword markup Update obsolete author e-mails Replace broken example URL Add missing entries to COPYRIGHT file Correct copyright on stdlib files Add license headers to hipe files in kernel Correct copyright info on typer files Correct copyright and license on dialyzer files Correct copyright on remaining hipe files Correct copyright info on hipe cerl files Correct copyright info on cerl-related files Correct the copyright info in docgen_edoc_xml_cb Update Syntax Tools license headers Remove some obsolete files Update EDoc license headers to dual Apache2/LGPL Update EUnit license headers to dual Apache2/LGPL
2016-11-23Remove obsolete CVS keyword markupRichard Carlsson
2016-11-23Correct copyright on remaining hipe filesRichard Carlsson
2016-11-23Merge branch 'maint'Sverker Eriksson
2016-11-19hipe_icode_call_elim: Fix cf elimination crashMagnus Lång
hipe_icode_call_elim could in some cases replace an #icode_call{} with control flow with a move instruction. This would break the control flow graph invariants and cause a crash.
2016-11-16hipe_icode: Always const-propagate if&call argsMagnus Lång
2016-11-15hipe_rtl: drop alub dest when unusedMagnus Lång
2016-11-07Merge branch 'maint'Sverker Eriksson
2016-11-03Fix the native code translation of bs_match_stringKostis Sagonas
This fixes a HiPE bug reported on erlang-questions on 2/11/2016. The BEAM to ICode tranaslation of the bs_match_string instruction, written long ago for binaries (i.e., with byte-sized strings), tried to do a `clever' translation of even bit-sized strings using a HiPE primop that took a `Size' argument expressed in *bytes*. ICode is not really the place to do such a thing, and moreover there is really no reason for the HiPE primop not to take a Size argument expressed in *bits* instead. This commit changes the `Size' argument to be in bits, postpones the translation of the bs_match_string primop Fixed in a pair-programming/debugging session with @margnus1. until RTL and does a proper translation using bit-sized quantities there.
2016-07-11hipe_ssa_liveness: Use map as liveness ADTMagnus 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_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-05-31Code rewrites to avoid exported vars warningsKostis Sagonas
2016-05-31Define, export and use a hipe_icode:params() typeKostis Sagonas
2016-05-31Use type name, not record notation, in specsKostis Sagonas
2016-05-27Merge branch 'richcarl/erts/fix-init-stop/PR-911/OTP-13630/OTP-13631'Sverker Eriksson
2016-05-25hipe: Add halt/2 to functions that always failSverker Eriksson
Seems like halt/2 should be a member of this club.
2016-05-23Added elimination of maps:is_key/2 calls to HiPEMagnus Lång
* Implemented removal of maps:is_key/2 calls of which the result is known in a new pass during the typed phase, called hipe_icode_call_elim. * Added the option icode_call_elim that enables the hipe_icode_call_elim pass, and made it default for o2.
2016-04-13Merge branch 'henrik/update-copyrightyear'Henrik Nord
* henrik/update-copyrightyear: update copyright-year
2016-03-21Merge branch 'kostis/hipe-inline-fp-crash/PR-984/OTP-13407'Sverker Eriksson
2016-03-15update copyright-yearHenrik Nord
2016-03-10hipe_icode_fp: simplify match/2Magnus Lång
2016-03-07hipe_icode_fp: Replace helper with lists:allMagnus Lång
2016-03-03hipe_icode_fp: Define types for all records usedMagnus Lång
2016-03-03hipe_icode_fp: Add specs and switch trees to mapsMagnus Lång
2016-03-02hipe: Fix crashing bugs when inlining FP opsMagnus Lång
It was assumed in hipe_icode_fp:filter_map/3 that either all predecessors would have an up-to-date ("assigned") tagged copy, or none of them. This is temporarily false during the fixpoint loop in basic_floats:test_icode_type_crash_2/0, which exercises the all_args_equal(Bindings) =:= true branch, that would previously erroneously end up in the 'false' branch, which is what caused the crash in that case. This is likewise only temporarily false during the fixpoint loop in basic_floats:test_icode_type_crash/0, but that case instead exercises the 'false' branch, justifying the inclusion of both tests.
2016-02-25Merge branch 'maint'Henrik Nord
2016-02-07Fix dialyzer warning and some code refactoringKostis Sagonas
A previous commit introduced a change that exposed dead code in this module and caused dialyzer warnings. This dead code was taken out. While at it, performed some code refactoring in the handling of the bs_get_integer primop.
2016-02-02Merge branch 'maint'Zandra
Conflicts: erts/emulator/beam/beam_emu.c
2015-12-15hipe: Use '::' for constraintsHans Bolinder
2015-11-27hipe: Guard against enormous numbers in rangesMagnus Lång
This allows us to compile bs_match_int_SUITE with HiPE without a system_limit crash.
2015-11-27hipe: Fix binary constructions failing with badarithMagnus Lång
Expressions like <<0:(fun(X)->X end(anka))>> would fail with 'badarith' in HiPE, but 'badarg' in BEAM. hipe_beam_to_icode was attempting to optimise the amount of code generated by letting the arithmetic error propagate instead of catching it. However, since it was emitting a block to throw 'badarg' in that case anyway, we can just reuse it to achieve just as compact code that behaves exactly like BEAM.
2015-11-27hipe: test unit size match in bs_put_binary_allMagnus Lång
The unit size field was previously completely discarded when lowering this instruction from BEAM to Icode. This feature was previously missing and expressions such as <<0, <<1:1>>/binary>> would succeed construction when compiled with HiPE.
2015-10-09Update and cleanup HiPE recordsKostis Sagonas
The bulk of the changes concerns cleanups and code refactorings concerning record constructions that assigned 'undefined' to record fields whose type did not contain this value. See commit 8ce35b2. While at it, some new type definitions were introduced and type names were used instead of record type notation. Minor code cleaups were also done.
2015-06-18Change license text to APLv2Bruce Yinhe
2015-04-15Raise more descriptive error messages for failed map operationsBjörn Gustavsson
According to EEP-43 for maps, a 'badmap' exception should be generated when an attempt is made to update non-map term such as: <<>>#{a=>42} That was not implemented in the OTP 17. José Valim suggested that we should take the opportunity to improve the errors coming from map operations: http://erlang.org/pipermail/erlang-questions/2015-February/083588.html This commit implement better errors from map operations similar to his suggestion. When a map update operation (Map#{...}) or a BIF that expects a map is given a non-map term, the exception will be: {badmap,Term} This kind of exception is similar to the {badfun,Term} exception from operations that expect a fun. When a map operation requires a key that is not present in a map, the following exception will be raised: {badkey,Key} José Valim suggested that the exception should be {badkey,Key,Map}. We decided not to do that because the map could potentially be huge and cause problems if the error propagated through links to other processes. For BIFs, it could be argued that the exceptions could be simply 'badmap' and 'badkey', because the bad map and bad key can be found in the argument list for the BIF in the stack backtrace. However, for the map update operation (Map#{...}), the bad map or bad key will not be included in the stack backtrace, so that information must be included in the exception reason itself. For consistency, the BIFs should raise the same exceptions as update operation. If more than one key is missing, it is undefined which of keys that will be reported in the {badkey,Key} exception.
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-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-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