avoid macros in irdump interface
authorMatthias Braun <matze@braunis.de>
Wed, 7 Dec 2011 16:17:55 +0000 (17:17 +0100)
committerMatthias Braun <matze@braunis.de>
Wed, 7 Dec 2011 22:28:13 +0000 (23:28 +0100)
NEWS.md
ir/be/bedump.c
ir/be/beinfo.c
ir/be/beprefalloc.c
ir/ir/irdump.c
ir/ir/irdump_t.h

diff --git a/NEWS.md b/NEWS.md
index 45e39fe..ce9d1fd 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,5 @@
+
+
 libFirm 1.19.0 (2011-03-15)
 ---------------------------
 
index 74dc9fe..fe97370 100644 (file)
@@ -56,11 +56,11 @@ static void dump_ifg_edges(FILE *F, const be_ifg_t *ifg)
                        if (get_irn_node_nr(node) >= get_irn_node_nr(neighbour))
                                continue;
 
-                       fprintf(F, "edge: {sourcename: \"");
-                       PRINT_NODEID(node);
-                       fprintf(F, "\" targetname: \"");
-                       PRINT_NODEID(neighbour);
-                       fprintf(F, "\" arrowstyle:none class:1}\n");
+                       fprintf(F, "edge: {sourcename: ");
+                       print_nodeid(F, node);
+                       fprintf(F, " targetname: ");
+                       print_nodeid(F, neighbour);
+                       fprintf(F, " arrowstyle:none class:1}\n");
                }
        }
 }
@@ -93,11 +93,11 @@ static void dump_affinity_edges(FILE *F, const copy_opt_t *co,
                        if (get_irn_node_nr(a->irn) >= get_irn_node_nr(n->irn))
                                continue;
 
-                       fprintf(F, "edge: {sourcename: \"");
-                       PRINT_NODEID(a->irn);
-                       fprintf(F, "\" targetname: \"");
-                       PRINT_NODEID(n->irn);
-                       fprintf(F, "\" arrowstyle:none");
+                       fprintf(F, "edge: {sourcename: ");
+                       print_nodeid(F, a->irn);
+                       fprintf(F, " targetname: ");
+                       print_nodeid(F, n->irn);
+                       fprintf(F, " arrowstyle:none");
 
                        if (dump_costs)
                                fprintf(F, " label:\"%d\"", n->costs);
index e78fed0..53aca77 100644 (file)
@@ -156,11 +156,11 @@ static void sched_edge_hook(FILE *F, const ir_node *irn)
 
        if (sched_is_scheduled(irn) && sched_has_prev(irn)) {
                ir_node *prev = sched_prev(irn);
-               fprintf(F, "edge:{sourcename:\"");
-               PRINT_NODEID(irn);
-               fprintf(F, "\" targetname:\"");
-               PRINT_NODEID(prev);
-               fprintf(F, "\" color:magenta}\n");
+               fprintf(F, "edge:{sourcename: ");
+               print_nodeid(F, irn);
+               fprintf(F, " targetname: ");
+               print_nodeid(F, prev);
+               fprintf(F, " color:magenta}\n");
        }
 }
 
index 85b7f0c..9266204 100644 (file)
@@ -1245,6 +1245,13 @@ static void solve_lpp(ir_nodeset_t *live_nodes, ir_node *node,
        lpp_free(lpp);
 }
 
+static bool is_aligned(unsigned num, unsigned alignment)
+{
+       unsigned mask = alignment-1;
+       assert(is_po2(alignment));
+       return (num&mask) == 0;
+}
+
 /**
  * Enforce constraints at a node by live range splits.
  *
@@ -1264,7 +1271,8 @@ static void enforce_constraints(ir_nodeset_t *live_nodes, ir_node *node,
        /* construct a list of register occupied by live-through values */
        unsigned *live_through_regs = NULL;
 
