local refs

Matthew Fluet fluet@CS.Cornell.EDU
Mon, 10 Dec 2001 13:57:16 -0500 (EST)


> > x_208258 Violations: (plists_92)
> > 
> > which looks like something to do with property-lists.
> 
> Yeah, this is cool.  It is from a property that has the "destroy"
> capability.  plists is a list ref maintaining the list of property
> lists on which the property has been stored.  This is quite possibly
> the extract function in ssa/shrink.fun, which is small enough that one
> could believe that all the uses of the property are in a single
> control-flow graph.

Could also be stuff in directed-graph.sml; dfsNodes looks like it's
destroy could be flattened out.

> > No problems on any of the regressions.  I don't know if it's really doing
> > anything different.
> 
> The old once pass assumed all functions other than main were
> multiUsed, so there is the possibility that Multi.multi is doing
> something different.  I vote for removing the old once pass, replacing
> the use with this, and renaming once.sml to multi.sml.

Fine by me; just wanted someone to give it a sanity check.  For example,
the old once pass marks variables as once if their block is used once and
their defining expression is an Array_array or Ref_ref.  Everything else
seems to get false.  And then, in constantPropagation, at the place where
the once predicate is checked, we immediately kick out anything of type
array.  So, it seems like only refs have something interesting done to
them.