Key corresponds to the identifiers that define the ranges in
Linearize instructions. Each instruction should have two sets of keys,
available_across, with accessor functions of these names being provided to retrieve them. The notion of "availability" is not prescribed. The availability sets are used to compute subranges associated to each key.
module Set : sig ... end
val print : Format.formatter -> t -> unit
Print a representation (typically sexp) of the given key to the given formatter.
In some situations, for performance reasons, an "available" set may only contain a subset of all keys that need to be tracked. For example, when using a notion of availability that describes which lexical block a given instruction lies in, using a standard notion of nested lexical blocks, the innermost lexical block uniquely determines the chain of its parents. (This is exploited in
all_parents function must return, given an "available"
key, all those other keys that are also available and uniquely determined by