-       /* see if any use constraints are not met */
+       /* see if any use constraints are not met and whether double-width
+        * values are involved */
        bool double_width = false;
        bool good = true;
        for (i = 0; i < arity; ++i) {
@@ -1281,16 +1289,22 @@ static void enforce_constraints(ir_nodeset_t *live_nodes, ir_node *node,
                req = arch_get_irn_register_req_in(node, i);
                if (req->width > 1)
                        double_width = true;
+               reg       = arch_get_irn_register(op);
+               reg_index = arch_register_get_index(reg);
+               if (req->type & arch_register_req_type_aligned) {
+                       if (!is_aligned(reg_index, req->width)) {
+                               good = false;
+                               continue;
+                       }
+               }
                if (!(req->type & arch_register_req_type_limited))
                        continue;
 
                limited   = req->limited;
-               reg       = arch_get_irn_register(op);
-               reg_index = arch_register_get_index(reg);
                if (!rbitset_is_set(limited, reg_index)) {
                        /* found an assignment outside the limited set */
                        good = false;
-                       break;
+                       continue;
                }
        }
 
index 534d918..98d0bf8 100644 (file)
@@ -262,6 +262,31 @@ static void print_vcg_color(FILE *out, ird_color_t color)
        fprintf(out, "color:%s", color_names[color]);
 }
 
+void print_nodeid(FILE *F, const ir_node *node)
+{
+       fprintf(F, "\"n%ld\"", get_irn_node_nr(node));
+}
+
+void print_irgid(FILE *F, const ir_graph *irg)
+{
+       fprintf(F, "\"g%ld\"", get_irg_graph_nr(irg));
+}
+
+void print_typeid(FILE *F, const ir_type *type)
+{
+       fprintf(F, "\"t%ld\"", get_type_nr(type));
+}
+
+void print_entityid(FILE *F, const ir_entity *entity)
+{
+       fprintf(F, "\"e%ld\"", get_entity_nr(entity));
+}
+
+static void print_itemid(FILE *F, const ir_type *tp, size_t itemnr)
+{
+       fprintf(F, "\"i%ldT%zu\"", get_type_nr(tp), itemnr);
+}
+
 /**
  * Prints the edge kind of a given IR node.
  *
@@ -285,8 +310,10 @@ static void print_type_type_edge(FILE *F, const ir_type *S, const ir_type *T, co
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(S);
-       fprintf(F, " targetname: "); PRINT_TYPEID(T);
+       fprintf(F, "edge: { sourcename: ");
+       print_typeid(F, S);
+       fprintf(F, " targetname: ");
+       print_typeid(F, T);
        ir_vfprintf(F, fmt, ap);
        fprintf(F,"}\n");
        va_end(ap);
@@ -301,8 +328,10 @@ static void print_type_ent_edge(FILE *F, const ir_type *tp, const ir_entity *ent
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(tp);
-       fprintf(F, " targetname: \""); PRINT_ENTID(ent); fprintf(F, "\"");
+       fprintf(F, "edge: { sourcename: ");
+       print_typeid(F, tp);
+       fprintf(F, " targetname: ");
+       print_entityid(F, ent);
        ir_vfprintf(F, fmt, ap);
        fprintf(F, "}\n");
        va_end(ap);
@@ -318,11 +347,12 @@ static void print_ent_ent_edge(FILE *F, const ir_entity *ent1, const ir_entity *
 
        va_start(ap, fmt);
        if (backedge)
-               fprintf(F, "backedge: { sourcename: \"");
+               fprintf(F, "backedge: { sourcename: ");
        else
-               fprintf(F, "edge: { sourcename: \"");
-       PRINT_ENTID(ent1);
-       fprintf(F, "\" targetname: \""); PRINT_ENTID(ent2);  fprintf(F, "\"");
+               fprintf(F, "edge: { sourcename: ");
+       print_entityid(F, ent1);
+       fprintf(F, " targetname: ");
+       print_entityid(F, ent2);
        ir_vfprintf(F, fmt, ap);
        fprintf(F, " ");
        if (color != ird_color_none)
@@ -340,8 +370,10 @@ static void print_ent_type_edge(FILE *F, const ir_entity *ent, const ir_type *tp
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: \""); PRINT_ENTID(ent);
-       fprintf(F, "\" targetname: "); PRINT_TYPEID(tp);
+       fprintf(F, "edge: { sourcename: ");
+       print_entityid(F, ent);
+       fprintf(F, " targetname: ");
+       print_typeid(F, tp);
        ir_vfprintf(F, fmt, ap);
        fprintf(F,"}\n");
        va_end(ap);
@@ -356,8 +388,10 @@ static void print_node_type_edge(FILE *F, const ir_node *irn, ir_type *tp, const
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(irn);
-       fprintf(F, "\" targetname: "); PRINT_TYPEID(tp);
+       fprintf(F, "edge: { sourcename: ");
+       print_nodeid(F, irn);
+       fprintf(F, " targetname: ");
+       print_typeid(F, tp);
        ir_vfprintf(F, fmt, ap);
        fprintf(F,"}\n");
        va_end(ap);
@@ -372,9 +406,10 @@ static void print_node_ent_edge(FILE *F, const ir_node *irn, const ir_entity *en
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: \""); PRINT_NODEID(irn);
-       fprintf(F, "\" targetname: \""); PRINT_ENTID(ent);
-       fprintf(F, "\"");
+       fprintf(F, "edge: { sourcename: ");
+       print_nodeid(F, irn);
+       fprintf(F, " targetname: ");
+       print_entityid(F, ent);
        ir_vfprintf(F, fmt, ap);
        fprintf(F,"}\n");
        va_end(ap);
@@ -389,8 +424,10 @@ static void print_ent_node_edge(FILE *F, const ir_entity *ent, const ir_node *ir
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: \""); PRINT_ENTID(ent);
-       fprintf(F, "\" targetname: \""); PRINT_NODEID(irn); fprintf(F, "\"");
+       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);
@@ -405,8 +442,10 @@ static void print_enum_item_edge(FILE *F, const ir_type *tp, size_t item, const
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(tp);
-       fprintf(F, " targetname: \""); PRINT_ITEMID(tp, item); fprintf(F, "\" ");
+       fprintf(F, "edge: { sourcename: ");
+       print_typeid(F, tp);
+       fprintf(F, " targetname: ");
+       print_itemid(F, tp, item);
        ir_vfprintf(F, fmt, ap);
        fprintf(F,"}\n");
        va_end(ap);
@@ -505,7 +544,7 @@ static void clear_link(ir_node *node, void *env)
  * If the entity has a ld_name, returns it if the dump_ld_name is set,
  * else returns the name of the entity.
  */
