[m-dev.] Associating information with HLDS goals.

Julien Fischer juliensf at csse.unimelb.edu.au
Thu Dec 27 04:17:38 AEDT 2007


On Wed, 26 Dec 2007, Paul Bone wrote:

> I've found that I'd like to associate some extra information with HLDS goals. 
> This information is only needed locally in deep_profining.m.  This 
> information describes weather a particular goal is trivial, and if a port 
> count is available at some point within or before that goal such that after 
> runtime it can be determined how often execution reaches the end of that 
> goal.
>
> I'm writing a code transformation that works backwards through HLDS goal 
> structures, and from inside to out.  That is, if it considers a conjunction, 
> first it will consider the conjunction as a whole, then each conjunct in 
> reverse order.  This is because information from goals after the current goal 
> is used in the decision of whether a coverage point should be inserted after 
> the current goal.
>
> However useful information can also be determined from goals before the 
> current goal, I believe the easiest way to handle this is to walk over the 
> HLDS first, in normal order and generate some information and associate it 
> with each goal.  Then a second pass in reverse can gather information that 
> can be gathered when walking over the HLDS in reverse order, it will also 
> apply the transformation.
>
> I could use a map to map each goal to the information associated with it as 
> found by the first pass, and look up this map for each goal in the second 
> pass.  I believe this would run in O(N log N) time.  Using an N-ary tree - A 
> tree where each node may have any number of sub-trees - I believe I can turn 
> this into linear time.  However it's quite messy, because I have to check 
> that the nary tree has the same number of branches as there are sub goals of 
> any goal and throw an exception otherwise in order to keep my code 
> deterministic.
>
> What I would really like is a structure that mimics the hlds_goal and 
> hlds_goal_expr structures, where the hlds_goal function symbol takes an extra 
> argument of arbitrary type T.  This would be useful for me, and will make my 
> code more simple.  I believe this will likely also be useful for others.  But 
> I'm wondering if this is the best option of if other similar problems have 
> been solved differently, or in which module I should add this data structure.
>
> Any Advice?

I suggest extending the hlds_goal_extra_info structure to hold the
extra information, as we do for the CTGC and RBMM systems.  Adding new
data structures that mimic the hlds_goal and hlds_goal_expr structures
would just be a maintainance headache - I don't think that is worth
doing unless there are particularly good reasons for doing so.

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



More information about the developers mailing list