use is_$KIND(n) instead of get_irn_op(n) == op_$KIND.
[libfirm] / ir / ir / irdump.c
index 3e2e638..a2cde19 100644 (file)
@@ -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"
@@ -415,24 +414,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 +469,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 +490,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 +624,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));
@@ -1202,7 +1139,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 +1151,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 +1262,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);
@@ -1463,7 +1399,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 +1414,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");
 }
 
@@ -1677,7 +1612,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 +1628,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 +1967,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 +1994,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 +2050,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 +2058,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);
@@ -2458,7 +2284,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 +2294,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 +2328,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 +2342,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 +2352,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);