[m-rev.] diff: reset contains_trace_goal if necessary

Mark Brown mark at csse.unimelb.edu.au
Thu Nov 9 14:50:21 AEDT 2006


On 09-Nov-2006, Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
> 
> On Thu, 9 Nov 2006, Mark Brown wrote:
> 
> >On 08-Nov-2006, Peter Ross <pro at missioncriticalit.com> wrote:
> >>Imagine we have a program.
> >>
> >>p(X) :-
> >> q(X),
> >> s(X).
> >>
> >>q(X) :-
> >> trace(..),
> >> r(X).
> >>
> >>Now imagine the compiler determines q(X) and r(X) don't actually need
> >>to be called.
> >>The behaviour of the program with respect to the trace goals will
> >>depend on whether or not inlining is done before or after unnecessary
> >>code removal.
> >
> >According to the reference manual (last paragraph of sec 16) the call
> >to q/1 can be optimized away.  The presence of the trace goal in the
> >clause for q/1 shouldn't hinder this optimization.
> 
> That's not what Peter is saying though is it?  The problem is that if
> q(X) is inlined we get:
> 
> 	p(X) :-
> 		trace(...),
> 		r(X),
> 		s(X).
> 
> If r(X) is then determined to be unecessary we are then left with:
> 
> 	p(X) :-
> 		trace(...),
> 		s(X).
> 
> The problem is that we now have what is essentially a dangling trace goal,
> e.g. it does not relate to any of the remaining code.

Yes.  My point was that unnecessary code removal must be done before
inlining in order to match the spec.

Cheers,
Mark.

--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list