-static const char *_get_ent_dump_name(const ir_entity *ent, bool dump_ld_name)
+static const char *get_ent_dump_name_(const ir_entity *ent, bool dump_ld_name)
 {
        if (ent == NULL)
                return "<NULL entity>";
@@ -519,13 +558,13 @@ static const char *_get_ent_dump_name(const ir_entity *ent, bool dump_ld_name)
 
 const char *get_ent_dump_name(const ir_entity *ent)
 {
-       return _get_ent_dump_name(ent, flags & ir_dump_flag_ld_names);
+       return get_ent_dump_name_(ent, flags & ir_dump_flag_ld_names);
 }
 
 const char *get_irg_dump_name(const ir_graph *irg)
 {
        /* Don't use get_entity_ld_ident (ent) as it computes the mangled name! */
-       return _get_ent_dump_name(get_irg_entity(irg), true);
+       return get_ent_dump_name_(get_irg_entity(irg), true);
 }
 
 /**
@@ -994,6 +1033,16 @@ static int is_constlike_node(const ir_node *node)
        return is_op_constlike(op);
 }
 
+static void print_constid(FILE *F, const ir_node *user, const ir_node *node)
+{
+       fprintf(F, "\"n%ldb%ld\"", get_irn_node_nr(user), get_irn_node_nr(node));
+}
+
+static void print_constblkid(FILE *F, const ir_node *node, const ir_node *block)
+{
+       fprintf(F, "\"n%ldb%ld\"", get_irn_node_nr(node), get_irn_node_nr(block));
+}
+
 
 /** outputs the predecessors of n, that are constants, local.  I.e.,
    generates a copy of the constant predecessors for each node called with. */
@@ -1016,7 +1065,8 @@ static void dump_const_node_local(FILE *F, const ir_node *n)
                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);
+                       fprintf(F, "node: {title: ");
+                       print_constid(F, n, con);
                        fprintf(F, " label: \"");
                        dump_node_label(F, con);
                        fprintf(F, "\" ");
