projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
and again
[libfirm]
/
ir
/
ana
/
callgraph.c
diff --git
a/ir/ana/callgraph.c
b/ir/ana/callgraph.c
index
b9102de
..
dac267e
100644
(file)
--- a/
ir/ana/callgraph.c
+++ b/
ir/ana/callgraph.c
@@
-386,28
+386,22
@@
static void do_walk(ir_graph *irg, callgraph_walk_func *pre, callgraph_walk_func
post(irg, env);
}
post(irg, env);
}
-void callgraph_walk(ir_entity **roots, unsigned n_roots,
- callgraph_walk_func *pre, callgraph_walk_func *post, void *env) {
+void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env) {
int i, n_irgs = get_irp_n_irgs();
int i, n_irgs = get_irp_n_irgs();
- unsigned r;
++master_cg_visited;
++master_cg_visited;
- for (r = 0; r < n_roots; ++r) {
- ir_graph *irg = get_entity_irg(roots[r]);
- if (irg == NULL)
- continue;
+ /* 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);
- do_walk(irg, pre, post, env);
+ if (get_irg_n_callers(irg) == 0)
+ do_walk(irg, pre, post, env);
}
}
- /* cgana "optimizes" the graph instead of just analysing it so the
- * roots list isn't even correct anymore when passed to this method...
- * so we hack around this and search for more unreferenced/free
- * methods... */
+ /* 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);
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);
}
}
}
}