Bad and Unknown are pinned instructions yet, speeding up code placement
[libfirm] / ir / ir / irdump.c
index 62b2da5..e48c964 100644 (file)
@@ -1174,7 +1174,8 @@ dump_block_graph(FILE *F, ir_graph *irg) {
     }
   }
 
-  if (dump_loop_information_flag) dump_loop_nodes_into_graph(F, irg);
+  if (dump_loop_information_flag && (get_irg_loopinfo_state(irg) & loopinfo_valid))
+    dump_loop_nodes_into_graph(F, irg);
 
   current_ir_graph = rem;
 }
@@ -1353,7 +1354,7 @@ void dump_entity_node(FILE *F, entity *ent, int color)
     fprintf (F, ENTITY_NODE_ATTR);
   fprintf (F, "\n info1: \"");
 
-  dump_entity_to_file(F, ent, dump_verbosity_max);
+  dump_entity_to_file(F, ent, dump_verbosity_entattrs | dump_verbosity_entconsts);
 
   fprintf(F, "\"\n}\n");
 }
@@ -1963,34 +1964,64 @@ dump_ir_block_graph_w_types (ir_graph *irg, const char *suffix)
   vcg_close(f);
 }
 
-/***********************************************************************/
+/*---------------------------------------------------------------------*/
 /* The following routines dump a control flow graph.                   */
-/***********************************************************************/
+/*---------------------------------------------------------------------*/
 
 static void
 dump_block_to_cfg(ir_node *block, void *env) {
   FILE *F = env;
-  int i;
+  int i, fl;
   ir_node *pred;
 
   if (is_Block(block)) {
     /* This is a block. Dump a node for the block. */
     fprintf (F, "node: {title: \""); PRINT_NODEID(block);
-    fprintf (F, "\" label: \"%s ", get_op_name(get_irn_op(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);
     fprintf (F, "\" ");
+    fprintf(F, "info1:\"");
     if (dump_dominator_information_flag)
-      fprintf(F, "info1:dom depth %d", get_Block_dom_depth(block));
+      fprintf(F, "dom depth %d\n", get_Block_dom_depth(block));
+
+    /* show arity and possible Bad predecessors of the block */
+    fprintf(F, "arity: %d\n", get_Block_n_cfgpreds(block));
+    for (fl = i = 0; i < get_Block_n_cfgpreds(block); ++i) {
+      ir_node *pred = get_Block_cfgpred(block, i);
+      if (is_Bad(pred)) {
+       if (! fl)
+         fprintf(F, "Bad pred at pos: ");
+       fprintf(F, "%d ", i);
+       fl = 1;
+      }
+    }
+    if (fl)
+      fprintf(F, "\n");
+
+    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 = 0; i < get_Block_n_cfgpreds(block); i++)
       if (get_irn_op(skip_Proj(get_Block_cfgpred(block, i))) != op_Bad) {
-    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");
+        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");
       }
 
     /* Dump dominator edge */