Frama-C API - Dominators
Module to perform dominators and postdominators analyses. This module was completely redesigned and provides many new functions.
A dominator d of s is a statement such that all paths from the entry point of a function to s must go through d.
A postdominator p of s is a statement such that all paths from s to the return point of the function must go through p.
By definition, a statement always (post)dominates itself (except if it is unreachable).
An immediate (post)dominator (or i(post)dom) d is the unique (post)dominator of s that strictly (post)dominates s but is (post)dominated by all other (post)dominators of s.
A common ancestor (or child) of a list of statements is a (post)dominator that (post)dominates all the statements
val compute_dominators : Cil_types.kernel_function -> unitCompute the Dominators analysis and register its result.
val compute_postdominators : Cil_types.kernel_function -> unitCompute the Postdominators analysis and register its result.
val get_dominators : Cil_types.stmt -> Cil_datatype.Stmt.Hptset.tReturn the set of dominators of the given statement. The empty set means the statement is unreachable.
val get_postdominators : Cil_types.stmt -> Cil_datatype.Stmt.Hptset.tReturn the set of postdominators of the given statement. The empty set means the statement is unreachable.
val get_strict_dominators : Cil_types.stmt -> Cil_datatype.Stmt.Hptset.tSame as get_dominators but exclude the statement itself. The empty set means the statement is unreachable or is only dominated by itself.
val get_strict_postdominators : Cil_types.stmt -> Cil_datatype.Stmt.Hptset.tSame as get_postdominators but exclude the statement itself. The empty set means the statement is unreachable or is only post-dominated by itself.
val dominates : Cil_types.stmt -> Cil_types.stmt -> booldominates a b return true if a dominates b.
val postdominates : Cil_types.stmt -> Cil_types.stmt -> boolpostdominates a b return true if a postdominates b.
val strictly_dominates : Cil_types.stmt -> Cil_types.stmt -> boolstrictly_dominates a b return true if a strictly dominates b.
val strictly_postdominates : Cil_types.stmt -> Cil_types.stmt -> boolstrictly_postdominates a b return true if a strictly postdominates b.
val get_idom : Cil_types.stmt -> Cil_types.stmt optionReturn the immediate dominator of the given statement.
val get_ipostdom : Cil_types.stmt -> Cil_types.stmt optionReturn the immediate postdominator of the given statement.
val nearest_common_ancestor : Cil_types.stmt list -> Cil_types.stmt optionReturn the closest common ancestor of the given statement list.
val nearest_common_child : Cil_types.stmt list -> Cil_types.stmt optionReturn the closest common child of the given statement list.
Print the result of the domination analysis. Each statement is either dominated by a set of statements, or Top if unreachable.
Print the result of the postdomination analysis. Each statement is either postdominated by a set of statements, or Top if unreachable.
val print_dot_dominators : string -> Cil_types.kernel_function -> unitPrint the domination graph in a file basename.function_name.dot.
val print_dot_postdominators : string -> Cil_types.kernel_function -> unitPrint the postdomination graph in a file basename.function_name.dot.