@@ -1038,30 +1088,28 @@ static void dump_const_block_local(FILE *F, const ir_node *n)
        if (is_constlike_node(blk)) {
                /* Generate a new name for the node by appending the names of
                n and blk. */
-               fprintf(F, "node: {title: \""); PRINT_CONSTBLKID(n, blk);
-               fprintf(F, "\" label: \"");
+               fprintf(F, "node: {title: ");
+               print_constblkid(F, n, blk);
+               fprintf(F, " label: \"");
                dump_node_label(F, blk);
                fprintf(F, "\" ");
                dump_node_info(F, blk);
                dump_node_vcgattr(F, n, blk, 0);
                fprintf(F, "}\n");
 
-               fprintf(F, "edge: { sourcename: \"");
-               PRINT_NODEID(n);
-               fprintf(F, "\" targetname: \""); PRINT_CONSTBLKID(n,blk);
+               fprintf(F, "edge: { sourcename: ");
+               print_nodeid(F, n);
+               fprintf(F, " targetname: ");
+               print_constblkid(F, n, blk);
+               fprintf(F, " ");
 
-               if (dump_edge_vcgattr_hook) {
-                       fprintf(F, "\" ");
-                       if (dump_edge_vcgattr_hook(F, n, -1)) {
-                               fprintf(F, "}\n");
-                               return;
-                       } else {
-                               fprintf(F, " " BLOCK_EDGE_ATTR "}\n");
-                               return;
-                       }
+               if (dump_edge_vcgattr_hook != NULL
+                   && dump_edge_vcgattr_hook(F, n, -1)) {
+                       fprintf(F, "}\n");
+                       return;
                }
 
-               fprintf(F, "\" "   BLOCK_EDGE_ATTR "}\n");
+               fprintf(F, BLOCK_EDGE_ATTR "}\n");
        }
 }
 
@@ -1108,9 +1156,8 @@ void dump_node(FILE *F, const ir_node *n)
                return;
 
        /* dump this node */
-       fputs("node: {title: \"", F);
-       PRINT_NODEID(n);
-       fputs("\"", F);
+       fputs("node: {title: ", F);
+       print_nodeid(F, n);
 
        fputs(" label: \"", F);
        bad = ! irn_verify_irg_dump(n, current_ir_graph, &p);
@@ -1136,23 +1183,18 @@ static void dump_ir_block_edge(FILE *F, const ir_node *n)
                if (get_opt_dump_const_local() && is_constlike_node(block)) {
                        dump_const_block_local(F, n);
                } else {
-                       fprintf(F, "edge: { sourcename: \"");
-                       PRINT_NODEID(n);
-                       fprintf(F, "\" targetname: ");
-                       fprintf(F, "\""); PRINT_NODEID(block); fprintf(F, "\"");
-
-                       if (dump_edge_vcgattr_hook) {
-                               fprintf(F, " ");
-                               if (dump_edge_vcgattr_hook(F, n, -1)) {
-                                       fprintf(F, "}\n");
-                                       return;
-                               } else {
-                                       fprintf(F, " "  BLOCK_EDGE_ATTR "}\n");
-                                       return;
-                               }
+                       fprintf(F, "edge: { sourcename: ");
+                       print_nodeid(F, n);
+                       fprintf(F, " targetname: ");
+                       print_nodeid(F, block);
+                       fprintf(F, " ");
+
+                       if (dump_edge_vcgattr_hook && dump_edge_vcgattr_hook(F, n, -1)) {
+                               fprintf(F, "}\n");
+                               return;
                        }
 
-                       fprintf(F, " "   BLOCK_EDGE_ATTR "}\n");
+                       fprintf(F, BLOCK_EDGE_ATTR "}\n");
                }
        }
 }
