[m-rev.] for review: lco and constant constructions

Peter Wang novalazy at gmail.com
Fri Jul 20 15:48:24 AEST 2012

On Fri, 20 Jul 2012 14:53:11 +1000, Zoltan Somogyi <zs at unimelb.edu.au> wrote:
> On 20-Jul-2012, Peter Wang <novalazy at gmail.com> wrote:
> > Allow the last-call-modulo-cons optimisation to move goals constructing
> > constants before a recursive call, thus allowing the call to be in the
> > tail position.
> That code is not as general as it could be. Consider a recursive call
> that generates X being followed by
> 	V1 = a,
> 	V2 = b,
> 	V3 = f(a, b),
> 	Headvar4 = g(V3, X)
> You code would allow V1 and V2, but not V3.

An existing ConsTag test allows it.

> I think the test you want is not ConstructArgs = [], but a more general test;
> something that implements the notion "all ConstructArgs have either been built
> by construction unifications after the recursive call, or were available
> even before the recursive call".
> However, I think you need to separate out unifications that construct
> cells that have a field whose address is taken, and unifications that
> do no such thing, and treat them differently. Including them in the same list,
> as your diff does, can work only by accident.

I'll take another look.

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