blob: 5a9c26073554ff2b7fe35a677cb0cdc213daa203 [file] [log] [blame]
#ifndef FLOWGRAPH_H
#define FLOWGRAPH_H
///
// Utilities for flowgraphs
// ------------------------
#include <stdbool.h>
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