[m-rev.] for review: [CTGC] user annotated sharing
Nancy.Mazur at cs.kuleuven.ac.be
Thu Jun 29 21:41:58 AEST 2006
> It isn't clear to me how this is supposed to work (but see comments about
> reference manual below.)
> The new foreign_proc attributes need to be documented in the reference
> manual - for the time being the documentation should be commented out
> but it should still be added now.
I've added some documentation in the reference manual. Cf. attachment.
Does it make it all a little more clear?
> Also, you will (most probably) need to update the predicate replace_in_item/9
> in compiler/equiv_type.m, so that equivalence types in the sharing information
> are expanded, i.e. that predicate needs to be modified to handle
> foreign_procs. I guess the smart recompilation system may also need to be
> changed for this - have a look at the type item_type in
Okay, I'm having a look at it...
>> + % Type to represent the sharing information that is manually added
>> + % to procedures writtin in foreign code.
> (although "implemented as foreign_procs." would be be better.)
>> +:- func add_foreign_code_sharing(module_info, proc_info, pred_proc_id,
>> + pragma_foreign_proc_attributes, prog_context, sharing_as) = sharing_as.
> That function would be more accurately named add_foreign_proc_sharing.
>> +:- pred sharing_as_from_user_annotated_sharing(
>> + pragma_foreign_proc_attributes::in, sharing_as::out) is semidet.
>> +sharing_as_from_user_annotated_sharing(Attributes, UserSharingAs) :-
>> + UserSharing = user_annotated_sharing(Attributes),
>> + UserSharing = user_sharing(SharingDomain, _MaybeTypes),
>> + % Accept only the value "bottom" and "real" for the structure sharing.
>> + % If the user has annotated the sharing with unknown sharing, we might
>> + % try to predict bottom anyway.
>> + some [!SharingAs] (
>> + (
>> + SharingDomain = structure_sharing_bottom,
>> + !:SharingAs = sharing_as_bottom
>> + ;
>> + SharingDomain = structure_sharing_real(_SharingPairs),
>> + !:SharingAs = from_structure_sharing_domain(SharingDomain)
>> + % XXX
>> + % I have the feeling that renaming should not be needed at this
>> + % place anymore, assuming that every foreign_proc call is
> That sentence is incomplete.
It was saying:
% I have the feeling that renaming should not be needed at this
% place anymore, assuming that every foreign_proc call is
% correctly handled at the add_pragma stage?
The thing is, I feel a little insecure with all the renaming in the
* when parsing, the sharing information is in terms of the vars and
typevars that are part of the same foreign_proc declaration.
* this is renamed when adding the pragma to the HLDS, so that everything
becomes in terms of the vars/typevars used in the pred_info for that
* during the actual sharing analysis, we need to handle foreign_proc
goals... and I have the feeling that the sharing recorded in its
attributes will definitely be in terms of the arguments of that
foreign_proc. But I am really unsure of this... okay, I could do
renaming anyway, but it would be good to know how things work there..
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 4294 bytes
Desc: not available
More information about the reviews