module G:sig
..end
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 : |
|
co_graph : |
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