sig
  type node
  val pretty :
    Stdlib.Format.formatter -> Region_analysis_sig.Node.node -> unit
  module Dict :
    sig
      type 'a t
      val create : int -> '-> 'Region_analysis_sig.Node.Dict.t
      val get :
        'Region_analysis_sig.Node.Dict.t ->
        Region_analysis_sig.Node.node -> 'a
      val set :
        'Region_analysis_sig.Node.Dict.t ->
        Region_analysis_sig.Node.node -> '-> unit
      val iter :
        'Region_analysis_sig.Node.Dict.t ->
        (Region_analysis_sig.Node.node -> '-> unit) -> unit
      val copy :
        'Region_analysis_sig.Node.Dict.t ->
        '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) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> 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 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 :
        'Region_analysis_sig.Node.Edge_Dict.t ->
        Region_analysis_sig.Node.node Region_analysis_sig.edge -> '-> unit
      val get :
        'Region_analysis_sig.Node.Edge_Dict.t ->
        Region_analysis_sig.Node.node Region_analysis_sig.edge -> 'a
      val create : unit -> 'Region_analysis_sig.Node.Edge_Dict.t
      val iter :
        'Region_analysis_sig.Node.Edge_Dict.t ->
        (Region_analysis_sig.Node.node Region_analysis_sig.edge -> '-> 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