Compute_ranges_intf.S
This module type is the result type of the Compute_ranges.Make
functor.
The _ranges_ being computed are composed of contiguous _subranges_ delimited by two labels (of type Linear.label
). These labels will be added by this pass to the code being inspected, which is why the create
function in the result of the functor returns not only the ranges but also the updated function with the labels added. The start_pos_offset
and end_pos_offset
components of the subranges are there to allow a distinction between ranges starting (or ending) right at the start of the corresponding instruction (offset of zero), and ranges starting or ending one byte after the actual instruction (offset of one).
module Index : Identifiable.S
Corresponds to Index
in the S_functor
module type.
module Key : sig ... end
Corresponds to Key
in the S_functor
module type.
module Subrange_state : S_subrange_state
Corresponds to Subrange_state
in the S_functor
module type.
module Subrange_info : S_subrange_info with type key := Key.t with type subrange_state := Subrange_state.t
Corresponds to Subrange_info
in the S_functor
module type.
module Range_info : S_range_info with type key := Key.t with type index := Index.t
Corresponds to Range_info
in the S_functor
module type.
module Subrange : sig ... end
module Range : sig ... end
val empty : t
A value of type t
that holds no range information.
val create : Linear.fundecl -> t * Linear.fundecl
Compute ranges for the code in the given linearized function declaration, returning the ranges as a value of type t
and the rewritten code that must go forward for emission.
Iterate through ranges. Each range is associated with an index.
val all_indexes : t -> Index.Set.t
All indexes for which the given value of type t
contains ranges.
val rewrite_labels_and_remove_empty_subranges_and_ranges : t -> env:int Numbers.Int.Map.t -> t
An internal function used by Coalesce_labels
. The env
should come from Coalesce_labels.fundecl
.