X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=b1377a8a569484a93790ddb149a5c9531ee428c7;hb=1de3ff1c7f4478924c6348f774608e60b962d055;hp=2d5357edbbea3aca9f82b1ff7b68e0e3a6a51be2;hpb=060aa4c91666063f9bb70aaa76f5c819d256a15f;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 2d5357edb..b1377a8a5 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -56,7 +56,7 @@ #include "irtools.h" #include "irprintf.h" -#include "irvrfy.h" +#include "irverify.h" #include "error.h" #include "array.h" @@ -76,7 +76,8 @@ static ir_dump_flags_t flags = ir_dump_flag_back_edges | ir_dump_flag_consts_local | ir_dump_flag_analysed_types | - ir_dump_flag_entities_in_hierarchy; + ir_dump_flag_entities_in_hierarchy | + ir_dump_flag_number_label; static ird_color_t overrule_nodecolor = ird_color_default_node; @@ -202,7 +203,7 @@ static void custom_color(int num, const char *rgb_def) obstack_1grow(&color_obst, '\0'); color_rgb[num] = rgb_def; - color_names[num] = obstack_finish(&color_obst); + color_names[num] = (const char*)obstack_finish(&color_obst); } /** Define a named color. */ @@ -274,7 +275,7 @@ static void print_type_type_edge(FILE *F, const ir_type *S, const ir_type *T, co va_start(ap, fmt); fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(S); fprintf(F, " targetname: "); PRINT_TYPEID(T); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -290,7 +291,7 @@ static void print_type_ent_edge(FILE *F, const ir_type *tp, const ir_entity *ent va_start(ap, fmt); fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(tp); fprintf(F, " targetname: \""); PRINT_ENTID(ent); fprintf(F, "\""); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F, "}\n"); va_end(ap); } @@ -310,9 +311,9 @@ static void print_ent_ent_edge(FILE *F, const ir_entity *ent1, const ir_entity * fprintf(F, "edge: { sourcename: \""); PRINT_ENTID(ent1); fprintf(F, "\" targetname: \""); PRINT_ENTID(ent2); fprintf(F, "\""); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F, " "); - if (color != (ird_color_t) -1) + if (color != ird_color_none) print_vcg_color(F, color); fprintf(F, "}\n"); va_end(ap); @@ -329,7 +330,7 @@ static void print_ent_type_edge(FILE *F, const ir_entity *ent, const ir_type *tp va_start(ap, fmt); fprintf(F, "edge: { sourcename: \""); PRINT_ENTID(ent); fprintf(F, "\" targetname: "); PRINT_TYPEID(tp); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -345,7 +346,7 @@ static void print_node_type_edge(FILE *F, const ir_node *irn, ir_type *tp, const va_start(ap, fmt); fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(irn); fprintf(F, "\" targetname: "); PRINT_TYPEID(tp); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -362,7 +363,7 @@ static void print_node_ent_edge(FILE *F, const ir_node *irn, const ir_entity *en fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(irn); fprintf(F, "\" targetname: \""); PRINT_ENTID(ent); fprintf(F, "\""); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -378,7 +379,7 @@ static void print_ent_node_edge(FILE *F, const ir_entity *ent, const ir_node *ir va_start(ap, fmt); fprintf(F, "edge: { sourcename: \""); PRINT_ENTID(ent); fprintf(F, "\" targetname: \""); PRINT_NODEID(irn); fprintf(F, "\""); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -387,14 +388,14 @@ static void print_ent_node_edge(FILE *F, const ir_entity *ent, const ir_node *ir * Prints the edge from a type tp to an enumeration item item with additional info fmt, ... * to the file F. */ -static void print_enum_item_edge(FILE *F, const ir_type *tp, int item, const char *fmt, ...) +static void print_enum_item_edge(FILE *F, const ir_type *tp, size_t item, const char *fmt, ...) { va_list ap; va_start(ap, fmt); fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(tp); fprintf(F, " targetname: \""); PRINT_ITEMID(tp, item); fprintf(F, "\" "); - vfprintf(F, fmt, ap); + ir_vfprintf(F, fmt, ap); fprintf(F,"}\n"); va_end(ap); } @@ -403,7 +404,6 @@ static void print_enum_item_edge(FILE *F, const ir_type *tp, int item, const cha /* 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); /*-----------------------------------------------------------------*/ @@ -539,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) @@ -578,10 +578,7 @@ static void collect_node(ir_node *node, void *env) */ static ir_node **construct_block_lists(ir_graph *irg) { - int i; -#ifdef INTERPROCEDURAL_VIEW - int rem_view = get_interprocedural_view(); -#endif + size_t i; int walk_flag = ir_resources_reserved(irg) & IR_RESOURCE_IRN_VISITED; ir_graph *rem = current_ir_graph; @@ -591,34 +588,20 @@ static ir_node **construct_block_lists(ir_graph *irg) 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); + for (i = get_irp_n_irgs(); i > 0;) + ird_set_irg_link(get_irp_irg(--i), NULL); ird_walk_graph(current_ir_graph, clear_link, collect_node, current_ir_graph); -#ifdef INTERPROCEDURAL_VIEW - /* Collect also EndReg and EndExcept. We do not want to change the walker. */ - set_interprocedural_view(0); -#endif - - set_irg_visited(current_ir_graph, get_irg_visited(current_ir_graph)-1); - irg_walk(get_irg_end_reg(current_ir_graph), clear_link, collect_node, current_ir_graph); - set_irg_visited(current_ir_graph, get_irg_visited(current_ir_graph)-1); - irg_walk(get_irg_end_except(current_ir_graph), clear_link, collect_node, current_ir_graph); - -#ifdef INTERPROCEDURAL_VIEW - set_interprocedural_view(rem_view); -#endif - if (walk_flag) { ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED); } current_ir_graph = rem; - return ird_get_irg_link(irg); + return (ir_node**)ird_get_irg_link(irg); } -typedef struct _list_tuple { +typedef struct list_tuple { ir_node **blk_list; ir_extblk **extbb_list; } list_tuple; @@ -630,7 +613,7 @@ typedef struct _list_tuple { static list_tuple *construct_extblock_lists(ir_graph *irg) { ir_node **blk_list = construct_block_lists(irg); - int i; + size_t i, n; ir_graph *rem = current_ir_graph; list_tuple *lists = XMALLOC(list_tuple); @@ -640,7 +623,7 @@ static list_tuple *construct_extblock_lists(ir_graph *irg) lists->extbb_list = NEW_ARR_F(ir_extblk *, 0); inc_irg_block_visited(irg); - for (i = ARR_LEN(blk_list) - 1; i >= 0; --i) { + for (i = 0, n = ARR_LEN(blk_list); i < n; ++i) { ir_extblk *ext; if (is_Block(blk_list[i])) { @@ -695,15 +678,6 @@ void dump_node_opcode(FILE *F, ir_node *n) } break; -#ifdef INTERPROCEDURAL_VIEW - case iro_Filter: - if (!get_interprocedural_view()) - fprintf(F, "Proj'"); - else - goto default_case; - break; -#endif - case iro_Proj: { ir_node *pred = get_Proj_pred(n); @@ -715,42 +689,17 @@ void dump_node_opcode(FILE *F, ir_node *n) goto default_case; } break; -#ifdef INTERPROCEDURAL_VIEW - case iro_Start: - case iro_End: - case iro_EndExcept: - case iro_EndReg: - if (get_interprocedural_view()) { - fprintf(F, "%s %s", get_irn_opname(n), get_ent_dump_name(get_irg_entity(get_irn_irg(n)))); - break; - } else - goto default_case; -#endif - - case iro_CallBegin: { - ir_node *addr = get_CallBegin_ptr(n); - ir_entity *ent = NULL; - if (is_Sel(addr)) - ent = get_Sel_entity(addr); - else if (is_Global(addr)) - ent = get_Global_entity(addr); - fprintf(F, "%s", get_irn_opname(n)); - if (ent) fprintf(F, " %s", get_entity_name(ent)); - 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))) @@ -772,9 +721,6 @@ void dump_node_opcode(FILE *F, ir_node *n) case iro_Mod: fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Mod_resmode(n), NULL)); break; - case iro_DivMod: - fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_DivMod_resmode(n), NULL)); - break; case iro_Builtin: fprintf(F, "%s[%s]", get_irn_opname(n), get_builtin_kind_name(get_Builtin_kind(n))); break; @@ -792,7 +738,7 @@ default_case: static void dump_node_mode(FILE *F, ir_node *n) { const ir_op_ops *ops = get_op_ops(get_irn_op(n)); - ir_opcode iro; + unsigned iro; ir_mode *mode; /* call the dump_node operation if available */ @@ -843,13 +789,13 @@ static int dump_node_typeinfo(FILE *F, ir_node *n) return bad; } -typedef struct _pns_lookup { +typedef struct pns_lookup { long nr; /**< the proj number */ const char *name; /**< the name of the Proj */ } pns_lookup_t; -typedef struct _proj_lookup { - ir_opcode code; /**< the opcode of the Proj predecessor */ +typedef struct proj_lookup { + unsigned code; /**< the opcode of the Proj predecessor */ unsigned num_data; /**< number of data entries */ const pns_lookup_t *data; /**< the data */ } proj_lookup_t; @@ -858,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 }; @@ -879,28 +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 -}; - -/** the lookup table for Proj(Quot) names */ -static const pns_lookup_t quot_lut[] = { -#define X(a) { pn_Quot_##a, #a } - X(M), - X(X_regular), - X(X_except), - X(res) -#undef X -}; - -/** the lookup table for Proj(DivMod) names */ -static const pns_lookup_t divmod_lut[] = { -#define X(a) { pn_DivMod_##a, #a } - X(M), - X(X_regular), - X(X_except), - X(res_div), - X(res_mod) #undef X }; @@ -996,8 +920,6 @@ static const proj_lookup_t proj_lut[] = { { iro_Start, E(start_lut) }, { iro_Cond, E(cond_lut) }, { iro_Call, E(call_lut) }, - { iro_Quot, E(quot_lut) }, - { iro_DivMod, E(divmod_lut) }, { iro_Div, E(div_lut) }, { iro_Mod, E(mod_lut) }, { iro_Load, E(load_lut) }, @@ -1016,7 +938,7 @@ static const proj_lookup_t proj_lut[] = { static void dump_node_nodeattr(FILE *F, ir_node *n) { ir_node *pred; - ir_opcode code; + unsigned code; long proj_nr; const ir_op_ops *ops = get_op_ops(get_irn_op(n)); @@ -1034,14 +956,9 @@ static void dump_node_nodeattr(FILE *F, ir_node *n) case iro_Proj: pred = get_Proj_pred(n); proj_nr = get_Proj_proj(n); -#ifdef INTERPROCEDURAL_VIEW -handle_lut: -#endif code = get_irn_opcode(pred); - if (code == iro_Cmp) - fprintf(F, "%s ", get_pnc_string(get_Proj_proj(n))); - else if (code == iro_Proj && get_irn_opcode(get_Proj_pred(pred)) == iro_Start) + if (code == iro_Proj && get_irn_opcode(get_Proj_pred(pred)) == iro_Start) fprintf(F, "Arg %ld ", proj_nr); else if (code == iro_Cond && get_irn_mode(get_Cond_selector(pred)) != mode_b) fprintf(F, "%ld ", proj_nr); @@ -1070,25 +987,17 @@ handle_lut: } } break; - case iro_Filter: - proj_nr = get_Filter_proj(n); -#ifdef INTERPROCEDURAL_VIEW - if (! get_interprocedural_view()) { - /* it's a Proj' */ - pred = get_Filter_pred(n); - goto handle_lut; - } else -#endif - fprintf(F, "%ld ", proj_nr); - break; case iro_Sel: fprintf(F, "%s ", get_ent_dump_name(get_Sel_entity(n))); break; case iro_Cast: ir_fprintf(F, "(%+F)", get_Cast_type(n)); break; + case iro_Cmp: + fprintf(F, "%s ", get_relation_string(get_Cmp_relation(n))); + break; case iro_Confirm: - fprintf(F, "%s ", get_pnc_string(get_Confirm_cmp(n))); + fprintf(F, "%s ", get_relation_string(get_Confirm_relation(n))); break; case iro_CopyB: ir_fprintf(F, "(%+F)", get_CopyB_type(n)); @@ -1106,14 +1015,6 @@ static void dump_node_ana_vals(FILE *F, ir_node *n) { (void) F; (void) n; -#ifdef INTERPROCEDURAL_VIEW - fprintf(F, " %lf*(%2.0lf + %2.0lf) = %2.0lf ", - get_irn_exec_freq(n), - get_irg_method_execution_frequency(get_irn_irg(n)), - pow(5, get_irg_recursion_depth(get_irn_irg(n))), - get_irn_exec_freq(n) * (get_irg_method_execution_frequency(get_irn_irg(n)) + pow(5, get_irg_recursion_depth(get_irn_irg(n)))) - ); -#endif return; } @@ -1188,8 +1089,6 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad) switch (get_irn_opcode(n)) { case iro_Start: - case iro_EndReg: - case iro_EndExcept: case iro_End: print_vcg_color(F, ird_color_anchor); break; @@ -1197,10 +1096,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); @@ -1242,7 +1138,7 @@ void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data) void dump_remove_node_info_callback(void *handle) { - hook_entry_t *info = handle; + hook_entry_t *info = (hook_entry_t*)handle; unregister_hook(hook_node_info, info); xfree(info); } @@ -1290,8 +1186,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); @@ -1391,7 +1286,7 @@ static void dump_node(FILE *F, ir_node *n) fputs("\"", F); fputs(" label: \"", F); - bad = ! irn_vrfy_irg_dump(n, current_ir_graph, &p); + bad = ! irn_verify_irg_dump(n, current_ir_graph, &p); dump_node_label(F, n); dump_node_ana_vals(F, n); //dump_node_ana_info(F, n); @@ -1416,7 +1311,7 @@ static void dump_node(FILE *F, ir_node *n) 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)) { + if (!is_Block(n)) { ir_node *block = get_nodes_block(n); if (get_opt_dump_const_local() && is_constlike_node(block)) { @@ -1467,7 +1362,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); @@ -1547,11 +1442,6 @@ static void dump_ir_data_edges(FILE *F, ir_node *n) ir_node *pred = get_irn_n(n, i); assert(pred); -#ifdef INTERPROCEDURAL_VIEW - if ((get_interprocedural_view() && get_irn_visited(pred) < get_irn_visited(n))) - continue; /* pred not dumped */ -#endif - if ((flags & ir_dump_flag_back_edges) && is_backedge(n, i)) { fprintf(F, "backedge: {sourcename: \""); } else { @@ -1569,16 +1459,6 @@ static void dump_ir_data_edges(FILE *F, ir_node *n) print_edge_vcgattr(F, n, i); fprintf(F, "}\n"); } - - if ((flags & ir_dump_flag_macroblock_edges) && is_Block(n)) { - ir_node *mb = get_Block_MacroBlock(n); - fprintf(F, "edge: {sourcename: \""); - PRINT_NODEID(n); - fprintf(F, "\" targetname: \""); - PRINT_NODEID(mb); - fprintf(F, "\" label: \"mb\" " MACROBLOCK_EDGE_ATTR); - fprintf(F, "}\n"); - } } /** @@ -1587,7 +1467,7 @@ static void dump_ir_data_edges(FILE *F, ir_node *n) static void dump_ir_edges(ir_node *node, void *env) { int i = 0; - FILE *F = env; + FILE *F = (FILE*)env; const ir_edge_t *edge; foreach_out_edge(node, edge) { @@ -1611,7 +1491,7 @@ static void dump_ir_edges(ir_node *node, void *env) /** Dumps a node and its edges but not the block edge */ static void dump_node_wo_blockedge(ir_node *n, void *env) { - FILE *F = env; + FILE *F = (FILE*)env; dump_node(F, n); dump_ir_data_edges(F, n); } @@ -1619,7 +1499,7 @@ static void dump_node_wo_blockedge(ir_node *n, void *env) /** Dumps a node and its edges. */ static void dump_node_with_edges(ir_node *n, void *env) { - FILE *F = env; + FILE *F = (FILE*)env; dump_node_wo_blockedge(n, env); if (!node_floats(n)) dump_ir_block_edge(F, n); @@ -1674,8 +1554,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); @@ -1692,7 +1570,7 @@ static void dump_whole_block(FILE *F, ir_node *block) dump_block_edge_hook(F, block); /* dump the nodes that go into the block */ - for (node = ird_get_irn_link(block); node; node = ird_get_irn_link(node)) { + for (node = (ir_node*)ird_get_irn_link(block); node; node = (ir_node*)ird_get_irn_link(node)) { dump_node(F, node); dump_ir_data_edges(F, node); } @@ -1707,13 +1585,13 @@ static void dump_whole_block(FILE *F, ir_node *block) * The outermost nodes: blocks and nodes not op_pin_state_pinned, Bad, Unknown. */ static void dump_block_graph(FILE *F, ir_graph *irg) { - int i; + size_t i, n; ir_graph *rem = current_ir_graph; - ir_node **arr = ird_get_irg_link(irg); + ir_node **arr = (ir_node**)ird_get_irg_link(irg); current_ir_graph = irg; - for (i = ARR_LEN(arr) - 1; i >= 0; --i) { - ir_node * node = arr[i]; + for (i = 0, n = ARR_LEN(arr); i < n; ++i) { + ir_node *node = arr[i]; if (is_Block(node)) { /* Dumps the block and all the nodes in the block, which are to be found in Block->link. */ @@ -1775,7 +1653,7 @@ static void dump_graph_from_list(FILE *F, ir_graph *irg) /** dumps the edges between nodes and their type or entity attributes. */ static void dump_node2type_edges(ir_node *n, void *env) { - FILE *F = env; + FILE *F = (FILE*)env; assert(n); switch (get_irn_opcode(n)) { @@ -1882,11 +1760,11 @@ 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); } @@ -1915,12 +1793,12 @@ static void dump_entity_node(FILE *F, ir_entity *ent) fprintf(F, "}\n"); } -static void dump_enum_item(FILE *F, ir_type *tp, int pos) +static void dump_enum_item(FILE *F, ir_type *tp, size_t pos) { char buf[1024]; ir_enum_const *ec = get_enumeration_const(tp, pos); ident *id = get_enumeration_const_nameid(ec); - tarval *tv = get_enumeration_value(ec); + ir_tarval *tv = get_enumeration_value(ec); if (tv) tarval_snprintf(buf, sizeof(buf), tv); @@ -1943,11 +1821,13 @@ 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 = env; - int i = 0; /* to shutup gcc */ + FILE *F = (FILE*)env; + size_t i = 0; /* to shutup gcc */ /* dump this type or entity */ @@ -1963,8 +1843,8 @@ static void dump_type_info(type_or_ent tore, void *env) ENT_OWN_EDGE_ATTR "}\n", ent, get_entity_owner(ent));*/ print_ent_type_edge(F,ent, get_entity_type(ent), ENT_TYPE_EDGE_ATTR); if (is_Class_type(get_entity_owner(ent))) { - for (i = get_entity_n_overwrites(ent) - 1; i >= 0; --i) - print_ent_ent_edge(F,ent, get_entity_overwrites(ent, i), 0, -1, ENT_OVERWRITES_EDGE_ATTR); + for (i = get_entity_n_overwrites(ent); i > 0;) + print_ent_ent_edge(F, ent, get_entity_overwrites(ent, --i), 0, ird_color_none, ENT_OVERWRITES_EDGE_ATTR); } /* attached subgraphs */ if (! (flags & ir_dump_flag_no_entity_values)) { @@ -1973,12 +1853,12 @@ static void dump_type_info(type_or_ent tore, void *env) dump_entity_initializer(F, ent); } else if (entity_has_compound_ent_values(ent)) { /* old style compound entity values */ - for (i = get_compound_ent_n_values(ent) - 1; i >= 0; --i) { - value = get_compound_ent_value(ent, i); + for (i = get_compound_ent_n_values(ent); i > 0;) { + value = get_compound_ent_value(ent, --i); 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, -1, ENT_CORR_EDGE_ATTR, i); + print_ent_ent_edge(F, ent, get_compound_ent_value_member(ent, i), 0, ird_color_none, ENT_CORR_EDGE_ATTR, i); /* fprintf(F, "edge: { sourcename: \"%p\" targetname: \"%p\" " ENT_CORR_EDGE_ATTR "}\n", GET_ENTID(ent), @@ -1996,41 +1876,57 @@ static void dump_type_info(type_or_ent tore, void *env) /* and now the edges */ switch (get_type_tpop_code(tp)) { case tpo_class: - for (i = get_class_n_supertypes(tp) - 1; i >= 0; --i) + for (i = get_class_n_supertypes(tp); i > 0;) { + --i; print_type_type_edge(F, tp, get_class_supertype(tp, i), TYPE_SUPER_EDGE_ATTR); - for (i = get_class_n_members(tp) - 1; i >= 0; --i) + } + for (i = get_class_n_members(tp); i > 0;) { + --i; print_type_ent_edge(F, tp, get_class_member(tp, i), TYPE_MEMBER_EDGE_ATTR); + } break; case tpo_struct: - for (i = get_struct_n_members(tp) - 1; i >= 0; --i) + for (i = get_struct_n_members(tp); i > 0;) { + --i; print_type_ent_edge(F, tp, get_struct_member(tp, i), TYPE_MEMBER_EDGE_ATTR); + } break; case tpo_method: - for (i = get_method_n_params(tp) - 1; i >= 0; --i) + for (i = get_method_n_params(tp); i > 0;) { + --i; print_type_type_edge(F, tp, get_method_param_type(tp, i), METH_PAR_EDGE_ATTR,i); - for (i = get_method_n_ress(tp) - 1; i >= 0; --i) + } + for (i = get_method_n_ress(tp); i > 0;) { + --i; print_type_type_edge(F, tp, get_method_res_type(tp, i), METH_RES_EDGE_ATTR,i); + } break; case tpo_union: - for (i = get_union_n_members(tp) - 1; i >= 0; --i) + for (i = get_union_n_members(tp); i > 0;) { + --i; print_type_ent_edge(F, tp, get_union_member(tp, i), UNION_EDGE_ATTR); + } break; case tpo_array: print_type_type_edge(F, tp, get_array_element_type(tp), ARR_ELT_TYPE_EDGE_ATTR); print_type_ent_edge(F, tp, get_array_element_entity(tp), ARR_ENT_EDGE_ATTR); - for (i = get_array_n_dimensions(tp) - 1; i >= 0; --i) { - ir_node *upper = get_array_upper_bound(tp, i); - ir_node *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)); + for (i = get_array_n_dimensions(tp); i > 0;) { + ir_node *upper, *lower; + + --i; + upper = get_array_upper_bound(tp, i); + lower = get_array_lower_bound(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); } break; case tpo_enumeration: - for (i = get_enumeration_n_enums(tp) - 1; i >= 0; --i) { + for (i = get_enumeration_n_enums(tp); i > 0;) { + --i; dump_enum_item(F, tp, i); - print_enum_item_edge(F, tp, i, "label: \"item %d\"", i); + print_enum_item_edge(F, tp, i, "label: \"item %zu\"", i); } break; case tpo_pointer: @@ -2053,8 +1949,8 @@ static void dump_type_info(type_or_ent tore, void *env) */ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx) { - FILE *F = ctx; - int i = 0; /* to shutup gcc */ + FILE *F = (FILE*)ctx; + size_t i = 0; /* to shutup gcc */ /* dump this type or entity */ switch (get_kind(tore.ent)) { @@ -2069,8 +1965,10 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx) dump_entity_node(F, ent); /* The edges */ print_type_ent_edge(F, get_entity_owner(ent), ent, TYPE_MEMBER_EDGE_ATTR); - for (i = get_entity_n_overwrites(ent) - 1; i >= 0; --i) - print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, -1, ENT_OVERWRITES_EDGE_ATTR); + for (i = get_entity_n_overwrites(ent); i > 0;) { + --i; + print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, ird_color_none, ENT_OVERWRITES_EDGE_ATTR); + } } break; } @@ -2082,7 +1980,8 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx) case tpo_class: dump_type_node(F, tp); /* and now the edges */ - for (i = get_class_n_supertypes(tp) - 1; i >= 0; --i) { + for (i = get_class_n_supertypes(tp); i > 0;) { + --i; print_type_type_edge(F,tp,get_class_supertype(tp, i),TYPE_SUPER_EDGE_ATTR); } break; @@ -2102,7 +2001,7 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx) /* dump out edges */ static void dump_out_edge(ir_node *n, void *env) { - FILE *F = env; + FILE *F = (FILE*)env; int i; for (i = get_irn_n_outs(n) - 1; i >= 0; --i) { ir_node *succ = get_irn_out(n, i); @@ -2119,16 +2018,17 @@ static void dump_out_edge(ir_node *n, void *env) static void dump_loop_label(FILE *F, ir_loop *loop) { - fprintf(F, "loop %d, %d sons, %d nodes", - get_loop_depth(loop), get_loop_n_sons(loop), get_loop_n_nodes(loop)); + fprintf(F, "loop %u, %lu sons, %lu nodes", + get_loop_depth(loop), (unsigned long) get_loop_n_sons(loop), + (unsigned long) get_loop_n_nodes(loop)); } static void dump_loop_info(FILE *F, ir_loop *loop) { fprintf(F, " info1: \""); - fprintf(F, " loop nr: %d", get_loop_loop_nr(loop)); + fprintf(F, " loop nr: %ld", get_loop_loop_nr(loop)); #ifdef DEBUG_libfirm /* GL @@@ debug analyses */ - fprintf(F, "\n The loop was analyzed %d times.", PTR_TO_INT(get_loop_link(loop))); + fprintf(F, "\n The loop was analyzed %ld times.", (long int) PTR_TO_INT(get_loop_link(loop))); #endif fprintf(F, "\""); } @@ -2144,7 +2044,7 @@ static void dump_loop_node(FILE *F, ir_loop *loop) fprintf(F, "}\n"); } -static void dump_loop_node_edge(FILE *F, ir_loop *loop, int i) +static void dump_loop_node_edge(FILE *F, ir_loop *loop, size_t i) { assert(loop); fprintf(F, "edge: {sourcename: \""); @@ -2155,30 +2055,32 @@ static void dump_loop_node_edge(FILE *F, ir_loop *loop, int i) fprintf(F, "}\n"); } -static void dump_loop_son_edge(FILE *F, ir_loop *loop, int i) +static void dump_loop_son_edge(FILE *F, ir_loop *loop, size_t i) { assert(loop); fprintf(F, "edge: {sourcename: \""); PRINT_LOOPID(loop); fprintf(F, "\" targetname: \""); PRINT_LOOPID(get_loop_son(loop, i)); - fprintf(F, "\" color: darkgreen label: \"%d\"}\n", + ir_fprintf(F, "\" color: darkgreen label: \"%zu\"}\n", get_loop_element_pos(loop, get_loop_son(loop, i))); } static void dump_loops(FILE *F, ir_loop *loop) { - int i; + size_t i; /* dump this loop node */ dump_loop_node(F, loop); /* dump edges to nodes in loop -- only if it is a real loop */ if (get_loop_depth(loop) != 0) { - for (i = get_loop_n_nodes(loop) - 1; i >= 0; --i) { + for (i = get_loop_n_nodes(loop); i > 0;) { + --i; dump_loop_node_edge(F, loop, i); } } - for (i = get_loop_n_sons(loop) - 1; i >= 0; --i) { + for (i = get_loop_n_sons(loop); i > 0;) { + --i; dump_loops(F, get_loop_son(loop, i)); dump_loop_son_edge(F, loop, i); } @@ -2269,7 +2171,7 @@ void dump_vcg_footer(FILE *F) static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg) { - int i; + size_t i; construct_block_lists(irg); @@ -2278,9 +2180,9 @@ static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg) * only the requested irg but also all irgs that can be reached * from irg. */ - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { - ir_graph *irg = get_irp_irg(i); - ir_node **arr = ird_get_irg_link(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); if (arr == NULL) continue; @@ -2293,23 +2195,23 @@ static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg) * The outermost nodes: blocks and nodes not op_pin_state_pinned, Bad, Unknown. */ static void dump_extblock_graph(FILE *F, ir_graph *irg) { - int i; + size_t i, arr_len; ir_graph *rem = current_ir_graph; - ir_extblk **arr = ird_get_irg_link(irg); + ir_extblk **arr = (ir_extblk**)ird_get_irg_link(irg); current_ir_graph = irg; - for (i = ARR_LEN(arr) - 1; i >= 0; --i) { + for (i = 0, arr_len = ARR_LEN(arr); i < arr_len; ++i) { ir_extblk *extbb = arr[i]; ir_node *leader = get_extbb_leader(extbb); - int j; + size_t j, n_blks; fprintf(F, "graph: { title: \""); PRINT_EXTBBID(leader); fprintf(F, "\" label: \"ExtBB %ld\" status:clustered color:lightgreen\n", get_irn_node_nr(leader)); - for (j = ARR_LEN(extbb->blks) - 1; j >= 0; --j) { - ir_node * node = extbb->blks[j]; + for (j = 0, n_blks = ARR_LEN(extbb->blks); j < n_blks; ++j) { + ir_node *node = extbb->blks[j]; if (is_Block(node)) { /* Dumps the block and all the nodes in the block, which are to be found in Block->link. */ @@ -2336,10 +2238,10 @@ static void dump_extblock_graph(FILE *F, ir_graph *irg) static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg) { - int i; + size_t i; ir_entity *ent = get_irg_entity(irg); - if (get_irg_extblk_state(irg) != extblk_valid) + if (get_irg_extblk_state(irg) != ir_extblk_info_valid) compute_extbb(irg); construct_extblock_lists(irg); @@ -2352,9 +2254,9 @@ static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg) dump_graph_info(F, irg); print_dbg_info(F, get_entity_dbg_info(ent)); - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { - ir_graph *irg = get_irp_irg(i); - list_tuple *lists = ird_get_irg_link(irg); + 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); if (lists) { /* dump the extended blocks first */ @@ -2426,10 +2328,14 @@ void dump_ir_graph_file(FILE *out, ir_graph *irg) static void dump_block_to_cfg(ir_node *block, void *env) { - FILE *F = env; - int i, fl = 0; + FILE *F = (FILE*)env; + int i; ir_node *pred; + 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. */ fprintf(F, "node: {title: \""); PRINT_NODEID(block); @@ -2447,30 +2353,25 @@ 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) { @@ -2496,50 +2397,34 @@ static void dump_block_to_cfg(ir_node *block, void *env) void dump_cfg(FILE *F, ir_graph *irg) { -#ifdef INTERPROCEDURAL_VIEW - int ipv = get_interprocedural_view(); -#endif - dump_vcg_header(F, get_irg_dump_name(irg), NULL, NULL); -#ifdef INTERPROCEDURAL_VIEW - if (ipv) { - printf("Warning: dumping cfg not in interprocedural view!\n"); - set_interprocedural_view(0); - } -#endif - /* 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); -#ifdef INTERPROCEDURAL_VIEW - set_interprocedural_view(ipv); -#endif dump_vcg_footer(F); } void dump_callgraph(FILE *F) { - int i; + size_t i; ir_dump_flags_t old_flags = ir_get_dump_flags(); ir_remove_dump_flags(ir_dump_flag_disable_edge_labels); dump_vcg_header(F, "Callgraph", "Hierarchic", NULL); - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { - ir_graph *irg = get_irp_irg(i); + for (i = get_irp_n_irgs(); i > 0;) { + ir_graph *irg = get_irp_irg(--i); ir_entity *ent = get_irg_entity(irg); - int j; - int n_callees = get_irg_n_callees(irg); + size_t j, n_callees = get_irg_n_callees(irg); dump_entity_node(F, ent); for (j = 0; j < n_callees; ++j) { ir_entity *c = get_irg_entity(get_irg_callee(irg, j)); int be = is_irg_callee_backedge(irg, j); const char *attr = be - ? "label:\"recursion %d\"" - : "label:\"calls %d\""; + ? "label:\"recursion %zu\"" + : "label:\"calls %zu\""; print_ent_ent_edge(F, ent, c, be, ird_color_entity, attr, get_irg_callee_loop_depth(irg, j)); } @@ -2565,7 +2450,10 @@ void dump_class_hierarchy(FILE *out) static void dump_loops_standalone(FILE *F, ir_loop *loop) { - int i = 0, loop_node_started = 0, son_number = 0, first = 0; + size_t i; + bool loop_node_started = false; + size_t first = 0; + size_t son_number = 0; loop_element le; ir_loop *son = NULL; @@ -2586,8 +2474,11 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop) PRINT_LOOPID(loop); fprintf(F, "\" targetname: \""); PRINT_LOOPID(loop); - fprintf(F, "-%d-nodes\" label:\"%d...%d\"}\n", first, first, i-1); - loop_node_started = 0; + fprintf(F, "-%lu-nodes\" label:\"%lu...%lu\"}\n", + (unsigned long) first, + (unsigned long) first, + (unsigned long) i-1); + loop_node_started = false; } dump_loop_son_edge(F, loop, son_number++); dump_loops_standalone(F, son); @@ -2599,8 +2490,9 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop) /* Start a new node which contains all firm nodes of the current loop */ fprintf(F, "node: { title: \""); PRINT_LOOPID(loop); - fprintf(F, "-%d-nodes\" color: lightyellow label: \"", i); - loop_node_started = 1; + fprintf(F, "-%lu-nodes\" color: lightyellow label: \"", + (unsigned long)i); + loop_node_started = true; first = i; } else fprintf(F, "\n"); @@ -2618,8 +2510,9 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop) /* Start a new node which contains all firm nodes of the current loop */ fprintf(F, "node: { title: \""); PRINT_LOOPID(loop); - fprintf(F, "-%d-nodes\" color: lightyellow label: \"", i); - loop_node_started = 1; + fprintf(F, "-%lu-nodes\" color: lightyellow label: \"", + (unsigned long)i); + loop_node_started = true; first = i; } else fprintf(F, "\n"); @@ -2634,8 +2527,11 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop) PRINT_LOOPID(loop); fprintf(F, "\" targetname: \""); PRINT_LOOPID(loop); - fprintf(F, "-%d-nodes\" label:\"%d...%d\"}\n", first, first, i-1); - loop_node_started = 0; + fprintf(F, "-%lu-nodes\" label:\"%lu...%lu\"}\n", + (unsigned long) first, + (unsigned long) first, + (unsigned long) i-1); + loop_node_started = false; } } @@ -2667,7 +2563,9 @@ void dump_callgraph_loop_tree(FILE *out) static void collect_nodeloop(FILE *F, ir_loop *loop, eset *loopnodes) { - int i, son_number = 0, node_number = 0; + size_t i; + int son_number = 0; + int node_number = 0; if (flags & ir_dump_flag_loops) dump_loop_node(F, loop); @@ -2690,7 +2588,8 @@ static void collect_nodeloop(FILE *F, ir_loop *loop, eset *loopnodes) static void collect_nodeloop_external_nodes(ir_loop *loop, eset *loopnodes, eset *extnodes) { - int i, j, start; + size_t i; + int j, start; for (i = 0; i < get_loop_n_elements(loop); i++) { loop_element le = get_loop_element(loop, i); @@ -2715,13 +2614,12 @@ static void collect_nodeloop_external_nodes(ir_loop *loop, eset *loopnodes, void dump_loop(FILE *F, ir_loop *l) { - char name[50]; - snprintf(name, sizeof(name), "loop_%d", get_loop_loop_nr(l)); - eset *loopnodes = eset_create(); eset *extnodes = eset_create(); ir_node *n, *b; + char name[50]; + snprintf(name, sizeof(name), "loop_%ld", get_loop_loop_nr(l)); dump_vcg_header(F, name, NULL, NULL); /* collect all nodes to dump */ @@ -2729,18 +2627,20 @@ void dump_loop(FILE *F, ir_loop *l) collect_nodeloop_external_nodes(l, loopnodes, extnodes); /* build block lists */ - for (n = eset_first(loopnodes); n != NULL; n = eset_next(loopnodes)) + eset_foreach(loopnodes, ir_node*, n) { set_irn_link(n, NULL); - for (n = eset_first(extnodes); n != NULL; n = eset_next(extnodes)) + } + eset_foreach(extnodes, ir_node*, n) { set_irn_link(n, NULL); - for (n = eset_first(loopnodes); n != NULL; n = eset_next(loopnodes)) { + } + eset_foreach(loopnodes, ir_node*, n) { if (!is_Block(n)) { b = get_nodes_block(n); set_irn_link(n, get_irn_link(b)); set_irn_link(b, n); } } - for (n = eset_first(extnodes); n != NULL; n = eset_next(extnodes)) { + eset_foreach(extnodes, ir_node*, n) { if (!is_Block(n)) { b = get_nodes_block(n); set_irn_link(n, get_irn_link(b)); @@ -2748,20 +2648,20 @@ void dump_loop(FILE *F, ir_loop *l) } } - for (b = eset_first(loopnodes); b != NULL; b = eset_next(loopnodes)) { + eset_foreach(loopnodes, ir_node*, b) { if (is_Block(b)) { fprintf(F, "graph: { title: \""); 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 */ dump_ir_data_edges(F, b); /* dump the nodes that go into the block */ - for (n = get_irn_link(b); n; n = get_irn_link(n)) { + for (n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { if (eset_contains(extnodes, n)) overrule_nodecolor = ird_color_block_inout; dump_node(F, n); @@ -2775,17 +2675,17 @@ void dump_loop(FILE *F, ir_loop *l) fprintf(F, "\n"); } } - for (b = eset_first(extnodes); b != NULL; b = eset_next(extnodes)) { + eset_foreach(extnodes, ir_node*, b) { if (is_Block(b)) { fprintf(F, "graph: { title: \""); 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 */ - for (n = get_irn_link(b); n; n = get_irn_link(n)) { + for (n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { if (!eset_contains(loopnodes, n)) overrule_nodecolor = ird_color_block_inout; dump_node(F, n); @@ -2869,7 +2769,7 @@ void dump_ir_graph_ext(ir_graph_dump_func func, ir_graph *graph, } obstack_1grow(&obst, '\0'); - file_name = obstack_finish(&obst); + file_name = (char*)obstack_finish(&obst); /* xvcg expects only so we need "b"inary mode (for win32) */ out = fopen(file_name, "wb"); obstack_free(&obst, file_name); @@ -2898,7 +2798,7 @@ void dump_ir_prog_ext(ir_prog_dump_func func, const char *suffix) } obstack_1grow(&obst, '\0'); - file_name = obstack_finish(&obst); + file_name = (char*)obstack_finish(&obst); out = fopen(file_name, "wb"); obstack_free(&obst, file_name); @@ -2920,8 +2820,7 @@ void dump_ir_graph(ir_graph *graph, const char *suffix) void dump_all_ir_graphs(const char *suffix) { - int n_irgs = get_irp_n_irgs(); - int i; + size_t i, n_irgs = get_irp_n_irgs(); for (i = 0; i < n_irgs; ++i) { ir_graph *irg = get_irp_irg(i); @@ -2929,17 +2828,17 @@ void dump_all_ir_graphs(const char *suffix) } } -struct pass_t { +typedef struct pass_t { ir_prog_pass_t pass; char suffix[1]; -}; +} pass_t; /** * Wrapper around dump_all_ir_graphs(). */ static int dump_all_ir_graphs_wrapper(ir_prog *irp, void *context) { - struct pass_t *pass = context; + pass_t *pass = (pass_t*)context; (void)irp; dump_all_ir_graphs(pass->suffix); @@ -2948,8 +2847,8 @@ static int dump_all_ir_graphs_wrapper(ir_prog *irp, void *context) ir_prog_pass_t *dump_all_ir_graph_pass(const char *name, const char *suffix) { - size_t len = strlen(suffix); - struct pass_t *pass = xmalloc(sizeof(*pass) + len); + size_t len = strlen(suffix) + 1; + pass_t *pass = XMALLOCF(pass_t, suffix, len); ir_prog_pass_t *res = def_prog_pass_constructor( &pass->pass, name ? name : "dump_all_graphs", dump_all_ir_graphs_wrapper); @@ -2957,7 +2856,7 @@ ir_prog_pass_t *dump_all_ir_graph_pass(const char *name, const char *suffix) res->dump_irprog = ir_prog_no_dump; res->verify_irprog = ir_prog_no_verify; - memcpy(pass->suffix, suffix, len+1); + memcpy(pass->suffix, suffix, len); return res; }