sig
type 'node edge = Edge of 'node * 'node | Exit of 'node
module type Node =
sig
type node
val pretty :
Stdlib.Format.formatter -> Region_analysis_sig.Node.node -> unit
module Dict :
sig
type 'a t
val create : int -> 'a -> 'a Region_analysis_sig.Node.Dict.t
val get :
'a Region_analysis_sig.Node.Dict.t ->
Region_analysis_sig.Node.node -> 'a
val set :
'a Region_analysis_sig.Node.Dict.t ->
Region_analysis_sig.Node.node -> 'a -> unit
val iter :
'a Region_analysis_sig.Node.Dict.t ->
(Region_analysis_sig.Node.node -> 'a -> unit) -> unit
val copy :
'a Region_analysis_sig.Node.Dict.t ->
'a Region_analysis_sig.Node.Dict.t
end
module Set :
sig
type elt = node
type t
val empty : t
val is_empty : t -> bool
val mem : elt -> t -> bool
val add : elt -> t -> t
val singleton : elt -> t
val remove : elt -> t -> t
val union : t -> t -> t
val inter : t -> t -> t
val disjoint : t -> t -> bool
val diff : t -> t -> t
val compare : t -> t -> int
val equal : t -> t -> bool
val subset : t -> t -> bool
val iter : (elt -> unit) -> t -> unit
val map : (elt -> elt) -> t -> t
val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (elt -> bool) -> t -> bool
val exists : (elt -> bool) -> t -> bool
val filter : (elt -> bool) -> t -> t
val filter_map : (elt -> elt option) -> t -> t
val partition : (elt -> bool) -> t -> t * t
val cardinal : t -> int
val elements : t -> elt list
val min_elt : t -> elt
val min_elt_opt : t -> elt option
val max_elt : t -> elt
val max_elt_opt : t -> elt option
val choose : t -> elt
val choose_opt : t -> elt option
val split : elt -> t -> t * bool * t
val find : elt -> t -> elt
val find_opt : elt -> t -> elt option
val find_first : (elt -> bool) -> t -> elt
val find_first_opt : (elt -> bool) -> t -> elt option
val find_last : (elt -> bool) -> t -> elt
val find_last_opt : (elt -> bool) -> t -> elt option
val of_list : elt list -> t
val to_seq_from : elt -> t -> elt Seq.t
val to_seq : t -> elt Seq.t
val to_rev_seq : t -> elt Seq.t
val add_seq : elt Seq.t -> t -> t
val of_seq : elt Seq.t -> t
end
module Graph :
sig
val iter_succs :
Region_analysis_sig.Node.node ->
(Region_analysis_sig.Node.node -> unit) -> unit
val iter_preds :
Region_analysis_sig.Node.node ->
(Region_analysis_sig.Node.node -> unit) -> unit
val all_nodes : Region_analysis_sig.Node.Set.t
val entry_node : Region_analysis_sig.Node.node
val exit_nodes : Region_analysis_sig.Node.node list
end
module DomTree :
sig
val dominates :
Region_analysis_sig.Node.node ->
Region_analysis_sig.Node.node -> bool
val domtree_postfix_iter :
(Region_analysis_sig.Node.node -> unit) -> unit
end
module Edge_Dict :
sig
type 'a t
val set :
'a Region_analysis_sig.Node.Edge_Dict.t ->
Region_analysis_sig.Node.node Region_analysis_sig.edge ->
'a -> unit
val get :
'a Region_analysis_sig.Node.Edge_Dict.t ->
Region_analysis_sig.Node.node Region_analysis_sig.edge -> 'a
val create : unit -> 'a Region_analysis_sig.Node.Edge_Dict.t
val iter :
'a Region_analysis_sig.Node.Edge_Dict.t ->
(Region_analysis_sig.Node.node Region_analysis_sig.edge ->
'a -> unit) ->
unit
end
type abstract_value
val compile_node :
Region_analysis_sig.Node.node ->
Region_analysis_sig.Node.abstract_value ->
(Region_analysis_sig.Node.node Region_analysis_sig.edge *
Region_analysis_sig.Node.abstract_value)
list
val join :
Region_analysis_sig.Node.abstract_value list ->
Region_analysis_sig.Node.abstract_value
val mu :
(Region_analysis_sig.Node.abstract_value ->
Region_analysis_sig.Node.abstract_value) ->
Region_analysis_sig.Node.abstract_value ->
Region_analysis_sig.Node.abstract_value
end
end