X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=6fd63ce49b77f2f8bcee2d242c850627ceef0f22;hb=b597c7fd473086ca6374b2abbdf129f595c156d0;hp=4be2f5e67101fddacb8f05807df80222db806a78;hpb=e030f08f83164a988b67fcf0c0422418f0a16666;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 4be2f5e67..6fd63ce49 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -107,6 +107,8 @@ static int dump_node_idx_labels = 0; static int dump_anchors = 0; /** An option to dump the macro block edges. */ static int dump_macro_block_edges = 0; +/** An option to dump block marker in the block title */ +static int dump_block_marker = 0; int dump_dominator_information_flag = 0; int opt_dump_analysed_type_info = 1; @@ -255,6 +257,10 @@ void dump_macroblock_edges(int flag) { dump_macro_block_edges = flag; } +void dump_block_marker_in_title(int flag) { + dump_block_marker = flag; +} + /* -------------- some extended helper functions ----------------- */ /** @@ -602,9 +608,7 @@ static void collect_node(ir_node * node, void *env) { (void) env; if (is_Block(node) || node_floats(node) - || get_irn_op(node) == op_Bad - || get_irn_op(node) == op_Unknown - || get_irn_op(node) == op_NoMem) { + || (get_op_flags(get_irn_op(node)) & irop_flag_dump_noblock)) { ir_node ** arr = (ir_node **) ird_get_irg_link(get_irn_irg(node)); if (!arr) arr = NEW_ARR_F(ir_node *, 0); ARR_APP1(ir_node *, arr, node); @@ -638,13 +642,13 @@ static ir_node **construct_block_lists(ir_graph *irg) { #ifdef INTERPROCEDURAL_VIEW int rem_view = get_interprocedural_view(); #endif - int walk_flag = using_irn_visited(irg); + int walk_flag = ir_resources_reserved(irg) & IR_RESOURCE_IRN_VISITED; ir_graph *rem = current_ir_graph; current_ir_graph = irg; if(walk_flag) - clear_using_irn_visited(current_ir_graph); + ir_free_resources(irg, IR_RESOURCE_IRN_VISITED); for (i = get_irp_n_irgs() - 1; i >= 0; --i) ird_set_irg_link(get_irp_irg(i), NULL); @@ -666,7 +670,7 @@ static ir_node **construct_block_lists(ir_graph *irg) { #endif if(walk_flag) - set_using_irn_visited(current_ir_graph); + ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED); current_ir_graph = rem; return ird_get_irg_link(irg); @@ -816,7 +820,9 @@ int dump_node_opcode(FILE *F, ir_node *n) fprintf(F, "%s", get_irn_opname(n)); break; case iro_Block: - fprintf(F, "%s%s", is_Block_dead(n) ? "Dead " : "", get_irn_opname(n)); + fprintf(F, "%s%s%s", + is_Block_dead(n) ? "Dead " : "", get_irn_opname(n), + dump_block_marker ? (get_Block_mark(n) ? "*" : "") : ""); break; case iro_Conv: if (get_Conv_strict(n)) @@ -1437,18 +1443,26 @@ static void dump_node(FILE *F, ir_node *n) return; /* dump this node */ - fprintf(F, "node: {title: \""); PRINT_NODEID(n); fprintf(F, "\" label: \""); + fputs("node: {title: \"", F); + PRINT_NODEID(n); + fputs("\"", F); + fputs(" label: \"", F); bad = ! irn_vrfy_irg_dump(n, current_ir_graph, &p); bad |= dump_node_label(F, n); dump_node_ana_vals(F, n); //dump_node_ana_info(F, n); - fprintf(F, "\" "); + fputs("\" ", F); + + if (get_op_flags(get_irn_op(n)) & irop_flag_dump_noinput) { + //fputs(" node_class:23", F); + } + bad |= dump_node_info(F, n); print_node_error(F, p); print_dbg_info(F, get_irn_dbg_info(n)); dump_node_vcgattr(F, n, NULL, bad); - fprintf(F, "}\n"); + fputs("}\n", F); dump_const_node_local(F, n); if(dump_node_edge_hook) @@ -2028,15 +2042,15 @@ static void dump_enum_item(FILE *F, ir_type *tp, int pos) /* dumps a type or entity and it's edges. */ static void -dump_type_info(type_or_ent *tore, void *env) { +dump_type_info(type_or_ent tore, void *env) { FILE *F = env; int i = 0; /* to shutup gcc */ /* dump this type or entity */ - switch (get_kind(tore)) { + switch (get_kind(tore.ent)) { case k_entity: { - ir_entity *ent = (ir_entity *)tore; + ir_entity *ent = tore.ent; ir_node *value; /* The node */ dump_entity_node(F, ent, 0); @@ -2078,7 +2092,7 @@ dump_type_info(type_or_ent *tore, void *env) { break; } case k_type: { - ir_type *tp = (ir_type *)tore; + ir_type *tp = tore.typ; dump_type_node(F, tp); /* and now the edges */ switch (get_type_tpop_code(tp)) { @@ -2145,17 +2159,18 @@ typedef struct _h_env { * If env->dump_ent dumps entities of classes and overwrites edges. */ static void -dump_class_hierarchy_node(type_or_ent *tore, void *ctx) { +dump_class_hierarchy_node(type_or_ent tore, void *ctx) { h_env_t *env = ctx; FILE *F = env->f; int i = 0; /* to shutup gcc */ /* dump this type or entity */ - switch (get_kind(tore)) { + switch (get_kind(tore.ent)) { case k_entity: { - ir_entity *ent = (ir_entity *)tore; + ir_entity *ent = tore.ent; if (get_entity_owner(ent) == get_glob_type()) break; - if (!is_Method_type(get_entity_type(ent))) break; /* GL */ + if (!is_Method_type(get_entity_type(ent))) + break; /* GL */ if (env->dump_ent && is_Class_type(get_entity_owner(ent))) { /* The node */ dump_entity_node(F, ent, 0); @@ -2167,8 +2182,9 @@ dump_class_hierarchy_node(type_or_ent *tore, void *ctx) { break; } case k_type: { - ir_type *tp = (ir_type *)tore; - if (tp == get_glob_type()) break; + ir_type *tp = tore.typ; + if (tp == get_glob_type()) + break; switch (get_type_tpop_code(tp)) { case tpo_class: dump_type_node(F, tp); @@ -2326,6 +2342,7 @@ void dump_vcg_header(FILE *F, const char *name, const char *layout, const char * "classname 20: \"Keep Alive\"\n" "classname 21: \"Out Edges\"\n" "classname 22: \"Macro Block Edges\"\n" + //"classname 23: \"NoInput Nodes\"\n" "infoname 1: \"Attribute\"\n" "infoname 2: \"Verification errors\"\n" "infoname 3: \"Debug info\"\n",