1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
4 * Author: Boris Boesler
7 * - execute the pre function before recursion
8 * - execute the post function after recursion
10 * Uses current_ir_graph (from irgraph.h)!!! Set it to the proper
11 * graph before starting the walker.
21 /* type of callback function for ir_graph walk */
22 #ifndef _IRG_WALK_FUNC_TYPEDEF_
23 #define _IRG_WALK_FUNC_TYPEDEF_
25 * The type of a walk function.
27 * @param node - the node that is just visited
28 * @param env - an environment pointer passed by the walk functions
30 typedef void irg_walk_func(ir_node *node, void *env);
33 /** Allocates some necessary datastructures. */
34 void init_ip_walk(void);
36 /** Frees some necessary datastructures. */
37 void finish_ip_walk(void);
40 * Walks over the ir graph.
42 * @param node - the start node
43 * @param pre - walker function, executed before the predecessor of a node are visited
44 * @param post - walker function, executed after the predecessor of a node are visited
45 * @param env - environment, passend to pre and post
47 * Walks over the ir graph, starting at the node given as first argument.
48 * Executes pre before visiting the predecessor of a node, post after.
49 * irg_walk uses the visited flag in irg and the nodes to determine visited
50 * nodes. It executes inc_irg_visited(current_ir_graph) to generate a new
51 * flag. It marks the node as visited before executing pre.
52 * The void* env can be used to pass status information between the
53 * pre and post functions.
55 void irg_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env);
58 * Walks over all reachable nodes in the ir graph.
60 * @param irg - the irg graph
61 * @param pre - walker function, executed before the predecessor of a node are visited
62 * @param post - walker function, executed after the predecessor of a node are visited
63 * @param env - environment, passend to pre and post
65 * Like irg_walk(), but walks over all reachable nodes in the ir
66 * graph, starting at the end operation. During the walk current_ir_graph
69 void irg_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env);
72 * Executes irg_walk(end, pre, post, env) for all irgraphs in irprog.
74 * @param pre - walker function, executed before the predecessor of a node are visited
75 * @param post - walker function, executed after the predecessor of a node are visited
76 * @param env - environment, passend to pre and post
78 * This function executes irg_walk(end, pre, post, env) for all irgraphs in irprog.
79 * Sets current_ir_graph properly for each walk. Conserves current
80 * current_ir_graph. In interprocedural view nodes can be visited several
83 void all_irg_walk(irg_walk_func *pre, irg_walk_func *post, void *env);
86 * Walks all irgs in interprocedural view.
88 * @param pre - walker function, executed before the predecessor of a node are visited
89 * @param post - walker function, executed after the predecessor of a node are visited
90 * @param env - environment, passend to pre and post
92 * This function walks all irgs in interprocedural view.
93 * Visits each node only once.Sets current_ir_graph properly.
95 void cg_walk(irg_walk_func *pre, irg_walk_func *post, void *env);
98 * Walks only over Block nodes in the graph.
100 * @param node - the start node
101 * @param pre - walker function, executed before the predecessor of a node are visited
102 * @param post - walker function, executed after the predecessor of a node are visited
103 * @param env - environment, passend to pre and post
105 * This function Walks only over Block nodes in the graph. Has it's own visited
106 * flag, so that it can be interleaved with the other walker.
107 * If a none block is passed, starts at the block this node belongs to.
108 * If end is passed also visites kept alive blocks.
110 void irg_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env);
113 * Walks only over reachable Block nodes in the graph.
115 * @param irg - the irg graph
116 * @param pre - walker function, executed before the predecessor of a node are visited
117 * @param post - walker function, executed after the predecessor of a node are visited
118 * @param env - environment, passend to pre and post
120 * Like irg_block_walk(), but walks over all reachable blocks in the
121 * ir graph, starting at the end block.
123 void irg_block_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env);
126 * Walks over all code in const_code_irg.
128 * @param pre - walker function, executed before the predecessor of a node are visited
129 * @param post - walker function, executed after the predecessor of a node are visited
130 * @param env - environment, passend to pre and post
132 * This function walks over all code in const_code_irg.
133 * Uses visited flag in const_code_irg.
135 void walk_const_code(irg_walk_func *pre, irg_walk_func *post, void *env);
137 # endif /* _IRGWALK_H_ */