X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=7d1caaf7c5d5bc74a2c1cb9f583c5187df23dd19;hb=e3b765fcef0e337f4fe2e17d57d2fbaf1912ec79;hp=105a3668afd1744939b33fd029686d775c1bf526;hpb=e3f51845a3d0fc2162e36fba3eea5b17a913fe38;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 105a3668a..7d1caaf7c 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -404,7 +404,6 @@ static void print_enum_item_edge(FILE *F, const ir_type *tp, size_t item, const /* global and ahead declarations */ /*-----------------------------------------------------------------*/ -static void dump_node_with_edges(ir_node *n, void *env); static void dump_loop_nodes_into_graph(FILE *F, ir_graph *irg); /*-----------------------------------------------------------------*/ @@ -540,7 +539,7 @@ static void ird_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *pos } /** - * Walker, allocates an array for all blocks and puts it's nodes non-floating + * Walker, allocates an array for all blocks and puts their non-floating * nodes into this array. */ static void collect_node(ir_node *node, void *env) @@ -691,18 +690,16 @@ void dump_node_opcode(FILE *F, ir_node *n) } break; case iro_Load: - if (get_Load_align(n) == align_non_aligned) + if (get_Load_unaligned(n) == align_non_aligned) fprintf(F, "ua"); fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Load_mode(n), NULL)); break; case iro_Store: - if (get_Store_align(n) == align_non_aligned) + if (get_Store_unaligned(n) == align_non_aligned) fprintf(F, "ua"); fprintf(F, "%s", get_irn_opname(n)); break; case iro_Block: - if (is_Block_dead(n)) - fputs("Dead ", F); if (n == get_irg_start_block(get_irn_irg(n))) fputs("Start ", F); if (n == get_irg_end_block(get_irn_irg(n))) @@ -807,8 +804,8 @@ typedef struct proj_lookup { static const pns_lookup_t start_lut[] = { #define X(a) { pn_Start_##a, #a } X(X_initial_exec), + X(M), X(P_frame_base), - X(P_tls), X(T_args), #undef X }; @@ -828,7 +825,6 @@ static const pns_lookup_t call_lut[] = { X(X_regular), X(X_except), X(T_result), - X(P_value_res_base) #undef X }; @@ -1008,13 +1004,10 @@ static void dump_node_nodeattr(FILE *F, ir_node *n) break; default: - ; - } /* end switch */ + break; + } } -#include -#include "execution_frequency.h" - static void dump_node_ana_vals(FILE *F, ir_node *n) { (void) F; @@ -1038,23 +1031,6 @@ void dump_node_label(FILE *F, ir_node *n) } } -void dump_vrp_info(FILE *F, ir_node *n) -{ - vrp_attr *vrp = vrp_get_info(n); - if (n == NULL) { - return; - } - - fprintf(F, "range_type: %d\n", (int) vrp->range_type); - if (vrp->range_type == VRP_RANGE || vrp->range_type == - VRP_ANTIRANGE) { - ir_fprintf(F, "range_bottom: %F\n",vrp->range_bottom); - ir_fprintf(F, "range_top: %F\n", vrp->range_top); - } - ir_fprintf(F, "bits_set: %T\n", vrp->bits_set); - ir_fprintf(F, "bits_not_set: %T\n", vrp->bits_not_set); -} - /** * Dumps the attributes of a node n into the file F. * Currently this is only the color of a node. @@ -1100,10 +1076,7 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad) print_vcg_color(F, ird_color_error); break; case iro_Block: - if (is_Block_dead(n)) - print_vcg_color(F, ird_color_dead_block_background); - else - print_vcg_color(F, ird_color_block_background); + print_vcg_color(F, ird_color_block_background); break; case iro_Phi: print_vcg_color(F, ird_color_phi); @@ -1134,7 +1107,7 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad) void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data) { - hook_entry_t *info = XMALLOC(hook_entry_t); + hook_entry_t *info = XMALLOCZ(hook_entry_t); info->hook._hook_node_info = cb; info->context = data; @@ -1193,8 +1166,7 @@ static void dump_const_node_local(FILE *F, ir_node *n) for (i = 0; i < get_irn_arity(n); i++) { ir_node *con = get_irn_n(n, i); - if (is_constlike_node(con) && !irn_visited(con)) { - mark_irn_visited(con); + if (is_constlike_node(con) && !irn_visited_else_mark(con)) { /* Generate a new name for the node by appending the names of n and const. */ fprintf(F, "node: {title: "); PRINT_CONSTID(n, con); @@ -1370,7 +1342,7 @@ static void print_mem_edge_vcgattr(FILE *F, ir_node *from, int to) fprintf(F, INTER_MEM_EDGE_ATTR); } -/** Print the vcg attributes for the edge from node from to it's to's input */ +/** Print the vcg attributes for the edge from node "from" to its "to"th input */ static void print_edge_vcgattr(FILE *F, ir_node *from, int to) { assert(from); @@ -1562,8 +1534,6 @@ static void dump_whole_block(FILE *F, ir_node *block) /* colorize blocks */ if (! get_Block_matured(block)) color = ird_color_block_background; - if (is_Block_dead(block)) - color = ird_color_dead_block_background; fprintf(F, "\" status:clustered "); print_vcg_color(F, color); @@ -1618,7 +1588,8 @@ static void dump_block_graph(FILE *F, ir_graph *irg) dump_ir_edges(node, F); } - if ((flags & ir_dump_flag_loops) && (get_irg_loopinfo_state(irg) & loopinfo_valid)) + if ((flags & ir_dump_flag_loops) + && is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO)) dump_loop_nodes_into_graph(F, irg); current_ir_graph = rem; @@ -1632,6 +1603,42 @@ static void dump_graph_info(FILE *F, ir_graph *irg) { fprintf(F, "info1: \""); dump_entity_to_file(F, get_irg_entity(irg)); + fprintf(F, "\n"); + + /* dump graph state */ + fprintf(F, "state:"); + if (is_irg_state(irg, IR_GRAPH_STATE_ARCH_DEP)) + fprintf(F, " arch_dep"); + if (is_irg_state(irg, IR_GRAPH_STATE_MODEB_LOWERED)) + fprintf(F, " modeb_lowered"); + if (is_irg_state(irg, IR_GRAPH_STATE_NORMALISATION2)) + fprintf(F, " normalisation2"); + if (is_irg_state(irg, IR_GRAPH_STATE_IMPLICIT_BITFIELD_MASKING)) + fprintf(F, " implicit_bitfield_masking"); + if (is_irg_state(irg, IR_GRAPH_STATE_OPTIMIZE_UNREACHABLE_CODE)) + fprintf(F, " optimize_unreachable_code"); + if (is_irg_state(irg, IR_GRAPH_STATE_NO_CRITICAL_EDGES)) + fprintf(F, " no_critical_edges"); + if (is_irg_state(irg, IR_GRAPH_STATE_NO_BADS)) + fprintf(F, " no_bads"); + if (is_irg_state(irg, IR_GRAPH_STATE_NO_UNREACHABLE_CODE)) + fprintf(F, " no_unreachable_code"); + if (is_irg_state(irg, IR_GRAPH_STATE_ONE_RETURN)) + fprintf(F, " one_return"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE)) + fprintf(F, " consistent_dominance"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE)) + fprintf(F, " consistent_postdominance"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUT_EDGES)) + fprintf(F, " consistent_out_edges"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS)) + fprintf(F, " consistent_outs"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO)) + fprintf(F, " consistent_loopinfo"); + if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE)) + fprintf(F, " consistent_entity_usage"); + if (is_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS)) + fprintf(F, " valid_exended_blocks"); fprintf(F, "\"\n"); } @@ -1736,7 +1743,7 @@ static void print_typespecific_info(FILE *F, ir_type *tp) break; default: break; - } /* switch type */ + } } #endif @@ -1763,18 +1770,18 @@ static void print_typespecific_vcgattr(FILE *F, ir_type *tp) break; default: break; - } /* switch type */ + } } void dump_type_node(FILE *F, ir_type *tp) { fprintf(F, "node: {title: "); PRINT_TYPEID(tp); - fprintf(F, " label: \"%s ", get_type_tpop_name(tp)); + fprintf(F, " label: \""); if (tp->dbi != NULL) { - char buf[256]; + char buf[1024]; ir_print_type(buf, sizeof(buf), tp); - fprintf(F, "'%s'", buf); + fprintf(F, "%s '%s'", get_type_tpop_name(tp), buf); } else { ir_fprintf(F, "%+F", tp); } @@ -1831,7 +1838,9 @@ static void dump_entity_initializer(FILE *F, const ir_entity *ent) (void) ent; } -/** Dumps a type or entity and it's edges. */ +/** + * type-walker: Dumps a type or entity and its edges. + */ static void dump_type_info(type_or_ent tore, void *env) { FILE *F = (FILE*)env; @@ -1924,8 +1933,8 @@ static void dump_type_info(type_or_ent tore, void *env) --i; upper = get_array_upper_bound(tp, i); lower = get_array_lower_bound(tp, i); - print_node_type_edge(F, upper, tp, "label: \"upper %d\"", get_array_order(tp, i)); - print_node_type_edge(F, lower, tp, "label: \"lower %d\"", get_array_order(tp, i)); + print_node_type_edge(F, upper, tp, "label: \"upper %zu\"", get_array_order(tp, i)); + print_node_type_edge(F, lower, tp, "label: \"lower %zu\"", get_array_order(tp, i)); dump_const_expression(F, upper); dump_const_expression(F, lower); } @@ -1944,12 +1953,12 @@ static void dump_type_info(type_or_ent tore, void *env) break; default: break; - } /* switch type */ + } break; /* case k_type */ } default: printf(" *** irdump, dump_type_info(l.%i), faulty type.\n", __LINE__); - } /* switch kind_or_entity */ + } } /** For dumping class hierarchies. @@ -1994,12 +2003,12 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx) } break; default: break; - } /* switch type */ + } break; /* case k_type */ } default: printf(" *** irdump, dump_class_hierarchy_node(l.%i), faulty type.\n", __LINE__); - } /* switch kind_or_entity */ + } } /*******************************************************************/ @@ -2189,12 +2198,12 @@ static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg) * from irg. */ for (i = get_irp_n_irgs(); i > 0;) { - ir_graph *irg = get_irp_irg(--i); - ir_node **arr = (ir_node**)ird_get_irg_link(irg); + ir_graph *other_irg = get_irp_irg(--i); + ir_node **arr = (ir_node**)ird_get_irg_link(other_irg); if (arr == NULL) continue; - dump_graph_from_list(out, irg); + dump_graph_from_list(out, other_irg); DEL_ARR_F(arr); } } @@ -2237,7 +2246,7 @@ static void dump_extblock_graph(FILE *F, ir_graph *irg) } if ((flags & ir_dump_flag_loops) - && (get_irg_loopinfo_state(irg) & loopinfo_valid)) + && (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO))) dump_loop_nodes_into_graph(F, irg); current_ir_graph = rem; @@ -2249,7 +2258,7 @@ static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg) size_t i; ir_entity *ent = get_irg_entity(irg); - if (get_irg_extblk_state(irg) != ir_extblk_info_valid) + if (!is_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS)) compute_extbb(irg); construct_extblock_lists(irg); @@ -2263,20 +2272,20 @@ static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg) print_dbg_info(F, get_entity_dbg_info(ent)); for (i = get_irp_n_irgs(); i > 0;) { - ir_graph *irg = get_irp_irg(--i); - list_tuple *lists = (list_tuple*)ird_get_irg_link(irg); + ir_graph *other_irg = get_irp_irg(--i); + list_tuple *lists = (list_tuple*)ird_get_irg_link(other_irg); if (lists) { /* dump the extended blocks first */ if (ARR_LEN(lists->extbb_list)) { - ird_set_irg_link(irg, lists->extbb_list); - dump_extblock_graph(F, irg); + ird_set_irg_link(other_irg, lists->extbb_list); + dump_extblock_graph(F, other_irg); } /* we may have blocks without extended blocks, bad for instance */ if (ARR_LEN(lists->blk_list)) { - ird_set_irg_link(irg, lists->blk_list); - dump_block_graph(F, irg); + ird_set_irg_link(other_irg, lists->blk_list); + dump_block_graph(F, other_irg); } DEL_ARR_F(lists->extbb_list); @@ -2327,7 +2336,7 @@ void dump_ir_graph_file(FILE *out, ir_graph *irg) /* dump the out edges in a separate walk */ if ((flags & ir_dump_flag_out_edges) - && (get_irg_outs_state(irg) != outs_none)) { + && (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS))) { irg_out_walk(get_irg_start(irg), dump_out_edge, NULL, out); } @@ -2337,8 +2346,11 @@ void dump_ir_graph_file(FILE *out, ir_graph *irg) static void dump_block_to_cfg(ir_node *block, void *env) { FILE *F = (FILE*)env; - int i, fl = 0; - ir_node *pred; + int i; + + if (is_Bad(block) && get_irn_mode(block) == mode_X) { + dump_node(F, block); + } if (is_Block(block)) { /* This is a block. Dump a node for the block. */ @@ -2357,43 +2369,38 @@ static void dump_block_to_cfg(ir_node *block, void *env) /* the generic version. */ dump_irnode_to_file(F, block); - /* Check whether we have bad predecessors to color the block. */ - for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i) - if ((fl = is_Bad(get_Block_cfgpred(block, i)))) - break; - fprintf(F, "\""); /* closing quote of info */ if ((block == get_irg_start_block(get_irn_irg(block))) || (block == get_irg_end_block(get_irn_irg(block))) ) fprintf(F, " color:blue "); - else if (fl) - fprintf(F, " color:yellow "); fprintf(F, "}\n"); + /* Dump the edges */ - for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i) - if (!is_Bad(skip_Proj(get_Block_cfgpred(block, i)))) { - pred = get_nodes_block(skip_Proj(get_Block_cfgpred(block, i))); - fprintf(F, "edge: { sourcename: \""); - PRINT_NODEID(block); - fprintf(F, "\" targetname: \""); - PRINT_NODEID(pred); - fprintf(F, "\"}\n"); - } + for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i) { + ir_node *pred = get_Block_cfgpred(block, i); + if (!is_Bad(pred)) + pred = get_nodes_block(pred); + fprintf(F, "edge: { sourcename: \""); + PRINT_NODEID(block); + fprintf(F, "\" targetname: \""); + PRINT_NODEID(pred); + fprintf(F, "\"}\n"); + } /* Dump dominator/postdominator edge */ if (ir_get_dump_flags() & ir_dump_flag_dominance) { - if (get_irg_dom_state(current_ir_graph) == dom_consistent && get_Block_idom(block)) { - pred = get_Block_idom(block); + if (is_irg_state(get_irn_irg(block), IR_GRAPH_STATE_CONSISTENT_DOMINANCE) && get_Block_idom(block)) { + ir_node *pred = get_Block_idom(block); fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(block); fprintf(F, "\" targetname: \""); PRINT_NODEID(pred); fprintf(F, "\" " DOMINATOR_EDGE_ATTR "}\n"); } - if (get_irg_postdom_state(current_ir_graph) == dom_consistent && get_Block_ipostdom(block)) { - pred = get_Block_ipostdom(block); + if (is_irg_state(get_irn_irg(block), IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE) && get_Block_ipostdom(block)) { + ir_node *pred = get_Block_ipostdom(block); fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(block); fprintf(F, "\" targetname: \""); @@ -2409,8 +2416,7 @@ void dump_cfg(FILE *F, ir_graph *irg) dump_vcg_header(F, get_irg_dump_name(irg), NULL, NULL); /* walk over the blocks in the graph */ - irg_block_walk(get_irg_end(irg), dump_block_to_cfg, NULL, F); - dump_node(F, get_irg_bad(irg)); + irg_walk_graph(irg, dump_block_to_cfg, NULL, F); dump_vcg_footer(F); } @@ -2664,7 +2670,7 @@ void dump_loop(FILE *F, ir_loop *l) PRINT_NODEID(b); fprintf(F, "\" label: \""); dump_node_opcode(F, b); - fprintf(F, " %ld:%d", get_irn_node_nr(b), get_irn_idx(b)); + fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b)); fprintf(F, "\" status:clustered color:yellow\n"); /* dump the blocks edges */ @@ -2691,7 +2697,7 @@ void dump_loop(FILE *F, ir_loop *l) PRINT_NODEID(b); fprintf(F, "\" label: \""); dump_node_opcode(F, b); - fprintf(F, " %ld:%d", get_irn_node_nr(b), get_irn_idx(b)); + fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b)); fprintf(F, "\" status:clustered color:lightblue\n"); /* dump the nodes that go into the block */