X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=7f1ccd22c2316851a6e07b3e6c3f0d705e01e83a;hb=cb91bddc9cacdab7c28e4336847bd3dc248aa549;hp=ae6a7fbcf479b1a48455e8e326dc95f535e44186;hpb=2f1660d797cad3ad5739e4543817dac6af4b07d2;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index ae6a7fbcf..7f1ccd22c 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -292,7 +292,7 @@ static int node_floats(ir_node *n) { (get_irg_pinned(current_ir_graph) == op_pin_state_floats)); } -static const char *get_ent_dump_name(entity *ent) { +const char *get_ent_dump_name(entity *ent) { if (! ent) return ""; /* Don't use get_entity_ld_ident (ent) as it computes the mangled name! */ @@ -300,7 +300,7 @@ static const char *get_ent_dump_name(entity *ent) { return get_id_str(ent->name); } -static const char *get_irg_dump_name(ir_graph *irg) { +const char *get_irg_dump_name(ir_graph *irg) { /* Don't use get_entity_ld_ident (ent) as it computes the mangled name! */ entity *ent = get_irg_entity(irg); return get_ent_dump_name(ent); @@ -440,9 +440,9 @@ void dump_pointer_values_to_info(bool b) { opt_dump_pointer_values_to_info = b; } -/*******************************************************************/ +/*-----------------------------------------------------------------*/ /* Routines to dump information about a single ir node. */ -/*******************************************************************/ +/*-----------------------------------------------------------------*/ INLINE int dump_node_opcode(FILE *F, ir_node *n) @@ -518,6 +518,9 @@ dump_node_opcode(FILE *F, ir_node *n) if (ent) fprintf (F, " %s", get_entity_name(ent)); break; } + case iro_Load: + fprintf (F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Load_mode(n), &bad)); + break; default_case: default: { @@ -663,6 +666,28 @@ static INLINE int dump_node_info(FILE *F, ir_node *n) if (irg != get_const_code_irg()) fprintf (F, "irg: %s\n", get_ent_dump_name(get_irg_entity(irg))); + if (get_op_pinned(get_irn_op(n)) == op_pin_state_floats && + get_irg_pinned(get_irn_irg(n)) == op_pin_state_floats) { + fprintf(F, "node was pinned in "); + dump_node_opcode(F, get_nodes_block(n)); + fprintf(F, " %ld\n", get_irn_node_nr(get_nodes_block(n))); + } + +#if 0 + /* show all predecessor nodes */ + fprintf(F, "pred nodes: \n"); + if (!is_Block(n)) { + fprintf(F, " -1: "); + dump_node_opcode(F, get_nodes_block(n)); + fprintf(F, " %ld\n", get_irn_node_nr(get_nodes_block(n))); + } + for ( i = 0; i < get_irn_arity(n); ++i) { + fprintf(F, " %d: ", i); + dump_node_opcode(F, get_irn_n(n, i)); + fprintf(F, " %ld\n", get_irn_node_nr(get_irn_n(n, i))); + } +#endif + fprintf(F, "arity: %d", get_irn_arity(n)); if ((get_irn_op(n) == op_Block) || (get_irn_op(n) == op_Phi) || @@ -690,6 +715,16 @@ static INLINE int dump_node_info(FILE *F, ir_node *n) fprintf(F, "start of method of type %s \n", get_type_name_ex(tp, &bad)); for (i = 0; i < get_method_n_params(tp); ++i) fprintf(F, " param %d type: %s \n", i, get_type_name_ex(get_method_param_type(tp, i), &bad)); + if ((get_irp_ip_view_state() == ip_view_valid) && !interprocedural_view) { + ir_node *sbl = get_nodes_block(n); + int i, n_cfgpreds = get_Block_cg_n_cfgpreds(sbl); + fprintf(F, "graph has %d interprocedural predecessors:\n", n_cfgpreds); + for (i = 0; i < n_cfgpreds; ++i) { + ir_node *cfgpred = get_Block_cg_cfgpred(sbl, i); + fprintf(F, " %d: Call %ld in graph %s\n", i, get_irn_node_nr(cfgpred), + get_irg_dump_name(get_irn_irg(cfgpred))); + } + } } break; case iro_Alloc: { fprintf(F, "allocating entity of type %s \n", get_type_name_ex(get_Alloc_type(n), &bad)); @@ -716,7 +751,7 @@ static INLINE int dump_node_info(FILE *F, ir_node *n) fprintf(F, " param %d type: %s \n", i, get_type_name_ex(get_method_param_type(tp, i), &bad)); for (i = 0; i < get_method_n_ress(tp); ++i) fprintf(F, " resul %d type: %s \n", i, get_type_name_ex(get_method_res_type(tp, i), &bad)); - if (0 && Call_has_callees(n)) { + if (Call_has_callees(n)) { fprintf(F, "possible callees: \n"); for (i = 0; i < get_Call_n_callees(n); i++) { if (!get_Call_callee(n, i)) { @@ -760,6 +795,7 @@ static INLINE int dump_node_info(FILE *F, ir_node *n) break; case symconst_addr_ent: fprintf(F, "kind addr_ent\n"); + dump_entity_to_file(F, get_SymConst_entity(n), dump_verbosity_onlynames); break; case symconst_type_tag: fprintf(F, "kind type_tag\n"); @@ -774,18 +810,25 @@ static INLINE int dump_node_info(FILE *F, ir_node *n) if (interprocedural_view) { fprintf(F, "intra predecessor nodes:\n"); for (i = 0; i < get_irn_intra_arity(n); i++) { - ir_node *pred = get_irn_intra_n(n, i); - fprintf(F, " %s%s %ld\n", get_irn_opname(pred), get_irn_modename(pred), get_irn_node_nr(pred)); + ir_node *pred = get_irn_intra_n(n, i); + fprintf(F, " %s%s %ld\n", get_irn_opname(pred), get_irn_modename(pred), get_irn_node_nr(pred)); } } else { fprintf(F, "inter predecessor nodes:\n"); for (i = 0; i < get_irn_inter_arity(n); i++) { - ir_node *pred = get_irn_inter_n(n, i); - fprintf(F, " %s%s %ld \tin graph %s\n", get_irn_opname(pred), get_irn_modename(pred), + ir_node *pred = get_irn_inter_n(n, i); + fprintf(F, " %s%s %ld \tin graph %s\n", get_irn_opname(pred), get_irn_modename(pred), get_irn_node_nr(pred), get_ent_dump_name(get_irg_entity(get_irn_irg(pred)))); } } } break; + case iro_Load: + fprintf(F, "volatility: %s\n", get_volatility_name(get_Load_volatility(n))); + break; + case iro_Store: + fprintf(F, "volatility: %s\n", get_volatility_name(get_Store_volatility(n))); + break; + default: ; } @@ -818,7 +861,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)) { - set_irn_visited(con, get_irg_visited(current_ir_graph)-1); + set_irn_visited(con, get_irg_visited(current_ir_graph) - 1); } } @@ -887,11 +930,13 @@ static void dump_ir_block_edge(FILE *F, ir_node *n) { if (get_opt_dump_const_local() && is_constlike_node(n)) return; if (is_no_Block(n)) { + ir_node *block = get_nodes_block(n); + fprintf (F, "edge: { sourcename: \""); PRINT_NODEID(n); - fprintf (F, "\" targetname: \""); - PRINT_NODEID(get_nodes_block(n)); - fprintf (F, "\" " BLOCK_EDGE_ATTR "}\n"); + fprintf (F, "\" targetname: "); + fprintf(F, "\""); PRINT_NODEID(block); fprintf(F, "\""); + fprintf (F, " " BLOCK_EDGE_ATTR "}\n"); } } @@ -1174,7 +1219,8 @@ dump_block_graph(FILE *F, ir_graph *irg) { } } - if (dump_loop_information_flag) dump_loop_nodes_into_graph(F, irg); + if (dump_loop_information_flag && (get_irg_loopinfo_state(irg) & loopinfo_valid)) + dump_loop_nodes_into_graph(F, irg); current_ir_graph = rem; } @@ -1872,7 +1918,9 @@ dump_ir_block_graph (ir_graph *irg, const char *suffix) int i; char *suffix1; - if(strncmp(get_entity_name(get_irg_entity(irg)),dump_file_filter,strlen(dump_file_filter))!=0) return; + if (strncmp(get_entity_name(get_irg_entity(irg)), dump_file_filter, strlen(dump_file_filter)) != 0) + return; + if (interprocedural_view) suffix1 = "-ip"; else suffix1 = ""; f = vcg_open(irg, suffix, suffix1); @@ -1963,34 +2011,64 @@ dump_ir_block_graph_w_types (ir_graph *irg, const char *suffix) vcg_close(f); } -/***********************************************************************/ +/*---------------------------------------------------------------------*/ /* The following routines dump a control flow graph. */ -/***********************************************************************/ +/*---------------------------------------------------------------------*/ static void dump_block_to_cfg(ir_node *block, void *env) { FILE *F = env; - int i; + int i, fl; ir_node *pred; if (is_Block(block)) { /* This is a block. Dump a node for the block. */ fprintf (F, "node: {title: \""); PRINT_NODEID(block); - fprintf (F, "\" label: \"%s ", get_op_name(get_irn_op(block))); + fprintf (F, "\" label: \""); + if (block == get_irg_start_block(get_irn_irg(block))) + fprintf(F, "Start "); + if (block == get_irg_end_block(get_irn_irg(block))) + fprintf(F, "End "); + + fprintf (F, "%s ", get_op_name(get_irn_op(block))); PRINT_NODEID(block); fprintf (F, "\" "); + fprintf(F, "info1:\""); if (dump_dominator_information_flag) - fprintf(F, "info1:dom depth %d", get_Block_dom_depth(block)); + fprintf(F, "dom depth %d\n", get_Block_dom_depth(block)); + + /* show arity and possible Bad predecessors of the block */ + fprintf(F, "arity: %d\n", get_Block_n_cfgpreds(block)); + for (fl = i = 0; i < get_Block_n_cfgpreds(block); ++i) { + ir_node *pred = get_Block_cfgpred(block, i); + if (is_Bad(pred)) { + if (! fl) + fprintf(F, "Bad pred at pos: "); + fprintf(F, "%d ", i); + fl = 1; + } + } + if (fl) + fprintf(F, "\n"); + + 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 = 0; i < get_Block_n_cfgpreds(block); i++) if (get_irn_op(skip_Proj(get_Block_cfgpred(block, i))) != op_Bad) { - 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"); + 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"); } /* Dump dominator edge */ @@ -2209,15 +2287,15 @@ dump_class_hierarchy (bool entities, const char *suffix) /***********************************************************************/ void dump_all_ir_graphs(dump_graph_func *dmp_grph, const char *suffix) { - int i; - for (i=0; i < get_irp_n_irgs(); i++) { + int i, n_irgs = get_irp_n_irgs(); + for (i = 0; i < n_irgs; ++i) { dmp_grph(get_irp_irg(i), suffix); } } /********************************************************************************** - * Dumps a stand alone loop graph with firm nodes which belong to one loop nodes * + * Dumps a stand alone loop graph with firm nodes which belong to one loop node * * packed together in one subgraph/box * **********************************************************************************/ @@ -2250,7 +2328,7 @@ void dump_loops_standalone(FILE *F, ir_loop *loop) { dump_loop_son_edge(F, loop, son_number++); dump_loops_standalone(F, son); } else if (get_kind(son) == k_ir_node) { - /* We are a loop node -> Collect firm nodes */ + /* We are a loop node -> Collect firm nodes */ ir_node *n = le.node; int bad = 0;