@@ -1244,15 +1286,13 @@ static void dump_ir_data_edges(FILE *F, const ir_node *n)
 
                if (dep) {
                        print_node_edge_kind(F, n);
-                       fprintf(F, "{sourcename: \"");
-                       PRINT_NODEID(n);
-                       fprintf(F, "\" targetname: ");
+                       fprintf(F, "{sourcename: ");
+                       print_nodeid(F, n);
+                       fprintf(F, " targetname: ");
                        if ((get_opt_dump_const_local()) && is_constlike_node(dep)) {
-                               PRINT_CONSTID(n, dep);
+                               print_constid(F, n, dep);
                        } else {
-                               fprintf(F, "\"");
-                               PRINT_NODEID(dep);
-                               fprintf(F, "\"");
+                               print_nodeid(F, dep);
                        }
                        fprintf(F, " label: \"%d\" ", i);
                        fprintf(F, " color: darkgreen}\n");
@@ -1265,17 +1305,17 @@ static void dump_ir_data_edges(FILE *F, const ir_node *n)
                assert(pred);
 
                if ((flags & ir_dump_flag_back_edges) && is_backedge(n, i)) {
-                       fprintf(F, "backedge: {sourcename: \"");
+                       fprintf(F, "backedge: {sourcename: ");
                } else {
                        print_node_edge_kind(F, n);
-                       fprintf(F, "{sourcename: \"");
+                       fprintf(F, "{sourcename: ");
                }
-               PRINT_NODEID(n);
-               fprintf(F, "\" targetname: ");
+               print_nodeid(F, n);
+               fprintf(F, " targetname: ");
                if ((get_opt_dump_const_local()) && is_constlike_node(pred)) {
-                       PRINT_CONSTID(n, pred);
+                       print_constid(F, n, pred);
                } else {
-                       fprintf(F, "\""); PRINT_NODEID(pred); fprintf(F, "\"");
+                       print_nodeid(F, pred);
                }
                fprintf(F, " label: \"%d\" ", i);
                print_edge_vcgattr(F, n, i);
@@ -1296,11 +1336,10 @@ static void dump_ir_edges(ir_node *node, void *env)
                ir_node *succ = get_edge_src_irn(edge);
 
                print_node_edge_kind(F, succ);
-               fprintf(F, "{sourcename: \"");
-               PRINT_NODEID(node);
-               fprintf(F, "\" targetname: \"");
-               PRINT_NODEID(succ);
-               fprintf(F, "\"");
+               fprintf(F, "{sourcename: ");
+               print_nodeid(F, node);
+               fprintf(F, " targetname: ");
+               print_nodeid(F, succ);
 
                fprintf(F, " label: \"%d\" ", i);
                fprintf(F, OUT_EDGE_ATTR);
@@ -1368,9 +1407,9 @@ static void dump_whole_block(FILE *F, const ir_node *block)
 
        assert(is_Block(block));
 
-       fprintf(F, "graph: { title: \"");
-       PRINT_NODEID(block);
-       fprintf(F, "\"  label: \"");
+       fprintf(F, "graph: { title: ");
+       print_nodeid(F, block);
+       fprintf(F, " label: \"");
        dump_node_label(F, block);
 
        /* colorize blocks */
@@ -1491,9 +1530,9 @@ static void dump_graph_from_list(FILE *F, ir_graph *irg)
 {
        ir_entity *ent = get_irg_entity(irg);
 
-       fprintf(F, "graph: { title: \"");
-       PRINT_IRGID(irg);
-       fprintf(F, "\" label: \"%s\" status:clustered color:%s \n",
+       fprintf(F, "graph: { title: ");
+       print_irgid(F, irg);
+       fprintf(F, " label: \"%s\" status:clustered color:%s \n",
          get_ent_dump_name(ent), color_names[ird_color_prog_background]);
 
        dump_graph_info(F, irg);
@@ -1572,7 +1611,7 @@ static void print_typespecific_vcgattr(FILE *F, ir_type *tp)
 void dump_type_node(FILE *F, ir_type *tp)
 {
        fprintf(F, "node: {title: ");
-       PRINT_TYPEID(tp);
+       print_typeid(F, tp);
        fprintf(F, " label: \"");
        if (tp->dbi != NULL) {
                char buf[1024];
@@ -1591,8 +1630,8 @@ void dump_type_node(FILE *F, ir_type *tp)
 
 static void dump_entity_node(FILE *F, ir_entity *ent)
 {
-       fprintf(F, "node: {title: \"");
-       PRINT_ENTID(ent); fprintf(F, "\"");
+       fprintf(F, "node: {title: ");
+       print_entityid(F, ent);
        fprintf(F, " label: ");
        fprintf(F, "\"%s\" ", get_ent_dump_name(ent));
 
@@ -1617,8 +1656,8 @@ static void dump_enum_item(FILE *F, ir_type *tp, size_t pos)
                tarval_snprintf(buf, sizeof(buf), tv);
        else
                strncpy(buf, "<not set>", sizeof(buf));
-       fprintf(F, "node: {title: \"");
-       PRINT_ITEMID(tp, pos); fprintf(F, "\"");
+       fprintf(F, "node: {title: ");
+       print_itemid(F, tp, pos);
        fprintf(F, " label: ");
        fprintf(F, "\"enum item %s\" " ENUM_ITEM_NODE_ATTR, get_id_str(id));
        fprintf(F, "\n info1: \"value: %s\"}\n", buf);
@@ -1745,10 +1784,12 @@ static void dump_type_info(type_or_ent tore, void *env)
                case tpo_pointer:
                        print_type_type_edge(F, tp, get_pointer_points_to_type(tp), PTR_PTS_TO_EDGE_ATTR);
                        break;
+               case tpo_unknown:
+               case tpo_code:
+               case tpo_uninitialized:
+               case tpo_none:
                case tpo_primitive:
                        break;
-               default:
-                       break;
                }
                break; /* case k_type */
        }
@@ -1820,11 +1861,11 @@ static void dump_out_edge(ir_node *n, void *env)
                ir_node *succ = get_irn_out(n, i);
                assert(succ);
                print_node_edge_kind(F, succ);
-               fprintf(F, "{sourcename: \"");
-               PRINT_NODEID(n);
-               fprintf(F, "\" targetname: \"");
-               PRINT_NODEID(succ);
-               fprintf(F, "\" color: red linestyle: dashed");
+               fprintf(F, "{sourcename: ");
+               print_nodeid(F, n);
+               fprintf(F, " targetname: ");
+               print_nodeid(F, succ);
+               fprintf(F, " color: red linestyle: dashed");
                fprintf(F, "}\n");
        }
 }
@@ -1844,11 +1885,16 @@ static void dump_loop_info(FILE *F, const ir_loop *loop)
        fprintf(F, "\"");
 }
 
+void print_loopid(FILE *F, const ir_loop *loop)
+{
+       fprintf(F, "\"l%ld\"", get_loop_loop_nr(loop));
+}
+
 static void dump_loop_node(FILE *F, const ir_loop *loop)
 {
-       fprintf(F, "node: {title: \"");
-       PRINT_LOOPID(loop);
-       fprintf(F, "\" label: \"");
+       fprintf(F, "node: {title: ");
+       print_loopid(F, loop);
+       fprintf(F, " label: \"");
        dump_loop_label(F, loop);
        fprintf(F, "\" ");
        dump_loop_info(F, loop);
@@ -1858,22 +1904,22 @@ static void dump_loop_node(FILE *F, const ir_loop *loop)
 static void dump_loop_node_edge(FILE *F, const ir_loop *loop, size_t i)
 {
        assert(loop);
-       fprintf(F, "edge: {sourcename: \"");
-       PRINT_LOOPID(loop);
-       fprintf(F, "\" targetname: \"");
-       PRINT_NODEID(get_loop_element(loop, i).node);
-       fprintf(F, "\" color: green");
+       fprintf(F, "edge: {sourcename: ");
+       print_loopid(F, loop);
+       fprintf(F, " targetname: ");
+       print_nodeid(F, get_loop_element(loop, i).node);
+       fprintf(F, " color: green");
        fprintf(F, "}\n");
 }
 
 static void dump_loop_son_edge(FILE *F, const ir_loop *loop, size_t i)
 {
        assert(loop);
-       fprintf(F, "edge: {sourcename: \"");
-       PRINT_LOOPID(loop);
-       fprintf(F, "\" targetname: \"");
-       PRINT_LOOPID(get_loop_element(loop, i).son);
-       ir_fprintf(F, "\" color: darkgreen label: \"%zu\"}\n", i);
+       fprintf(F, "edge: {sourcename: ");
+       print_loopid(F, loop);
+       fprintf(F, " targetname: ");
+       print_loopid(F, get_loop_element(loop, i).son);
+       ir_fprintf(F, " color: darkgreen label: \"%zu\"}\n", i);
 }
 
 static void dump_loops(FILE *F, const ir_loop *loop)
@@ -2032,7 +2078,7 @@ static void dump_extblock_graph(FILE *F, ir_graph *irg)
                size_t j, n_blks;
 
                fprintf(F, "graph: { title: \"");
-               PRINT_EXTBBID(leader);
+               fprintf(F, "x%ld", get_irn_node_nr(leader));
                fprintf(F, "\"  label: \"ExtBB %ld\" status:clustered color:lightgreen\n",
                        get_irn_node_nr(leader));
 
@@ -2072,9 +2118,9 @@ static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg)
 
        construct_extblock_lists(irg);
 
-       fprintf(F, "graph: { title: \"");
-       PRINT_IRGID(irg);
-       fprintf(F, "\" label: \"%s\" status:clustered color: white \n",
+       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);
@@ -2163,15 +2209,16 @@ static void dump_block_to_cfg(ir_node *block, void *env)
 
        if (is_Block(block)) {
                /* This is a block. Dump a node for the block. */
-               fprintf(F, "node: {title: \""); PRINT_NODEID(block);
-               fprintf(F, "\" label: \"");
+               fprintf(F, "node: {title: ");
+               print_nodeid(F, 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);
+               print_nodeid(F, block);
                fprintf(F, "\" ");
                fprintf(F, "info1:\"");
 
@@ -2191,10 +2238,10 @@ static void dump_block_to_cfg(ir_node *block, void *env)
                        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, "edge: { sourcename: ");
+                       print_nodeid(F, block);
+                       fprintf(F, " targetname: ");
+                       print_nodeid(F, pred);
                        fprintf(F, "\"}\n");
                }
 
