mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-17 23:05:21 +00:00
The main changes are
Estimated hours taken: 12
The main changes are
1 associating a name with the arguments of constructors
2 removing the follow_vars field from calls, higher-order calls
and complicated unifications, since they are not used
3 merging the follow_vars and store_alloc passes, since they logically
belong together
4 add a new module, lco, for detecting opportunities for last
call optimization modulo constructor application; it won't
actually apply the optimization until the mode system becomes
expressive enough to handle it (this module detects 529 opportunities
in the compiler and library)
5 make "-O3 --optimize-value-number" do the right thing; previously,
it used not to apply value numbering because the vnrepeat option
defaulted to zero
6 don't refer to .err2 files anymore; use .err instead.
prog_data:
The list associated with each value of type "constructor" now
contains not only the types of the arguments but their names as well.
equiv_type, hlds_data, hlds_out, make_hlds, mercury_to_{goedel,mercury},
mode_util, module_qual, shapes, type_util, unify_proc:
Modify the traversal of type definitions to account for the names
in the lists inside values of type "constructor".
prog_io:
Parse argument names. An unrelated change is that we now
check whether :- pred declarations give modes to some of their
arguments but not to all, in which case we return an error.
hlds_goal:
Remove the follow_vars field from calls, higher-order calls
and complicated unifications.
*.m:
Handle the new arities of calls, higher order calls and complicated
unifications.
mercury_compile:
Don't call follow_vars directly anymore, but do call lco if its option
is set. Also flush the main output before a call to maybe_report_stats
to prevent ugly output.
store_alloc:
Call follow_vars directly.
follow_vars:
Expose the initialization and traversal predicates for store_alloc.
lco:
Find opportunities for last call optimization modulo constructor
application.
passes_aux:
Add a HLDS traversal type for lco.
optimize:
Consider the vnrepeat count to be zero unless value numbering is on.
options:
Set the default value of vnrepeat to 1.
modules:
Don't refer to .err2 files.
This commit is contained in:
@@ -475,8 +475,8 @@ code_util__goal_may_allocate_heap(Goal - _GoalInfo) :-
|
||||
:- pred code_util__goal_may_allocate_heap_2(hlds__goal_expr).
|
||||
:- mode code_util__goal_may_allocate_heap_2(in) is semidet.
|
||||
|
||||
code_util__goal_may_allocate_heap_2(higher_order_call(_, _, _, _, _, _)).
|
||||
code_util__goal_may_allocate_heap_2(call(_, _, _, Builtin, _, _, _)) :-
|
||||
code_util__goal_may_allocate_heap_2(higher_order_call(_, _, _, _, _)).
|
||||
code_util__goal_may_allocate_heap_2(call(_, _, _, Builtin, _, _)) :-
|
||||
\+ hlds__is_builtin_is_inline(Builtin).
|
||||
code_util__goal_may_allocate_heap_2(unify(_, _, _, construct(_,_,Args,_), _)) :-
|
||||
Args = [_|_].
|
||||
|
||||
Reference in New Issue
Block a user