X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=0026f0ec1d3f574c472ef36838d6a347ae2663ab;hb=bb5c6d5ce2e35c4074900017f8c8e1a4935054d0;hp=9f3355a2efe2141d295c6f9906c024125ca95509;hpb=4b1138a9eee25ce11adbb7d7162eaa49421e8b51;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 9f3355a2e..0026f0ec1 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -328,6 +328,7 @@ static void init_colors(void) custom_color(ird_color_phi, "105 255 105"); custom_color(ird_color_anchor, "100 100 255"); named_color(ird_color_error, "red"); + custom_color(ird_color_entity, "204 204 255"); initialized = 1; } @@ -376,7 +377,7 @@ static void print_type_ent_edge(FILE *F, ir_type *T, ir_entity *E, const char *f * Prints the edge from an entity E to an entity T with additional info fmt, ... * to the file F. */ -static void print_ent_ent_edge(FILE *F, ir_entity *E, ir_entity *T, int backedge, const char *fmt, ...) +static void print_ent_ent_edge(FILE *F, ir_entity *E, ir_entity *T, int backedge, ird_color_t color, const char *fmt, ...) { va_list ap; @@ -388,6 +389,9 @@ static void print_ent_ent_edge(FILE *F, ir_entity *E, ir_entity *T, int backedge PRINT_ENTID(E); fprintf(F, "\" targetname: \""); PRINT_ENTID(T); fprintf(F, "\""); vfprintf(F, fmt, ap); + fprintf(F, " "); + if (color != (ird_color_t) -1) + print_vcg_color(F, color); fprintf(F, "}\n"); va_end(ap); } @@ -647,8 +651,9 @@ static ir_node **construct_block_lists(ir_graph *irg) { current_ir_graph = irg; - if(walk_flag) + if(walk_flag) { 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); @@ -669,8 +674,9 @@ static ir_node **construct_block_lists(ir_graph *irg) { set_interprocedural_view(rem_view); #endif - if(walk_flag) + if(walk_flag) { ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED); + } current_ir_graph = rem; return ird_get_irg_link(irg); @@ -690,7 +696,7 @@ static list_tuple *construct_extblock_lists(ir_graph *irg) { ir_node **blk_list = construct_block_lists(irg); int i; ir_graph *rem = current_ir_graph; - list_tuple *lists = xmalloc(sizeof(*lists)); + list_tuple *lists = XMALLOC(list_tuple); current_ir_graph = irg; @@ -1288,7 +1294,7 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad) /* Adds a new node info dumper callback. */ void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data) { - hook_entry_t *info = xmalloc(sizeof(*info)); + hook_entry_t *info = XMALLOC(hook_entry_t); info->hook._hook_node_info = cb; info->context = data; @@ -1350,7 +1356,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_not_visited(con)) { + if (is_constlike_node(con) && !irn_visited(con)) { int bad = 0; mark_irn_visited(con); @@ -1573,7 +1579,7 @@ static void print_edge_vcgattr(FILE *F, ir_node *from, int to) { /** dump edges to our inputs */ static void dump_ir_data_edges(FILE *F, ir_node *n) { int i, num; - unsigned long visited = get_irn_visited(n); + ir_visited_t visited = get_irn_visited(n); if (!dump_keepalive && is_End(n)) { /* the End node has only keep-alive edges */ @@ -2001,17 +2007,15 @@ int dump_type_node(FILE *F, ir_type *tp) } -void dump_entity_node(FILE *F, ir_entity *ent, int color) +void dump_entity_node(FILE *F, ir_entity *ent) { fprintf(F, "node: {title: \""); PRINT_ENTID(ent); fprintf(F, "\""); fprintf(F, DEFAULT_TYPE_ATTRIBUTE); fprintf(F, "label: "); - fprintf(F, "\"ent %s\" ", get_ent_dump_name(ent)); - if (color) - fprintf(F, "color:%d", color); - else - fprintf(F, ENTITY_NODE_ATTR); + fprintf(F, "\"%s\" ", get_ent_dump_name(ent)); + + print_vcg_color(F, ird_color_entity); fprintf(F, "\n info1: \""); dump_entity_to_file(F, ent, dump_verbosity_entattrs | dump_verbosity_entconsts); @@ -2053,7 +2057,7 @@ dump_type_info(type_or_ent tore, void *env) { ir_entity *ent = tore.ent; ir_node *value; /* The node */ - dump_entity_node(F, ent, 0); + dump_entity_node(F, ent); /* The Edges */ /* skip this to reduce graph. Member edge of type is parallel to this edge. * fprintf(F, "edge: { sourcename: \"%p\" targetname: \"%p\" " @@ -2061,7 +2065,7 @@ dump_type_info(type_or_ent tore, void *env) { print_ent_type_edge(F,ent, get_entity_type(ent), ENT_TYPE_EDGE_ATTR); if (is_Class_type(get_entity_owner(ent))) { for(i = 0; i < get_entity_n_overwrites(ent); i++) - print_ent_ent_edge(F,ent, get_entity_overwrites(ent, i), 0, ENT_OVERWRITES_EDGE_ATTR); + print_ent_ent_edge(F,ent, get_entity_overwrites(ent, i), 0, -1, ENT_OVERWRITES_EDGE_ATTR); } /* attached subgraphs */ if (const_entities && (get_entity_variability(ent) != variability_uninitialized)) { @@ -2079,7 +2083,7 @@ dump_type_info(type_or_ent tore, void *env) { if (value) { print_ent_node_edge(F, ent, value, ENT_VALUE_EDGE_ATTR, i); dump_const_expression(F, value); - print_ent_ent_edge(F, ent, get_compound_ent_value_member(ent, i), 0, ENT_CORR_EDGE_ATTR, i); + print_ent_ent_edge(F, ent, get_compound_ent_value_member(ent, i), 0, -1, ENT_CORR_EDGE_ATTR, i); /* fprintf(F, "edge: { sourcename: \"%p\" targetname: \"%p\" " ENT_CORR_EDGE_ATTR "}\n", GET_ENTID(ent), @@ -2173,11 +2177,11 @@ dump_class_hierarchy_node(type_or_ent tore, void *ctx) { break; /* GL */ if (env->dump_ent && is_Class_type(get_entity_owner(ent))) { /* The node */ - dump_entity_node(F, ent, 0); + dump_entity_node(F, ent); /* The edges */ print_type_ent_edge(F,get_entity_owner(ent),ent,TYPE_MEMBER_EDGE_ATTR); for(i = 0; i < get_entity_n_overwrites(ent); i++) - print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, ENT_OVERWRITES_EDGE_ATTR); + print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, -1, ENT_OVERWRITES_EDGE_ATTR); } break; } @@ -2373,7 +2377,7 @@ FILE *vcg_open(ir_graph *irg, const char * suffix1, const char *suffix2) { if (!suffix2) suffix2 = ""; /* open file for vcg graph */ - fname = xmalloc (len * 2 + strlen(suffix1) + strlen(suffix2) + 5); + fname = XMALLOCN(char, len * 2 + strlen(suffix1) + strlen(suffix2) + 5); /* strncpy (fname, nm, len); */ /* copy the filename */ j = 0; @@ -2417,7 +2421,7 @@ FILE *vcg_open_name(const char *name, const char *suffix) { if (!suffix) suffix = ""; /** open file for vcg graph */ - fname = xmalloc(len * 2 + 5 + strlen(suffix)); + fname = XMALLOCN(char, len * 2 + 5 + strlen(suffix)); /* strcpy (fname, name);*/ /* copy the filename */ j = 0; for (i = 0; i < len; ++i) { /* replace '/' in the name: escape by @. */ @@ -2831,7 +2835,6 @@ void dump_subgraph(ir_node *root, int depth, const char *suffix) { } } -#ifdef INTERPROCEDURAL_VIEW void dump_callgraph(const char *suffix) { FILE *F = vcg_open_name("Callgraph", suffix); @@ -2839,29 +2842,24 @@ void dump_callgraph(const char *suffix) { int i, rem = edge_label; //int colorize; edge_label = 1; - dump_vcg_header(F, "Callgraph", NULL); - - //colorize = get_irp_callgraph_state() == irp_callgraph_and_calltree_consistent; + dump_vcg_header(F, "Callgraph", "Hierarchiv", NULL); for (i = get_irp_n_irgs() - 1; i >= 0; --i) { ir_graph *irg = get_irp_irg(i); ir_entity *ent = get_irg_entity(irg); int j; - //int n_callees = get_irg_n_callees(irg); - int color; + int n_callees = get_irg_n_callees(irg); - //color = colorize ? get_entity_color(ent) : ird_color_green; - color = ird_color_green; - dump_entity_node(F, ent, color); + dump_entity_node(F, ent); for (j = 0; j < n_callees; ++j) { ir_entity *c = get_irg_entity(get_irg_callee(irg, j)); //if (id_is_prefix(prefix, get_entity_ld_ident(c))) continue; int be = is_irg_callee_backedge(irg, j); char *attr; attr = (be) ? - "label:\"recursion %d\" color:%d" : - "label:\"calls %d\" color:%d"; - print_ent_ent_edge(F, ent, c, be, attr, get_irg_callee_loop_depth(irg, j), color); + "label:\"recursion %d\"" : + "label:\"calls %d\""; + print_ent_ent_edge(F, ent, c, be, ird_color_entity, attr, get_irg_callee_loop_depth(irg, j)); } } @@ -2871,6 +2869,7 @@ void dump_callgraph(const char *suffix) { } } +#if 0 /* Dump all irgs in interprocedural view to a single file. */ void dump_all_cg_block_graph(const char *suffix) { FILE *f = vcg_open_name("All_graphs", suffix);