*/
/**
-* traverse an ir graph
-* - execute the pre function before recursion
-* - execute the post function after recursion
-*/
+ * @file irgwalk.c
+ *
+ * traverse an ir graph
+ * - execute the pre function before recursion
+ * - execute the post function after recursion
+ */
#ifdef HAVE_CONFIG_H
-# include <config.h>
+# include "config.h"
#endif
-#include <stdlib.h>
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
#include "irnode_t.h"
#include "irgraph_t.h" /* visited flag */
#include "irprog.h"
#include "irgwalk.h"
#include "typewalk.h"
-#include "firmstat.h"
+#include "irhooks.h"
#include "ircgcons.h"
#include "eset.h"
* Walk over an interprocedural graph (callgraph).
* Visits only graphs in irg_set.
*/
-static void irg_walk_cg(ir_node * node, int visited, eset * irg_set,
+static void irg_walk_cg(ir_node * node, unsigned long visited, eset * irg_set,
irg_walk_func *pre, irg_walk_func *post, void * env) {
int i;
ir_graph * rem = current_ir_graph;
if (get_interprocedural_view()) {
eset * irg_set = eset_create();
- int visited;
+ unsigned long visited;
ir_graph * irg;
assert(get_irp_ip_view_state() == ip_view_valid);
void irg_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env) {
ir_graph * rem = current_ir_graph;
- stat_irg_walk(irg, (void *)pre, (void *)post);
+ hook_irg_walk(irg, (generic_func *)pre, (generic_func *)post);
current_ir_graph = irg;
irg_walk(get_irg_end(irg), pre, post, env);
current_ir_graph = rem;
{
int i;
- if(get_Block_block_visited(node) < get_irg_block_visited(current_ir_graph)) {
- set_Block_block_visited(node, get_irg_block_visited(current_ir_graph));
+ if (Block_not_block_visited(node)) {
+ mark_Block_block_visited(node);
if(pre) pre(node, env);
ir_node *block, *pred;
int i;
- stat_irg_block_walk(current_ir_graph, node, (void *)pre, (void *)post);
+ hook_irg_block_walk(current_ir_graph, node, (generic_func *)pre, (generic_func *)post);
assert(node);
assert(!get_interprocedural_view()); /* interprocedural_view not implemented, because it
for (i = 0; i < arity; i++) {
pred = get_irn_n(node, i);
if (get_irn_op(pred) == op_Phi) {
- ir_node *block = get_nodes_block(pred);
+ ir_node *block = get_nodes_block(pred);
- if (! is_Bad(block))
+ if (! is_Bad(block))
irg_block_walk_2(block, pre, post, env);
}
}
/* Walk constant array bounds. */
for (i = 0; i < get_irp_n_types(); i++) {
type *tp = get_irp_type(i);
- if (is_array_type(tp)) {
+ if (is_Array_type(tp)) {
for (j = 0; j < get_array_n_dimensions(tp); j++) {
ir_node *n = get_array_lower_bound(tp, j);
if (n) irg_walk(n, pre, post, env);