[m-dev.] for review: fix bug with quantification & instmap deltas

Andrew Bromage bromage at cs.mu.OZ.AU
Mon Jun 14 13:47:55 AEST 1999


G'day all.

Simon Taylor wrote:

> It was removed when Andrew changed the instmap representation
> (instmap.m revision 1.15.2.15). Unfortunately he was a bit slack
> with the log message on that change, so there isn't anything
> written down describing the reason.

Whoops, sorry about that.  It's been a while.

> I think it had something to do with the fact that with alias tracking
> a goal can update the insts of variables that are not in its nonlocal set.

That's basically it.  A goal can update the insts of variables which
"touch" (via aliasing) variables which are not in its nonlocal set.
For example:

<<
:- mode create_unique(uo).
:- mode share(in).
:- mode use_uniquely(ui).

	some [Q] (
		create_unique(Q),
		X = foo(Q),
		Y = bar(Q)
	),
	share(X),
	use_uniquely(Y)		% Mode error, since Y became partly
				% shared when X was shared.
>>

The reason why we have to perform recompute_instmap_delta (which, BTW,
you can optimise by only re-running it if necessary; the fact that the
bug hasn't shown up until now seems to indicate that it's a rare enough
occurrence that doing a full recompute of the instmap_deltas when
necessary won't cost us that much) is that under the new regime, an
instmap_delta doesn't really mean anything on its own.  It is a space-
saving device, and all you can really do with them is:

	- Create one from two instmaps (i.e. compute the "difference")
	- Apply one to an instmap
	- Miscellaneous trivial stuff like testing if an instmap_delta
	  maps a reachable instmap into an unreachable one.

This is a design decision which was justified by how complex it was
to retro-fit onto the existing compiler the maintenance of instmap_deltas
the "old way" in the presence of aliasing.  I can't go through the
details right now (and I'm not sure I can remember them all anyway), but
the other alternatives which we tried at the time involved algorithms
that generated quadratically many new inst_keys based on the original
number of inst_keys, which was causing a significant slow-down.

Cheers,
Andrew Bromage
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list