package grenier
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=8fd22abf9f4589c206008654fa9eebb1cf4a58737ebb34138c6709520f36b75f
sha512=f60315eccfecaec9cb4c3bd020ef6f94d05ed6b13038109b904ead6e4e5662f4ed95415855b3c763293b762b696f1962045393fd592742d54cf5607d0ef2961a
doc/grenier.fastdom/Fastdom/index.html
Module FastdomSource
A library to compute graph dominators using "A Simple, Fast Dominance Algorithm" by Keith D. Cooper, Timothy J. Harvey, Ken Kennedy.
Graph representation
type 'a graph = {memoize : 'b. ('a -> 'b) -> 'a -> 'b;(*
*)memoize fmemoizes a functionfover nodes of the graph. The function returned must evaluatef xat most once for each nodex. Iffraises an exception, the same exception must be propagated to the caller but it is not necessary to memoize it.successors : 'b. ('b -> 'a -> 'b) -> 'b -> 'a -> 'b;(*
*)successors f acc nfold over the successors of noden, threading and updating theaccvalue.
}Abstraction of graphs with nodes of type 'a. Instance of graph must be provided by the user of the library.
Dominance information
Dominance information for a vertex of type 'a
dominator (node n) returns the information associated to the dominator of n. If n is its own dominator, then dominator (node n) == node n.
is_reachable (node n) returns true iff n is reachable from entrypoint following the successors relation.
postorder_index (node n) is the index of n in the postorder traversal of the graph (see dominance), starting from 0.
If n was not reachable from the entrypoint, post_order_index (node n) = -1
Though in this case, it is better to use is_reachable before to check the validity of the node.
Reverse the successors relation (on the subset of the graph reachable from entrypoint).
Dominance computation
dominance graph entrypoint = (info, map) computes the dominators of graph starting from entrypoint.
The info array is indexed by the postorder index of a vertex, see postorder_index.
map n is the dominance information of node n. If n is not reachable from entrypoint, then is_reachable (map n) = false.