2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
8 * @author Sebastian Hack
12 * Abstract graph implementations for the CFG of a ir_graph.
16 #include "irgraph_t.h"
17 #include "iredges_t.h"
20 static void *irg_cfg_succ_get_root(void *self)
22 ir_graph *irg = (ir_graph*) self;
23 assure_edges_kind(irg, EDGE_KIND_BLOCK);
24 return get_irg_start_block(irg);
27 static void *irg_cfg_succ_get_end(void *self)
29 ir_graph *irg = (ir_graph*) self;
30 return get_irg_end_block(irg);
33 static void irg_cfg_succ_grow_succs(void *self, void *node, struct obstack *obst)
35 ir_node *bl = (ir_node*) node;
38 foreach_block_succ(bl, edge) {
39 obstack_ptr_grow(obst, get_edge_src_irn(edge));
43 const absgraph_t absgraph_irg_cfg_succ = {
44 irg_cfg_succ_get_root,
45 irg_cfg_succ_grow_succs,
49 static void *irg_cfg_pred_get_root(void *self)
51 return get_irg_end_block((ir_graph*) self);
54 static void *irg_cfg_pred_get_end(void *self)
56 return get_irg_start_block((ir_graph*) self);
59 static void irg_cfg_pred_grow_succs(void *self, void *node, struct obstack *obst)
64 for (i = 0, n = get_irn_arity((ir_node*) node); i < n; ++i) {
65 obstack_ptr_grow(obst, get_irn_n((ir_node*) node, i));
69 const absgraph_t absgraph_irg_cfg_pred = {
70 irg_cfg_pred_get_root,
71 irg_cfg_pred_grow_succs,