X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgwalk.c;h=dd986323b55df24ef61182b83146ce5b75033deb;hb=637542932dc27dcdfc7def09b58d9d5d4c34fb77;hp=3661b4115ae937093e3c9e29acc59709cbb594b1;hpb=c80c368f7ae4222880121ed11c78ecd4cc5dec18;p=libfirm diff --git a/ir/ir/irgwalk.c b/ir/ir/irgwalk.c index 3661b4115..dd986323b 100644 --- a/ir/ir/irgwalk.c +++ b/ir/ir/irgwalk.c @@ -11,31 +11,38 @@ */ /** -* 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 +# include "config.h" #endif -#include +#ifdef HAVE_STDLIB_H +# include +#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" #include "array.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, +/** + * Walk over an interprocedural graph (callgraph). + * Visits only graphs in 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; @@ -105,13 +112,15 @@ static void irg_walk_cg(ir_node * node, int visited, eset * irg_set, } -/* Insert all ir_graphs in irg_set, that are (transitive) reachable. */ +/** + * Insert all ir_graphs in irg_set, that are (transitive) reachable. + */ static void collect_irgs(ir_node * node, eset * irg_set) { if (get_irn_op(node) == op_Call) { int i; for (i = get_Call_n_callees(node) - 1; i >= 0; --i) { entity * ent = get_Call_callee(node, i); - ir_graph * irg = ent ? get_entity_irg(ent) : NULL; + ir_graph * irg = get_entity_irg(ent); if (irg && !eset_contains(irg_set, irg)) { eset_insert(irg_set, irg); irg_walk_graph(irg, (irg_walk_func *) collect_irgs, NULL, irg_set); @@ -210,7 +219,7 @@ void irg_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env) 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); @@ -231,11 +240,13 @@ void irg_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env) return; } - +/* + * walk over a graph + */ 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, (void *)pre, (void *)post); current_ir_graph = irg; irg_walk(get_irg_end(irg), pre, post, env); current_ir_graph = rem; @@ -419,7 +430,7 @@ void irg_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void 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, (void *)pre, (void *)post); assert(node); assert(!get_interprocedural_view()); /* interprocedural_view not implemented, because it @@ -453,7 +464,9 @@ void irg_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void return; } - +/* + * walk over a graph block wise + */ void irg_block_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env) { ir_graph * rem = current_ir_graph; @@ -470,7 +483,9 @@ typedef struct walk_env { void *env; } walk_env; -/* Walk to all constant expressions in this entity. */ +/** + * Walk to all constant expressions in this entity. + */ static void walk_entity(entity *ent, void *env) { walk_env *my_env = (walk_env *)env; @@ -480,9 +495,9 @@ static void walk_entity(entity *ent, void *env) irg_walk(get_atomic_ent_value(ent), my_env->pre, my_env->post, my_env->env); } else { - int i, n = get_compound_ent_n_values(ent); + int i, n_vals = get_compound_ent_n_values(ent); - for (i = 0; i < n; i++) + for (i = 0; i < n_vals; i++) irg_walk(get_compound_ent_value(ent, i), my_env->pre, my_env->post, my_env->env); } } @@ -511,13 +526,12 @@ void walk_const_code(irg_walk_func *pre, irg_walk_func *post, void *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; - n = get_array_lower_bound(tp, j); - if (n) irg_walk(n, pre, post, env); - n = get_array_upper_bound(tp, j); - if (n) irg_walk(n, pre, post, env); + ir_node *n = get_array_lower_bound(tp, j); + if (n) irg_walk(n, pre, post, env); + n = get_array_upper_bound(tp, j); + if (n) irg_walk(n, pre, post, env); } } }