@@ -2202,19 +2249,19 @@ static void dump_block_to_cfg(ir_node *block, void *env)
                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)) {
                                ir_node *pred = get_Block_idom(block);
-                               fprintf(F, "edge: { sourcename: \"");
-                               PRINT_NODEID(block);
-                               fprintf(F, "\" targetname: \"");
-                               PRINT_NODEID(pred);
-                               fprintf(F, "\" " DOMINATOR_EDGE_ATTR "}\n");
+                               fprintf(F, "edge: { sourcename: ");
+                               print_nodeid(F, block);
+                               fprintf(F, " targetname: ");
+                               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)) {
                                ir_node *pred = get_Block_ipostdom(block);
-                               fprintf(F, "edge: { sourcename: \"");
-                               PRINT_NODEID(block);
-                               fprintf(F, "\" targetname: \"");
-                               PRINT_NODEID(pred);
-                               fprintf(F, "\" " POSTDOMINATOR_EDGE_ATTR "}\n");
+                               fprintf(F, "edge: { sourcename: ");
+                               print_nodeid(F, block);
+                               fprintf(F, " targetname: ");
+                               print_nodeid(F, pred);
+                               fprintf(F, " " POSTDOMINATOR_EDGE_ATTR "}\n");
                        }
                }
        }
@@ -2261,14 +2308,14 @@ void dump_callgraph(FILE *F)
 
 void dump_typegraph(FILE *out)
 {
-       dump_vcg_header(out, "All_types", "Hierarchic", NULL);
+       dump_vcg_header(out, "All_types", NULL, NULL);
        type_walk(dump_type_info, NULL, out);
        dump_vcg_footer(out);
 }
 
 void dump_class_hierarchy(FILE *out)
 {
-       dump_vcg_header(out, "class_hierarchy", "Hierarchic", NULL);
+       dump_vcg_header(out, "class_hierarchy", NULL, NULL);
        type_walk(dump_class_hierarchy_node, NULL, out);
        dump_vcg_footer(out);
 }
