Module PdgTypes.G

module G: sig .. end
The graph itself.

Program dependence graph main part : the nodes of the graph represent computations, and the edges represent the dependencies between these computations. Only a few functions are exported, to build the graph in pdg/build.ml. Iterating over the PDG should be done using the functions in module Pdg below


module E: sig .. end
module To: Hptmap.Make(PdgTypes.Node)(PdgTypes.DpdZone)(Hptmap.Comp_unused)(sig
val v : 'a list list
end)(sig
val l : State.t list
end)
module OneDir: PdgTypes.Node.Hashtbl.Make(To)
val add_node_one_dir : To.t PdgTypes.Node.Hashtbl.t -> PdgTypes.Node.Hashtbl.key -> unit
val add_edge_one_dir : To.t PdgTypes.Node.Hashtbl.t ->
PdgTypes.Node.Hashtbl.key -> To.key -> PdgTypes.DpdZone.t -> unit
val remove_edge_one_dir : To.t PdgTypes.Node.Hashtbl.t ->
PdgTypes.Node.Hashtbl.key -> To.key -> unit
val aux_iter_one_dir : ?rev:bool ->
(PdgTypes.Node.t -> PdgTypes.DpdZone.t -> PdgTypes.Node.t -> unit) ->
PdgTypes.Node.t -> To.t -> unit
val iter_e_one_dir : ?rev:bool ->
(PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> unit) ->
To.t PdgTypes.Node.Hashtbl.t -> PdgTypes.Node.Hashtbl.key -> unit
val fold_e_one_dir : ?rev:bool ->
(PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> 'a -> 'a) ->
To.t PdgTypes.Node.Hashtbl.t ->
PdgTypes.Node.Hashtbl.key -> 'a -> 'a
val fold_one_dir : (PdgTypes.Node.t -> 'a -> 'a) ->
To.t PdgTypes.Node.Hashtbl.t ->
PdgTypes.Node.Hashtbl.key -> 'a -> 'a
type g = {
   d_graph : OneDir.t;
   co_graph : OneDir.t;
}
include struct ... end
val add_node : g -> PdgTypes.Node.Hashtbl.key -> unit
val add_vertex : g -> PdgTypes.Node.Hashtbl.key -> unit
val add_edge : g ->
PdgTypes.Node.Hashtbl.key -> PdgTypes.DpdZone.t -> To.key -> unit
val remove_edge : g -> PdgTypes.Node.Hashtbl.key -> To.key -> unit
val find_edge : g ->
PdgTypes.Node.Hashtbl.key -> To.key -> PdgTypes.DpdZone.t
val iter_vertex : (PdgTypes.Node.Hashtbl.key -> unit) -> g -> unit
val iter_edges_e : (PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> unit) ->
g -> unit
val iter_succ_e : (PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> unit) ->
g -> PdgTypes.Node.Hashtbl.key -> unit
val fold_succ_e : (PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> 'a -> 'a) ->
g -> PdgTypes.Node.Hashtbl.key -> 'a -> 'a
val fold_pred_e : (PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> 'a -> 'a) ->
g -> PdgTypes.Node.Hashtbl.key -> 'a -> 'a
val iter_pred_e : (PdgTypes.Node.Hashtbl.key ->
PdgTypes.DpdZone.t -> PdgTypes.Node.Hashtbl.key -> unit) ->
g -> PdgTypes.Node.Hashtbl.key -> unit
val create : unit -> g
val find_dpd : g ->
PdgTypes.Node.Hashtbl.key ->
To.key ->
(PdgTypes.Node.Hashtbl.key * PdgTypes.DpdZone.t * To.key) *
PdgTypes.DpdZone.t
val add_elem : g -> PdgIndex.Key.t -> PdgTypes.Node.t
val simple_add_dpd : g ->
PdgTypes.Node.Hashtbl.key -> PdgTypes.DpdZone.t -> To.key -> unit
val replace_dpd : g ->
PdgTypes.Node.Hashtbl.key * 'a * To.key ->
PdgTypes.DpdZone.t -> unit
val add_dpd : g ->
PdgTypes.Node.Hashtbl.key ->
PdgTypes.Dpd.td -> Locations.Zone.t option -> To.key -> unit
val edge_dpd : 'a * PdgTypes.DpdZone.t * 'b -> PdgTypes.Dpd.t * Locations.Zone.t option
val pretty_edge_label : Format.formatter -> PdgTypes.DpdZone.t -> unit