[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