1#ifndef FLOWGRAPH_H 2#define FLOWGRAPH_H 3 4/// 5// Utilities for flowgraphs 6// ------------------------ 7 8#include <stdbool.h> 9 10struct entrypoint; 11struct basic_block; 12 13/// 14// Set the BB's reverse postorder links 15// Each BB will also have its 'order number' set. 16int cfg_postorder(struct entrypoint *ep); 17 18/// 19// Build the dominance tree. 20// Each BB will then have: 21// - a link to its immediate dominator (::idom) 22// - the list of BB it immediately dominates (::doms) 23// - its level in the dominance tree (::dom_level) 24void domtree_build(struct entrypoint *ep); 25 26/// 27// Test the dominance between two basic blocks. 28// @a: the basic block expected to dominate 29// @b: the basic block expected to be dominated 30// @return: ``true`` if @a dominates @b, ``false`` otherwise. 31bool domtree_dominates(struct basic_block *a, struct basic_block *b); 32 33#endif 34