From: Michael Beck Date: Thu, 6 Apr 2006 15:29:09 +0000 (+0000) Subject: anchors can be dumped yet always X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=f1a3d0394f0923ab574eb4153a1995390a488edb;p=libfirm anchors can be dumped yet always [r7591] --- diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 7987953ae..f7e2b9ab8 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -81,11 +81,14 @@ static int dump_keepalive = 0; /** An option to dump ld_names instead of names. */ static int dump_ld_name = 1; /** Compiler options to dump analysis information in dump_ir_graph */ -int dump_out_edge_flag = 0; +static int dump_out_edge_flag = 0; +static int dump_loop_information_flag = 0; +static int dump_backedge_information_flag = 1; +static int dump_const_local = 0; +/** An option to dump all graph anchors */ +static int dump_anchors = 0; + int dump_dominator_information_flag = 0; -int dump_loop_information_flag = 0; -int dump_backedge_information_flag = 1; -int dump_const_local = 0; int opt_dump_analysed_type_info = 1; int opt_dump_pointer_values_to_info = 0; /* default off: for test compares!! */ @@ -125,7 +128,7 @@ void set_dump_edge_vcgattr_hook(DUMP_EDGE_VCGATTR_FUNC hook) { dump_edge_vcgattr_hook = hook; } -INLINE int get_opt_dump_const_local(void) { +int get_opt_dump_const_local(void) { if (!dump_out_edge_flag && !dump_loop_information_flag) return dump_const_local; else @@ -201,6 +204,10 @@ void dump_ld_names(int flag) { dump_ld_name = flag; } +void dump_all_anchors(int flag) { + dump_anchors = flag; +} + /* -------------- some extended helper functions ----------------- */ /** @@ -494,6 +501,27 @@ static int node_floats(ir_node *n) { (get_irg_pinned(current_ir_graph) == op_pin_state_floats)); } +/** + * Walker that visits the anchors + */ +static void ird_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env) { + irg_walk_graph(irg, pre, post, env); + + if (dump_anchors) { + int i; + + for (i = anchor_max - 1; i >= 0; --i) { + ir_node *n = irg->anchors[i]; + + if (n) { + /* reset the visit flag: will be increase in the walker */ + set_irg_visited(irg, get_irg_visited(irg) - 1); + irg_walk(n, pre, post, env); + } + } + } +} + /** * Walker, allocates an array for all blocks and puts it's nodes non-floating nodes into this array. */ @@ -540,7 +568,7 @@ static ir_node **construct_block_lists(ir_graph *irg) { for (i = get_irp_n_irgs() - 1; i >= 0; --i) ird_set_irg_link(get_irp_irg(i), NULL); - irg_walk_graph(current_ir_graph, clear_link, collect_node, current_ir_graph); + ird_walk_graph(current_ir_graph, clear_link, collect_node, current_ir_graph); /* Collect also EndReg and EndExcept. We do not want to change the walker. */ set_interprocedural_view(0); @@ -2272,7 +2300,7 @@ dump_ir_graph (ir_graph *irg, const char *suffix ) /* walk over the graph */ /* dump_whole_node must be called in post visiting predecessors */ - irg_walk(get_irg_end(irg), NULL, dump_whole_node, f); + ird_walk_graph(irg, NULL, dump_whole_node, f); /* dump the out edges in a separate walk */ if ((dump_out_edge_flag) && (get_irg_outs_state(irg) != outs_none)) { diff --git a/ir/ir/irdump.h b/ir/ir/irdump.h index 96a9b6cce..1808ee40e 100644 --- a/ir/ir/irdump.h +++ b/ir/ir/irdump.h @@ -644,4 +644,11 @@ void dump_pointer_values_to_info(int flag); */ void dump_ld_names(int flag); +/** Dumps all graph anchor nodes, even if they + * are dead. + * + * This option is off per default. + */ +void dump_all_anchors(int flag); + # endif /* _IRDUMP_H_ */