@@ -2295,11 +2342,10 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop)
 
                        if (loop_node_started) { /* Close the "firm-nodes" node first if we started one. */
                                fprintf(F, "\" }\n");
-                               fprintf(F, "edge: {sourcename: \"");
-                               PRINT_LOOPID(loop);
-                               fprintf(F, "\" targetname: \"");
-                               PRINT_LOOPID(loop);
-                               fprintf(F, "-%lu-nodes\" label:\"%lu...%lu\"}\n",
+                               fprintf(F, "edge: {sourcename: ");
+                               print_loopid(F, loop);
+                               fprintf(F, " targetname: \"l%ld-%lu-nodes\" label:\"%lu...%lu\"}\n",
+                                       get_loop_loop_nr(loop),
                                                (unsigned long) first,
                                                (unsigned long) first,
                                        (unsigned long) i-1);
@@ -2313,9 +2359,8 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop)
                        ir_node *n = le.node;
                        if (!loop_node_started) {
                                /* Start a new node which contains all firm nodes of the current loop */
-                               fprintf(F, "node: { title: \"");
-                               PRINT_LOOPID(loop);
-                               fprintf(F, "-%lu-nodes\" color: lightyellow label: \"",
+                               fprintf(F, "node: { title: \"l%ld-%lu-nodes\" color: lightyellow label: \"",
+                                       get_loop_loop_nr(loop),
                                        (unsigned long)i);
                                loop_node_started = true;
                                first = i;
@@ -2323,7 +2368,6 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop)
                                fprintf(F, "\n");
 
                        dump_node_label(F, n);
-                       /* Causes indeterministic output: if (is_Block(n)) fprintf(F, "\t ->%d", (int)get_irn_link(n)); */
                        if (has_backedges(n)) fprintf(F, "\t loop head!");
                } else { /* for callgraph loop tree */
                        ir_graph *n;
@@ -2333,9 +2377,8 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop)
                        n = le.irg;
                        if (!loop_node_started) {
                                /* Start a new node which contains all firm nodes of the current loop */
-                               fprintf(F, "node: { title: \"");
-                               PRINT_LOOPID(loop);
-                               fprintf(F, "-%lu-nodes\" color: lightyellow label: \"",
+                               fprintf(F, "node: { title: \"l%ld-%lu-nodes\" color: lightyellow label: \"",
+                                       get_loop_loop_nr(loop),
                                        (unsigned long)i);
                                loop_node_started = true;
                                first = i;
@@ -2349,10 +2392,9 @@ static void dump_loops_standalone(FILE *F, ir_loop *loop)
        if (loop_node_started) {
                fprintf(F, "\" }\n");
                fprintf(F, "edge: {sourcename: \"");
-               PRINT_LOOPID(loop);
-               fprintf(F, "\" targetname: \"");
-               PRINT_LOOPID(loop);
-               fprintf(F, "-%lu-nodes\" label:\"%lu...%lu\"}\n",
+               print_loopid(F, loop);
+               fprintf(F, "\" targetname: \"l%ld-%lu-nodes\" label:\"%lu...%lu\"}\n",
+                       get_loop_loop_nr(loop),
                        (unsigned long) first,
                        (unsigned long) first,
                        (unsigned long) i-1);
@@ -2475,9 +2517,9 @@ void dump_loop(FILE *F, ir_loop *l)
 
        eset_foreach(loopnodes, ir_node*, b) {
                if (is_Block(b)) {
-                       fprintf(F, "graph: { title: \"");
-                       PRINT_NODEID(b);
-                       fprintf(F, "\"  label: \"");
+                       fprintf(F, "graph: { title: ");
+                       print_nodeid(F, b);
+                       fprintf(F, "  label: \"");
                        dump_node_opcode(F, b);
                        fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b));
                        fprintf(F, "\" status:clustered color:yellow\n");
@@ -2502,9 +2544,9 @@ void dump_loop(FILE *F, ir_loop *l)
        }
        eset_foreach(extnodes, ir_node*, b) {
                if (is_Block(b)) {
-                       fprintf(F, "graph: { title: \"");
-                       PRINT_NODEID(b);
-                       fprintf(F, "\"  label: \"");
+                       fprintf(F, "graph: { title: ");
+                       print_nodeid(F, b);
+                       fprintf(F, " label: \"");
                        dump_node_opcode(F, b);
                        fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b));
                        fprintf(F, "\" status:clustered color:lightblue\n");
index e3377fe..1ac0e0c 100644 (file)
@@ -130,15 +130,11 @@ typedef enum {
 #define TYPE_MEMBER_EDGE_ATTR    "class: 12 label: \"member\" color:blue"
 /* #define CALLGRAPH_EDGE_ATTR      "calls" */
 
-#define PRINT_NODEID(X)       ir_fprintf(F, "n%ld", get_irn_node_nr(X))
-#define PRINT_TYPEID(X)       ir_fprintf(F, "\"t%ld\"", get_type_nr(X))
-#define PRINT_ENTID(X)        ir_fprintf(F, "e%ld", get_entity_nr(X))
-#define PRINT_IRGID(X)        ir_fprintf(F, "g%ld", get_irg_graph_nr(X))
-#define PRINT_CONSTID(X,Y)    ir_fprintf(F, "\"n%ldn%ld\"", get_irn_node_nr(X),get_irn_node_nr(Y))
-#define PRINT_CONSTBLKID(X,Y) ir_fprintf(F, "n%ldb%ld", get_irn_node_nr(X),get_irn_node_nr(Y))
-#define PRINT_LOOPID(X)       ir_fprintf(F, "l%ld", get_loop_loop_nr(X))
-#define PRINT_ITEMID(X,Y)     ir_fprintf(F, "i%ldT%zu", get_type_nr(X), (Y))
-#define PRINT_EXTBBID(X)      ir_fprintf(F, "x%ld", get_irn_node_nr(X))
+void print_nodeid(FILE *F, const ir_node *node);
+void print_irgid(FILE *F, const ir_graph *irg);
+void print_typeid(FILE *F, const ir_type *type);
+void print_entityid(FILE *F, const ir_entity *entity);
+void print_loopid(FILE *F, const ir_loop *loop);
 
 const char *get_irg_dump_name(const ir_graph *irg);