allow Pin nodes as predecessors for unpinned nodes
[libfirm] / ir / ir / irdump.c
index 6736c3c..370eaeb 100644 (file)
@@ -48,9 +48,7 @@
 #include "irdump_t.h"
 
 #include "irgwalk.h"
-#include "typewalk.h"
 #include "tv_t.h"
-#include "type_or_entity.h"
 #include "irouts.h"
 #include "irdom.h"
 #include "irloop_t.h"
@@ -494,6 +492,7 @@ static void ird_set_irg_link(ir_graph *irg, void *x) {
  * Walker, clears the private link field.
  */
 static void clear_link(ir_node * node, void * env) {
+       (void) env;
        ird_set_irn_link(node, NULL);
 }
 
@@ -537,20 +536,10 @@ static int node_floats(ir_node *n) {
  *  Walker that visits the anchors
  */
 static void ird_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *post, void *env) {
-       irg_walk_graph(irg, pre, post, env);
-
        if (dump_anchors) {
-               int i;
-
-               for (i = anchor_max - 1; i >= 0; --i) {
-                       ir_node *n = irg->anchors[i];
-
-                       if (n) {
-                               /* reset the visit flag: will be increase in the walker */
-                               set_irg_visited(irg, get_irg_visited(irg) - 1);
-                               irg_walk(n, pre, post, env);
-                       }
-               }
+               irg_walk_anchors(irg, pre, post, env);
+       } else {
+               irg_walk_graph(irg, pre, post, env);
        }
 }
 
@@ -558,6 +547,7 @@ static void ird_walk_graph(ir_graph *irg, irg_walk_func *pre, irg_walk_func *pos
  * Walker, allocates an array for all blocks and puts it's nodes non-floating nodes into this array.
  */
 static void collect_node(ir_node * node, void *env) {
+       (void) env;
        if (is_Block(node)
            || node_floats(node)
            || get_irn_op(node) == op_Bad
@@ -689,7 +679,7 @@ int dump_node_opcode(FILE *F, ir_node *n)
                int res;
                char buf[1024];
                res = tarval_snprintf(buf, sizeof(buf), get_Const_tarval(n));
-               assert(res < sizeof(buf) && "buffer to small for tarval_snprintf");
+               assert(res < (int) sizeof(buf) && "buffer to small for tarval_snprintf");
                fprintf(F, buf);
        } break;
 
@@ -717,6 +707,9 @@ int dump_node_opcode(FILE *F, ir_node *n)
                case symconst_enum_const:
                        fprintf(F, "SymC %s enum", get_enumeration_name(get_SymConst_enum(n)));
                        break;
+               case symconst_label:
+                       fprintf(F, "SymC %lu label", get_SymConst_label(n));
+                       break;
                }
        } break;
 
@@ -759,8 +752,15 @@ int dump_node_opcode(FILE *F, ir_node *n)
                break;
        }
        case iro_Load:
+               if (get_Load_align(n) == align_non_aligned)
+                       fprintf(F, "ua");
                fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Load_mode(n), &bad));
                break;
+       case iro_Store:
+               if (get_Store_align(n) == align_non_aligned)
+                       fprintf(F, "ua");
+               fprintf(F, "%s", get_irn_opname(n));
+               break;
        case iro_Block:
                fprintf(F, "%s%s", is_Block_dead(n) ? "Dead " : "", get_irn_opname(n));
                break;
@@ -769,6 +769,15 @@ int dump_node_opcode(FILE *F, ir_node *n)
                        fprintf(F, "strict");
                fprintf(F, "%s", get_irn_opname(n));
                break;
+       case iro_Div:
+               fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Div_resmode(n), &bad));
+               break;
+       case iro_Mod:
+               fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Mod_resmode(n), &bad));
+               break;
+       case iro_DivMod:
+               fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_DivMod_resmode(n), &bad));
+               break;
 
        default:
 default_case:
@@ -1428,8 +1437,8 @@ print_mem_edge_vcgattr(FILE *F, ir_node *from, int to) {
                fprintf(F, INTER_MEM_EDGE_ATTR);
 }
 
-static void
-print_edge_vcgattr(FILE *F, ir_node *from, int to) {
+/** Print the vcg attributes for the edge from node from to it's to's input */
+static void print_edge_vcgattr(FILE *F, ir_node *from, int to) {
        assert(from);
 
        if (dump_edge_vcgattr_hook)
@@ -1447,9 +1456,9 @@ print_edge_vcgattr(FILE *F, ir_node *from, int to) {
        case iro_End:
                if (to >= 0) {
                        if (get_irn_mode(get_End_keepalive(from, to)) == mode_BB)
-                               fprintf(F, CF_EDGE_ATTR);
-                       if (get_irn_mode(get_End_keepalive(from, to)) == mode_X)
-                               fprintf(F, INTER_MEM_EDGE_ATTR);
+                               fprintf(F, KEEP_ALIVE_CF_EDGE_ATTR);
+                       else
+                               fprintf(F, KEEP_ALIVE_DF_EDGE_ATTR);
                }
                break;
        default:
@@ -1470,9 +1479,8 @@ print_edge_vcgattr(FILE *F, ir_node *from, int to) {
        }
 }
 
-/* dump edges to our inputs */
-static void
-dump_ir_data_edges(FILE *F, ir_node *n)  {
+/** dump edges to our inputs */
+static void dump_ir_data_edges(FILE *F, ir_node *n)  {
        int i;
        unsigned long visited = get_irn_visited(n);
 
@@ -2200,6 +2208,7 @@ void dump_vcg_header(FILE *F, const char *name, const char *orientation) {
                "classname 17: \"interblock Memory\"\n"
                "classname 18: \"Exception Control Flow for Interval Analysis\"\n"
                "classname 19: \"Postdominators\"\n"
+               "classname 20: \"Keep Alive\"\n"
                "infoname 1: \"Attribute\"\n"
                "infoname 2: \"Verification errors\"\n"
                "infoname 3: \"Debug info\"\n",