foreach_out_edge(node, edge) {
ir_node* src = get_edge_src_irn(edge);
- if(!bitset_is_set(env->reachable, get_irn_idx(src))) {
- if(src != get_irg_globals(irg)
- && src != get_irg_tls(irg)) {
- ir_fprintf(stderr,
- "Verify warning: Node %+F in block %+F(%s) only reachable through out edges from %+F\n",
- src, get_nodes_block(src), get_irg_dump_name(irg), node);
- env->problem_found = 1;
- }
+ if(!bitset_is_set(env->reachable, get_irn_idx(src)) && !is_Block(node)) {
+ ir_fprintf(stderr, "Verify warning: Node %+F in block %+F(%s) only reachable through out edges from %+F\n",
+ src, get_nodes_block(src), get_irg_dump_name(irg), node);
+ env->problem_found = 1;
continue;
}
- if(!is_Block(src)) {
- check_out_edges(src, env);
- }
+ check_out_edges(src, env);
}
}
int be_verify_out_edges(ir_graph *irg) {
verify_out_dead_nodes_env env;
- env.irg = irg;
- env.reachable = bitset_alloca(get_irg_last_idx(irg));
- env.problem_found = 0;
- irg_walk_graph(irg, set_reachable, NULL, env.reachable);
+ env.irg = irg;
+ env.reachable = bitset_alloca(get_irg_last_idx(irg));
+ env.problem_found = edges_verify(irg);
+
+ irg_walk_in_or_dep_graph(irg, set_reachable, NULL, env.reachable);
+ irg_walk_anchors(irg, set_reachable, NULL, env.reachable);
inc_irg_visited(irg);
check_out_edges(get_irg_start(irg), &env);
- return !env.problem_found;
+ return ! env.problem_found;
}