[m-rev.] for review: new termination analyser (part 3 of 6)

Julien Fischer juliensf at cs.mu.OZ.AU
Mon Apr 4 17:16:14 AEST 2005


On Sun, 3 Apr 2005, Mark Brown wrote:

> On 24-Mar-2005, Julien Fischer <juliensf at cs.mu.OZ.AU> wrote:
> >
> > ===================================================================
> > RCS file: /home/mercury1/repository/mercury/compiler/make_hlds.m,v
> > retrieving revision 1.506
> > diff -u -r1.506 make_hlds.m
> > --- compiler/make_hlds.m	22 Mar 2005 06:40:06 -0000	1.506
> > +++ compiler/make_hlds.m	22 Mar 2005 06:49:30 -0000
> > @@ -999,6 +1005,7 @@
> >      module_add_clause(VarSet, PredOrFunc, PredName, Args, Body, !.Status,
> >          Context, GoalType, !ModuleInfo, !QualInfo, !IO).
> >
> > +
> >  add_item_clause(Item, !Status, Context, !ModuleInfo, !QualInfo, !IO) :-
> >      Item = type_defn(_TVarSet, SymName, TypeParams, TypeDefn, _Cond),
> >      % If this is a solver type then we need to also add clauses
>
> Extra space added.
>
Removed.

> > Index: compiler/mercury_to_mercury.m
> > ===================================================================
> > RCS file: /home/mercury1/repository/mercury/compiler/mercury_to_mercury.m,v
> > retrieving revision 1.252
> > diff -u -r1.252 mercury_to_mercury.m
> > --- compiler/mercury_to_mercury.m	22 Mar 2005 06:40:08 -0000	1.252
> > +++ compiler/mercury_to_mercury.m	22 Mar 2005 06:49:31 -0000
>
> > +:- pred write_head_var_ids(list(int)::in, io::di, io::uo) is det.
> > +
> > +write_head_var_ids(VarIds, !IO) :-
> > +	io.write_char('[', !IO),
> > +	io.write_list(VarIds, ", ", io.write_int, !IO),
> > +	io.write_char('[', !IO).
>
> That should be a closing bracket.
>
Fixed.

> > +
> > +:- pred write_maybe_pragma_constr_arg_size_info(
> > +	maybe(pragma_constr_arg_size_info)::in, io::di, io::uo) is det.
> > +
> > +write_maybe_pragma_constr_arg_size_info(no, !IO) :-
> > +	io.write_string("not_set", !IO).
> > +write_maybe_pragma_constr_arg_size_info(yes(ArgSizeInfo), !IO) :-
> > +	io.write_string("constaints(", !IO),
> > +	io.write_char('[', !IO),
> > +	io.write_list(ArgSizeInfo, ", ", write_arg_size_constr, !IO),
> > +	io.write_char('[', !IO).
>
> That should be close bracket followed by close parenthesis.
>
Fixed.


> > Index: compiler/options.m
> > ===================================================================
> > RCS file: /home/mercury1/repository/mercury/compiler/options.m,v
> > retrieving revision 1.453
> > diff -u -r1.453 options.m
> > --- compiler/options.m	23 Mar 2005 01:50:08 -0000	1.453
> > +++ compiler/options.m	23 Mar 2005 07:05:01 -0000
> > @@ -3050,8 +3099,46 @@
> >  		"--term-path-limit <n>, --termination-path-limit <n>",
> >  		"\tPerform termination analysis only on predicates",
> >  		"\twith at most <n> paths (default: 256)."
> > -	]).
> >
> > +% The following options are used to control the new termination analyser.
> > +% They are currently disabled because that is still a work-in-progress.
> > +%
> > +% 		"--enable-term2, --enable-termination2",
> > +% 		"\tAnalyse each predicate to discover if it terminates. ",
> > +% 		"\tThis uses an alternative termination analysis based",
>
> s/based/based on/
>
Done.

> > Index: compiler/polyhedron.m
> > ===================================================================
> > RCS file: compiler/polyhedron.m
> > diff -N compiler/polyhedron.m
> > --- /dev/null	1 Jan 1970 00:00:00 -0000
> > +++ compiler/polyhedron.m	23 Mar 2005 22:47:06 -0000
>
> > +	% Identity polyhedron with respect to intersection and convex union.
> > +	%
> > +	% e.g. P /\ identity = P
> > +	%      P \/ identity = P (where \/ is the convex union)
> > +	%
> > +	% This is useful as an initial value when folding over a list of
> > +	% polyhedra.
> > +	%
> > +:- func polyhedron.identity = polyhedron.
>
> This function returns the universe (that is, the value at the top of the
> lattice).  There doesn't exist an "identity" satisfying the above, except
> in trivial lattices.
>
(Mark and I discussed this one in person).  I've renamed it to
polyhedron.universe and made sure that it's only used in places
where it makes mathematical sense as opposed to be convenient
for somewhat dodgy implementation reasons.  (There didn't seem
to be any instances of the later anyway).

> > Index: compiler/rat.m
> > ===================================================================
> > RCS file: compiler/rat.m
> > diff -N compiler/rat.m
> > --- /dev/null	1 Jan 1970 00:00:00 -0000
> > +++ compiler/rat.m	23 Mar 2005 00:08:49 -0000
>
> > +'=<'(X, Y) :-
> > +	Cmp = cmp(X, Y),
> > +	(Cmp = (<) ; Cmp = (=)).
>
> That would be slightly more efficient as "cmp(X, Y) \= (>)".
>
> > +
> > +'>='(X, Y) :-
> > +	Cmp = cmp(X, Y),
> > +	(Cmp = (>) ; Cmp = (=)).
>
> Likewise here.

Done.

>
> > +rat.rat(Int) = rat_norm(Int, 1).
>
> You don't need to normalize this, since it is already normalized for any
> integer.
>
Fixed.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list