X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fana%2Fcallgraph.c;h=dac267e3afc5ac5e8d4d8b30745d31054f90d42e;hb=d935aa267d00966c360931d2f0f43008030c0592;hp=372a978a5722981a873c7e5688f12d54bff9ce2e;hpb=599f2d24cc98e5389a0711cd0a91aba172b8637a;p=libfirm diff --git a/ir/ana/callgraph.c b/ir/ana/callgraph.c index 372a978a5..dac267e3a 100644 --- a/ir/ana/callgraph.c +++ b/ir/ana/callgraph.c @@ -52,10 +52,10 @@ #include "irgwalk.h" -static unsigned long master_cg_visited = 0; -static INLINE int cg_irg_visited (ir_graph *n); +static ir_visited_t master_cg_visited = 0; +static INLINE int cg_irg_visited (ir_graph *n); static INLINE void mark_cg_irg_visited(ir_graph *n); -static INLINE void set_cg_irg_visited (ir_graph *n, unsigned long i); +static INLINE void set_cg_irg_visited (ir_graph *n, ir_visited_t i); /** Returns the callgraph state of the program representation. */ irp_callgraph_state get_irp_callgraph_state(void) { @@ -386,32 +386,23 @@ static void do_walk(ir_graph *irg, callgraph_walk_func *pre, callgraph_walk_func post(irg, env); } -void callgraph_walk(ir_entity **roots, unsigned n_roots, - callgraph_walk_func *pre, callgraph_walk_func *post, void *env) { - //int i, n_irgs = get_irp_n_irgs(); - unsigned r; +void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env) { + int i, n_irgs = get_irp_n_irgs(); ++master_cg_visited; - for (r = 0; r < n_roots; ++r) { - ir_graph *irg = get_entity_irg(roots[r]); - if (irg == NULL) - continue; - - do_walk(irg, pre, post, env); - } - -#if 0 - for (i = 0; i < n_irgs; i++) { + /* roots are methods which have no callers in the current program */ + for (i = 0; i < n_irgs; ++i) { ir_graph *irg = get_irp_irg(i); - if (!cg_irg_visited(irg) && get_irg_n_callers(irg) == 0) + + if (get_irg_n_callers(irg) == 0) do_walk(irg, pre, post, env); } + + /* in case of unreachable call loops we haven't visited some irgs yet */ for (i = 0; i < n_irgs; i++) { ir_graph *irg = get_irp_irg(i); - if (!cg_irg_visited(irg)) - do_walk(irg, pre, post, env); + do_walk(irg, pre, post, env); } -#endif } /* ----------------------------------------------------------------------------------- */ @@ -465,14 +456,14 @@ static INLINE void mark_cg_irg_visited(ir_graph *irg) { /** * Set a graphs visited flag to i. */ -static INLINE void set_cg_irg_visited(ir_graph *irg, unsigned long i) { +static INLINE void set_cg_irg_visited(ir_graph *irg, ir_visited_t i) { irg->self_visited = i; } /** * Returns the visited flag of a graph. */ -static INLINE unsigned long get_cg_irg_visited(ir_graph *irg) { +static INLINE ir_visited_t get_cg_irg_visited(ir_graph *irg) { return irg->self_visited; } @@ -1018,7 +1009,7 @@ static void reset_isbe(void) { static void compute_loop_depth(ir_graph *irg, void *env) { int current_nesting = *(int *) env; int old_nesting = irg->callgraph_loop_depth; - unsigned long old_visited = get_cg_irg_visited(irg); + ir_visited_t old_visited = get_cg_irg_visited(irg); int i, n_callees; //return ;