#ifndef FLOWGRAPH_H #define FLOWGRAPH_H /// // Utilities for flowgraphs // ------------------------ #include struct entrypoint; struct basic_block; /// // Set the BB's reverse postorder links // Each BB will also have its 'order number' set. int cfg_postorder(struct entrypoint *ep); /// // Build the dominance tree. // Each BB will then have: // - a link to its immediate dominator (::idom) // - the list of BB it immediately dominates (::doms) // - its level in the dominance tree (::dom_level) void domtree_build(struct entrypoint *ep); /// // Test the dominance between two basic blocks. // @a: the basic block expected to dominate // @b: the basic block expected to be dominated // @return: ``true`` if @a dominates @b, ``false`` otherwise. bool domtree_dominates(struct basic_block *a, struct basic_block *b); #endif