X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firdump.c;h=ac03cea9f2d05867592e14a59e86c81525b9a065;hb=b59e22a229aa1227ef992c184c79fdafe34908cf;hp=3e2e63854cbb83cc31bf2291f6ba76d9dbfe71d5;hpb=8294af81ea394a04f4469035d8d15943467022bc;p=libfirm diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 3e2e63854..ac03cea9f 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -50,7 +50,6 @@ #include "irdom.h" #include "irloop_t.h" #include "callgraph.h" -#include "irextbb_t.h" #include "irhooks.h" #include "dbginfo_t.h" #include "irtools.h" @@ -65,6 +64,109 @@ #include "pset.h" #include "util.h" +/** + * Symbolic names for the different dumping colors. + */ +typedef enum ird_color_t { + ird_color_none = -1, + ird_color_prog_background, + ird_color_block_background, + ird_color_dead_block_background, + ird_color_block_inout, + ird_color_default_node, + ird_color_phi, + ird_color_memory, + ird_color_controlflow, + ird_color_const, + ird_color_anchor, + ird_color_proj, + ird_color_uses_memory, + ird_color_error, + ird_color_entity, + ird_color_count +} ird_color_t; + +/** + * Edge kinds. + */ +typedef enum { + data_edge = 0x01, /**< A data edge between two basic blocks. */ + block_edge = 0x02, /**< An edge from a node to its basic block. */ + cf_edge = 0x03, /**< A regularly control flow edge. */ + exc_cf_edge = 0x04, /**< An exceptional control flow edge. */ + mem_edge = 0x05, /**< A memory edge. */ + dominator_edge = 0x06, /**< A dominator edge from a block to its immediate dominator. */ + node2type_edge = 0x07, /**< An edge from an IR node to a type. */ + + ent_type_edge = 0x11, /**< An edge from an entity to its type. */ + ent_own_edge = 0x12, /**< An edge from an entity to its owner type. */ + ent_overwrites_edge = 0x13, /**< An edge from an entity to the entity it overwrites. */ + ent_value_edge = 0x14, /**< An edge from an entity to its value entity. */ + ent_corr_edge = 0x15, /**< An edge from an entity to the member entity its initializes. */ + + meth_par_edge = 0x21, /**< An edge from a method type to one of its parameter types. */ + meth_res_edge = 0x22, /**< An edge from a method type to one of its result types. */ + type_super_edge = 0x23, /**< An edge from a class type to its super/basis type. */ + union_edge = 0x24, /**< An edge from a union type to its member types. */ + ptr_pts_to_edge = 0x25, /**< An edge from a pointer type to its points-to type. */ + arr_elt_type_edge = 0x26, /**< An edge from an array type to its element type. */ + arr_ent_edge = 0x27, /**< An edge from a array type to its element entity. */ + type_member_edge = 0x28, /**< An edge from a compound type to its member entities. */ + + /* additional flags */ + intra_edge = 0, /**< Intra edge flag: edge do not cross basic block boundaries */ + inter_edge = 0x40, /**< Inter edge flag: edge cross basic block boundaries */ + back_edge = 0x80 /**< Backwards edge flag. */ +} edge_kind; + +/* Attributes of nodes */ +#define PRINT_DEFAULT_NODE_ATTR +#define DEFAULT_NODE_ATTR " " +#define DEFAULT_TYPE_ATTRIBUTE " " +#define DEFAULT_ENUM_ITEM_ATTRIBUTE " " + +/* Attributes of edges between Firm nodes */ +#define INTRA_DATA_EDGE_ATTR "class:1 priority:50" +#define INTER_DATA_EDGE_ATTR "class:16 priority:10" +#define BLOCK_EDGE_ATTR "class:2 priority:50 linestyle:dotted" +#define CF_EDGE_ATTR "class:13 priority:60 color:red" +#define EXC_CF_EDGE_ATTR "class:18 priority:60 color:blue" +#define INTRA_MEM_EDGE_ATTR "class:14 priority:50 color:blue" +#define INTER_MEM_EDGE_ATTR "class:17 priority:10 color:blue" +#define DOMINATOR_EDGE_ATTR "class:15 color:red" +#define POSTDOMINATOR_EDGE_ATTR "class:19 color:red linestyle:dotted" +#define KEEP_ALIVE_EDGE_ATTR "class:20 priority:10 color:purple" +#define KEEP_ALIVE_CF_EDGE_ATTR "class:20 priority:60 color:purple" +#define KEEP_ALIVE_DF_EDGE_ATTR "class:20 priority:10 color:purple" +#define ANCHOR_EDGE_ATTR "class:20 priority:60 color:purple linestyle:dotted" +#define OUT_EDGE_ATTR "class:21 priority:10 color:gold linestyle:dashed" + +#define BACK_EDGE_ATTR "linestyle:dashed " + +/* Attributes of edges between Firm nodes and type/entity nodes */ +#define NODE2TYPE_EDGE_ATTR "class:2 priority:2 linestyle:dotted" + +/* Attributes of edges in type/entity graphs. */ +#define TYPE_METH_NODE_ATTR "color: lightyellow" +#define TYPE_CLASS_NODE_ATTR "color: green" +#define TYPE_DESCRIPTION_NODE_ATTR "color: lightgreen" +#define ENTITY_NODE_ATTR "color: yellow" +#define ENUM_ITEM_NODE_ATTR "color: green" +#define ENT_TYPE_EDGE_ATTR "class: 3 label: \"type\" color: red" +#define ENT_OWN_EDGE_ATTR "class: 4 label: \"owner\" color: black" +#define METH_PAR_EDGE_ATTR "class: 5 label: \"param %zu\" color: green" +#define METH_RES_EDGE_ATTR "class: 6 label: \"res %zu\" color: green" +#define TYPE_SUPER_EDGE_ATTR "class: 7 label: \"supertype\" color: red" +#define UNION_EDGE_ATTR "class: 8 label: \"component\" color: blue" +#define PTR_PTS_TO_EDGE_ATTR "class: 9 label: \"points to\" color:green" +#define ARR_ELT_TYPE_EDGE_ATTR "class: 10 label: \"arr elt tp\" color:green" +#define ARR_ENT_EDGE_ATTR "class: 10 label: \"arr ent\" color: green" +#define ENT_OVERWRITES_EDGE_ATTR "class: 11 label: \"overwrites\" color:red" +#define ENT_VALUE_EDGE_ATTR "label: \"value %d\"" +#define ENT_CORR_EDGE_ATTR "label: \"value %zu corresponds to \" " +#define TYPE_MEMBER_EDGE_ATTR "class: 12 label: \"member\" color:blue" +/* #define CALLGRAPH_EDGE_ATTR "calls" */ + typedef struct pns_lookup { long nr; /**< the proj number */ const char *name; /**< the name of the Proj */ @@ -193,12 +295,10 @@ int ir_should_dump(const char *name) /* -------------- some extended helper functions ----------------- */ -const char *get_mode_name_ex(const ir_mode *mode, int *bad) +char const *get_mode_name_ex(ir_mode const *const mode) { if (is_mode(mode)) return get_mode_name(mode); - if (bad != NULL) - *bad |= 1; return ""; } @@ -415,24 +515,6 @@ static void print_node_ent_edge(FILE *F, const ir_node *irn, const ir_entity *en va_end(ap); } -/** - * Prints the edge from an entity ent to a node irn with additional info fmt, ... - * to the file F. - */ -static void print_ent_node_edge(FILE *F, const ir_entity *ent, const ir_node *irn, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - fprintf(F, "edge: { sourcename: "); - print_entityid(F, ent); - fprintf(F, "\" targetname: "); - print_nodeid(F, irn); - ir_vfprintf(F, fmt, ap); - fprintf(F,"}\n"); - va_end(ap); -} - /** * Prints the edge from a type tp to an enumeration item item with additional info fmt, ... * to the file F. @@ -488,13 +570,10 @@ static void init_irdump(void) */ static void *ird_get_irn_link(const ir_node *n) { - void *res = NULL; if (irdump_link_map == NULL) return NULL; - if (pmap_contains(irdump_link_map, n)) - res = pmap_get(irdump_link_map, n); - return res; + return pmap_get(void, irdump_link_map, n); } /** @@ -512,13 +591,10 @@ static void ird_set_irn_link(const ir_node *n, void *x) */ static void *ird_get_irg_link(const ir_graph *irg) { - void *res = NULL; if (irdump_link_map == NULL) return NULL; - if (pmap_contains(irdump_link_map, irg)) - res = pmap_get(irdump_link_map, irg); - return res; + return pmap_get(void, irdump_link_map, irg); } /** @@ -649,44 +725,6 @@ static ir_node **construct_block_lists(ir_graph *irg) return (ir_node**)ird_get_irg_link(irg); } -typedef struct list_tuple { - ir_node **blk_list; - ir_extblk **extbb_list; -} list_tuple; - -/** Construct lists to walk IR extended block-wise. - * Free the lists in the tuple with DEL_ARR_F(). Sets the irg link field to - * NULL in all graphs not visited. - */ -static list_tuple *construct_extblock_lists(ir_graph *irg) -{ - ir_node **blk_list = construct_block_lists(irg); - size_t i, n; - list_tuple *lists = XMALLOC(list_tuple); - - lists->blk_list = NEW_ARR_F(ir_node *, 0); - lists->extbb_list = NEW_ARR_F(ir_extblk *, 0); - - inc_irg_block_visited(irg); - for (i = 0, n = ARR_LEN(blk_list); i < n; ++i) { - ir_extblk *ext; - - if (is_Block(blk_list[i])) { - ext = get_Block_extbb(blk_list[i]); - - if (extbb_not_visited(ext)) { - ARR_APP1(ir_extblk *, lists->extbb_list, ext); - mark_extbb_visited(ext); - } - } else - ARR_APP1(ir_node *, lists->blk_list, blk_list[i]); - } - DEL_ARR_F(blk_list); - - ird_set_irg_link(irg, lists); - return lists; -} - void dump_node_opcode(FILE *F, const ir_node *n) { const ir_op_ops *ops = get_op_ops(get_irn_op(n)); @@ -722,7 +760,7 @@ void dump_node_opcode(FILE *F, const ir_node *n) case iro_Load: 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)); + fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Load_mode(n))); break; case iro_Store: if (get_Store_unaligned(n) == align_non_aligned) @@ -737,19 +775,14 @@ void dump_node_opcode(FILE *F, const ir_node *n) fprintf(F, "%s%s", get_irn_opname(n), (flags & ir_dump_flag_show_marks) ? (get_Block_mark(n) ? "*" : "") : ""); break; - case iro_Conv: - if (get_Conv_strict(n)) - fprintf(F, "strict"); - fprintf(F, "%s", get_irn_opname(n)); - break; case iro_Div: fprintf(F, "%s", get_irn_opname(n)); if (get_Div_no_remainder(n)) fprintf(F, "RL"); - fprintf(F, "[%s]", get_mode_name_ex(get_Div_resmode(n), NULL)); + fprintf(F, "[%s]", get_mode_name_ex(get_Div_resmode(n))); break; case iro_Mod: - fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Mod_resmode(n), NULL)); + fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Mod_resmode(n))); break; case iro_Builtin: fprintf(F, "%s[%s]", get_irn_opname(n), get_builtin_kind_name(get_Builtin_kind(n))); @@ -793,7 +826,7 @@ static void dump_node_mode(FILE *F, const ir_node *n) if (mode != NULL && mode != mode_BB && mode != mode_ANY && mode != mode_BAD && (mode != mode_T || iro == iro_Proj)) - fprintf(F, "%s", get_mode_name_ex(mode, NULL)); + fprintf(F, "%s", get_mode_name_ex(mode)); } } @@ -845,11 +878,9 @@ static void dump_node_nodeattr(FILE *F, const ir_node *n) proj_nr = get_Proj_proj(n); code = get_irn_opcode(pred); - 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); - else { + } else { unsigned i, j, f = 0; for (i = 0; i < ARRAY_SIZE(proj_lut); ++i) { @@ -877,9 +908,6 @@ static void dump_node_nodeattr(FILE *F, const ir_node *n) 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; @@ -1202,7 +1230,7 @@ static void print_data_edge_vcgattr(FILE *F, const ir_node *from, int to) * do not use get_nodes_block() here, will fail * if the irg is not pinned. */ - if (get_irn_n(from, -1) == get_irn_n(get_irn_n(from, to), -1)) + if (get_nodes_block(from) == get_nodes_block(get_irn_n(from, to))) fprintf(F, INTRA_DATA_EDGE_ATTR); else fprintf(F, INTER_DATA_EDGE_ATTR); @@ -1214,7 +1242,7 @@ static void print_mem_edge_vcgattr(FILE *F, const ir_node *from, int to) * do not use get_nodes_block() here, will fail * if the irg is not pinned. */ - if (get_irn_n(from, -1) == get_irn_n(get_irn_n(from, to), -1)) + if (get_nodes_block(from) == get_nodes_block(get_irn_n(from, to))) fprintf(F, INTRA_MEM_EDGE_ATTR); else fprintf(F, INTER_MEM_EDGE_ATTR); @@ -1325,9 +1353,8 @@ static void dump_ir_data_edges(FILE *F, const ir_node *n) */ static void dump_ir_edges(ir_node *node, void *env) { - int i = 0; - FILE *F = (FILE*)env; - const ir_edge_t *edge; + int i = 0; + FILE *F = (FILE*)env; foreach_out_edge(node, edge) { ir_node *succ = get_edge_src_irn(edge); @@ -1398,7 +1425,6 @@ static void dump_const_expression(FILE *F, ir_node *value) static void dump_whole_block(FILE *F, const ir_node *block) { ir_node *node; - ird_color_t color = ird_color_block_background; assert(is_Block(block)); @@ -1407,11 +1433,11 @@ static void dump_whole_block(FILE *F, const ir_node *block) fprintf(F, " label: \""); dump_node_label(F, block); - /* colorize blocks */ - if (! get_Block_matured(block)) - color = ird_color_block_background; - fprintf(F, "\" status:clustered "); + /* colorize blocks */ + ird_color_t const color = + !get_Block_matured(block) ? ird_color_error : + ird_color_block_background; print_vcg_color(F, color); fprintf(F, "\n"); @@ -1463,7 +1489,7 @@ static void dump_block_graph(FILE *F, ir_graph *irg) } if ((flags & ir_dump_flag_loops) - && is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO)) + && irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO)) dump_loop_nodes_into_graph(F, irg); } @@ -1478,39 +1504,38 @@ static void dump_graph_info(FILE *F, ir_graph *irg) fprintf(F, "\n"); /* dump graph state */ - fprintf(F, "state:"); - if (is_irg_state(irg, IR_GRAPH_STATE_ARCH_DEP)) + fprintf(F, "constraints:"); + if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_ARCH_DEP)) fprintf(F, " arch_dep"); - if (is_irg_state(irg, IR_GRAPH_STATE_MODEB_LOWERED)) + if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_MODEB_LOWERED)) fprintf(F, " modeb_lowered"); - if (is_irg_state(irg, IR_GRAPH_STATE_NORMALISATION2)) + if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_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)) + if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_OPTIMIZE_UNREACHABLE_CODE)) fprintf(F, " optimize_unreachable_code"); - if (is_irg_state(irg, IR_GRAPH_STATE_NO_CRITICAL_EDGES)) + fprintf(F, "\n"); + + fprintf(F, "properties:"); + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES)) fprintf(F, " no_critical_edges"); - if (is_irg_state(irg, IR_GRAPH_STATE_NO_BADS)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_BADS)) fprintf(F, " no_bads"); - if (is_irg_state(irg, IR_GRAPH_STATE_NO_UNREACHABLE_CODE)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE)) fprintf(F, " no_unreachable_code"); - if (is_irg_state(irg, IR_GRAPH_STATE_ONE_RETURN)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_ONE_RETURN)) fprintf(F, " one_return"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE)) fprintf(F, " consistent_dominance"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE)) fprintf(F, " consistent_postdominance"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUT_EDGES)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES)) fprintf(F, " consistent_out_edges"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUTS)) fprintf(F, " consistent_outs"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO)) fprintf(F, " consistent_loopinfo"); - if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE)) + if (irg_has_properties(irg, IR_GRAPH_PROPERTY_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"); } @@ -1565,9 +1590,6 @@ static void dump_node2type_edges(ir_node *n, void *env) case iro_Free: print_node_type_edge(F,n,get_Free_type(n),NODE2TYPE_EDGE_ATTR); break; - case iro_Cast: - print_node_type_edge(F,n,get_Cast_type(n),NODE2TYPE_EDGE_ATTR); - break; default: break; } @@ -1677,7 +1699,6 @@ static void dump_type_info(type_or_ent tore, void *env) switch (get_kind(tore.ent)) { case k_entity: { ir_entity *ent = tore.ent; - ir_node *value; /* The node */ dump_entity_node(F, ent); /* The Edges */ @@ -1694,21 +1715,6 @@ static void dump_type_info(type_or_ent tore, void *env) if (ent->initializer != NULL) { /* new style initializers */ 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); 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, ird_color_none, ENT_CORR_EDGE_ATTR, i); - /* - fprintf(F, "edge: { sourcename: \"%p\" targetname: \"%p\" " - ENT_CORR_EDGE_ATTR "}\n", GET_ENTID(ent), - get_compound_ent_value_member(ent, i), i); - */ - } - } } } break; @@ -2048,106 +2054,13 @@ static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg) } } -/** dumps a graph extended block-wise. Expects all blockless nodes in arr in irgs link. - * The outermost nodes: blocks and nodes not op_pin_state_pinned, Bad, Unknown. */ -static void dump_extblock_graph(FILE *F, ir_graph *irg) -{ - size_t i, arr_len; - ir_extblk **arr = (ir_extblk**)ird_get_irg_link(irg); - - for (i = 0, arr_len = ARR_LEN(arr); i < arr_len; ++i) { - ir_extblk *extbb = arr[i]; - ir_node *leader = get_extbb_leader(extbb); - size_t j, n_blks; - - fprintf(F, "graph: { title: \""); - fprintf(F, "x%ld", get_irn_node_nr(leader)); - fprintf(F, "\" label: \"ExtBB %ld\" status:clustered color:lightgreen\n", - get_irn_node_nr(leader)); - - 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. */ - dump_whole_block(F, node); - } else { - /* Nodes that are not in a Block. */ - dump_node(F, node); - if (is_Bad(get_nodes_block(node)) && !node_floats(node)) { - dump_const_block_local(F, node); - } - dump_ir_data_edges(F, node); - } - } - fprintf(F, "}\n"); - } - - if ((flags & ir_dump_flag_loops) - && (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO))) - dump_loop_nodes_into_graph(F, irg); - - free_extbb(irg); -} - -static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg) -{ - size_t i; - ir_entity *ent = get_irg_entity(irg); - - if (!is_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS)) - compute_extbb(irg); - - construct_extblock_lists(irg); - - fprintf(F, "graph: { title: "); - print_irgid(F, irg); - fprintf(F, " label: \"%s\" status:clustered color: white\n", - get_ent_dump_name(ent)); - - dump_graph_info(F, irg); - print_dbg_info(F, get_entity_dbg_info(ent)); - - for (i = get_irp_n_irgs(); i > 0;) { - 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(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(other_irg, lists->blk_list); - dump_block_graph(F, other_irg); - } - - DEL_ARR_F(lists->extbb_list); - DEL_ARR_F(lists->blk_list); - xfree(lists); - } - } - - /* Close the vcg information for the irg */ - fprintf(F, "}\n\n"); - - free_extbb(irg); -} - void dump_ir_graph_file(FILE *out, ir_graph *irg) { dump_vcg_header(out, get_irg_dump_name(irg), NULL, NULL); /* dump nodes */ if (flags & ir_dump_flag_blocks_as_subgraphs) { - if (flags & ir_dump_flag_group_extbb) { - dump_blocks_extbb_grouped(out, irg); - } else { - dump_blocks_as_subgraphs(out, irg); - } + dump_blocks_as_subgraphs(out, irg); } else { /* dump_node_with_edges must be called in post visiting predecessors */ ird_walk_graph(irg, NULL, dump_node_with_edges, out); @@ -2168,7 +2081,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) - && (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS))) { + && (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUTS))) { irg_out_walk(get_irg_start(irg), dump_out_edge, NULL, out); } @@ -2224,7 +2137,7 @@ static void dump_block_to_cfg(ir_node *block, void *env) /* Dump dominator/postdominator edge */ if (ir_get_dump_flags() & ir_dump_flag_dominance) { - if (is_irg_state(get_irn_irg(block), IR_GRAPH_STATE_CONSISTENT_DOMINANCE) && get_Block_idom(block)) { + if (irg_has_properties(get_irn_irg(block), IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE) && get_Block_idom(block)) { ir_node *pred = get_Block_idom(block); fprintf(F, "edge: { sourcename: "); print_nodeid(F, block); @@ -2232,7 +2145,7 @@ static void dump_block_to_cfg(ir_node *block, void *env) print_nodeid(F, pred); fprintf(F, " " DOMINATOR_EDGE_ATTR "}\n"); } - if (is_irg_state(get_irn_irg(block), IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE) && get_Block_ipostdom(block)) { + if (irg_has_properties(get_irn_irg(block), IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE) && get_Block_ipostdom(block)) { ir_node *pred = get_Block_ipostdom(block); fprintf(F, "edge: { sourcename: "); print_nodeid(F, block); @@ -2375,7 +2288,6 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop) (unsigned long) first, (unsigned long) first, (unsigned long) i-1); - loop_node_started = false; } } @@ -2458,7 +2370,6 @@ void dump_loop(FILE *F, ir_loop *l) { pset *loopnodes = pset_new_ptr_default(); pset *extnodes = pset_new_ptr_default(); - ir_node *n, *b; char name[50]; snprintf(name, sizeof(name), "loop_%ld", get_loop_loop_nr(l)); @@ -2469,28 +2380,28 @@ void dump_loop(FILE *F, ir_loop *l) collect_nodeloop_external_nodes(l, loopnodes, extnodes); /* build block lists */ - foreach_pset(loopnodes, ir_node*, n) { + foreach_pset(loopnodes, ir_node, n) { set_irn_link(n, NULL); } - foreach_pset(extnodes, ir_node*, n) { + foreach_pset(extnodes, ir_node, n) { set_irn_link(n, NULL); } - foreach_pset(loopnodes, ir_node*, n) { + foreach_pset(loopnodes, ir_node, n) { if (!is_Block(n)) { - b = get_nodes_block(n); + ir_node *const b = get_nodes_block(n); set_irn_link(n, get_irn_link(b)); set_irn_link(b, n); } } - foreach_pset(extnodes, ir_node*, n) { + foreach_pset(extnodes, ir_node, n) { if (!is_Block(n)) { - b = get_nodes_block(n); + ir_node *const b = get_nodes_block(n); set_irn_link(n, get_irn_link(b)); set_irn_link(b, n); } } - foreach_pset(loopnodes, ir_node*, b) { + foreach_pset(loopnodes, ir_node, b) { if (is_Block(b)) { fprintf(F, "graph: { title: "); print_nodeid(F, b); @@ -2503,7 +2414,7 @@ void dump_loop(FILE *F, ir_loop *l) dump_ir_data_edges(F, b); /* dump the nodes that go into the block */ - for (n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { + for (ir_node *n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { if (pset_find_ptr(extnodes, n)) overrule_nodecolor = ird_color_block_inout; dump_node(F, n); @@ -2517,7 +2428,7 @@ void dump_loop(FILE *F, ir_loop *l) fprintf(F, "\n"); } } - foreach_pset(extnodes, ir_node*, b) { + foreach_pset(extnodes, ir_node, b) { if (is_Block(b)) { fprintf(F, "graph: { title: "); print_nodeid(F, b); @@ -2527,7 +2438,7 @@ void dump_loop(FILE *F, ir_loop *l) fprintf(F, "\" status:clustered color:lightblue\n"); /* dump the nodes that go into the block */ - for (n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { + for (ir_node *n = (ir_node*)get_irn_link(b); n; n = (ir_node*)get_irn_link(n)) { if (!pset_find_ptr(loopnodes, n)) overrule_nodecolor = ird_color_block_inout; dump_node(F, n);