Dump calling conventions for entities
[libfirm] / ir / ir / irdump.c
index d53a9c7..e8d5f1b 100644 (file)
@@ -105,13 +105,25 @@ DUMP_NODE_EDGE_FUNC get_dump_node_edge_hook(void)
 }
 
 
-/** The vcg attribute hook. */
+/** The vcg node attribute hook. */
+static DUMP_IR_GRAPH_FUNC dump_ir_graph_hook = NULL;
+/** The vcg node attribute hook. */
 static DUMP_NODE_VCGATTR_FUNC dump_node_vcgattr_hook = NULL;
+/** The vcg edge attribute hook. */
+static DUMP_EDGE_VCGATTR_FUNC dump_edge_vcgattr_hook = NULL;
 
-/* set the hook */
+/* set the ir graph hook */
+void set_dump_ir_graph_hook(DUMP_IR_GRAPH_FUNC hook) {
+  dump_ir_graph_hook = hook;
+}
+/* set the node attribute hook */
 void set_dump_node_vcgattr_hook(DUMP_NODE_VCGATTR_FUNC hook) {
   dump_node_vcgattr_hook = hook;
 }
+/* set the edge attribute hook */
+void set_dump_edge_vcgattr_hook(DUMP_EDGE_VCGATTR_FUNC hook) {
+  dump_edge_vcgattr_hook = hook;
+}
 
 INLINE bool get_opt_dump_const_local(void) {
   if (!dump_out_edge_flag && !dump_loop_information_flag)
@@ -906,6 +918,9 @@ handle_lut:
   case iro_Confirm:
     fprintf (F, "%s ", get_pnc_string(get_Confirm_cmp(n)));
     break;
+  case iro_CopyB:
+    fprintf (F, "(%s) ", get_type_name_ex(get_CopyB_type(n), &bad));
+    break;
 
   default:
     ;
@@ -1073,6 +1088,19 @@ static void dump_const_block_local(FILE *F, ir_node *n) {
     fprintf (F, "edge: { sourcename: \"");
     PRINT_NODEID(n);
     fprintf (F, "\" targetname: \""); PRINT_CONSTBLKID(n,blk);
+
+       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, "\" "   BLOCK_EDGE_ATTR "}\n");
   }
 }
@@ -1151,6 +1179,19 @@ dump_ir_block_edge(FILE *F, ir_node *n)  {
       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, " "   BLOCK_EDGE_ATTR "}\n");
     }
   }
@@ -1184,6 +1225,10 @@ static void
 print_edge_vcgattr(FILE *F, ir_node *from, int to) {
   assert(from);
 
+  if (dump_edge_vcgattr_hook)
+       if (dump_edge_vcgattr_hook(F, from, to))
+               return;
+
   if (dump_backedge_information_flag && is_backedge(from, to))
     fprintf (F, BACK_EDGE_ATTR);
 
@@ -1411,8 +1456,9 @@ dump_whole_block(FILE *F, ir_node *block) {
 
   fprintf(F, "\" status:clustered color:%s \n", color);
 
-  /* ycomp can show attributs for blocks, VCG parses but ignores them */
+  /* yComp can show attributes for blocks, XVCG parses but ignores them */
   dump_node_info(F, block);
+  print_node_dbg_info(F, get_irn_dbg_info(block));
 
   /* dump the blocks edges */
   dump_ir_data_edges(F, block);
@@ -1463,6 +1509,16 @@ dump_block_graph(FILE *F, ir_graph *irg) {
   current_ir_graph = rem;
 }
 
+/**
+ * Dump the info for an irg.
+ * Parsed by XVCG but not shown. use yComp.
+ */
+static void dump_graph_info(FILE *F, ir_graph *irg) {
+  fprintf(F, "info1:\"");
+  dump_entity_to_file(F, get_irg_entity(irg), dump_verbosity_entattrs | dump_verbosity_entconsts);
+  fprintf(F, "\"\n");
+}
+
 /** Dumps an irg as a graph clustered by block nodes.
  *  If interprocedural view edges can point to nodes out of this graph.
  */
@@ -1473,6 +1529,8 @@ static void dump_graph_from_list(FILE *F, ir_graph *irg) {
   fprintf(F, "\" label: \"%s\" status:clustered color:white \n",
       get_ent_dump_name(get_irg_entity(irg)));
 
+  dump_graph_info(F, irg);
+
   dump_block_graph(F, irg);
 
   /* Close the vcg information for the irg */
@@ -2197,6 +2255,11 @@ dump_ir_graph (ir_graph *irg, const char *suffix )
   f = vcg_open(irg, suffix, suffix1);
   dump_vcg_header(f, get_irg_dump_name(irg), NULL);
 
+  /* call the dump graph hook */
+  if (dump_ir_graph_hook)
+    if (dump_ir_graph_hook(f, irg))
+      return;
+
   /* walk over the graph */
   /* dump_whole_node must be called in post visiting predecessors */
   irg_walk(get_irg_end(irg), NULL, dump_whole_node, f);
@@ -2268,6 +2331,8 @@ void dump_ir_extblock_graph (ir_graph *irg, const char *suffix)
   fprintf(F, "\" label: \"%s\" status:clustered color:white \n",
     get_ent_dump_name(get_irg_entity(irg)));
 
+  dump_graph_info(F, irg);
+
   for (i = 0; i < get_irp_n_irgs(); i++) {
     ir_graph *irg     = get_irp_irg(i);
     list_tuple *lists = ird_get_irg_link(irg);