Remove the unused facility to register space /in front of/ a node.
[libfirm] / ir / ir / irdump.c
index 44a1e38..222bd35 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2010 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -22,7 +22,6 @@
  * @brief   Write vcg representation of firm to file.
  * @author  Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Hubert Schmidt,
  *          Matthias Braun
- * @version $Id$
  */
 #include "config.h"
 
@@ -33,6 +32,7 @@
 #include <errno.h>
 
 #include "list.h"
+#include "pset.h"
 
 #include "irnode_t.h"
 #include "irgraph_t.h"
 #include "irdom.h"
 #include "irloop_t.h"
 #include "callgraph.h"
-#include "irextbb_t.h"
 #include "irhooks.h"
 #include "dbginfo_t.h"
 #include "irtools.h"
 #include "irprintf.h"
 
-#include "irvrfy.h"
+#include "irverify.h"
 
 #include "error.h"
 #include "array.h"
 #include "pmap.h"
 #include "obst.h"
-#include "eset.h"
 #include "pset.h"
 #include "util.h"
 
+typedef struct pns_lookup {
+       long       nr;      /**< the proj number */
+       const char *name;   /**< the name of the Proj */
+} pns_lookup_t;
+
+typedef struct proj_lookup {
+       unsigned           code;      /**< the opcode of the Proj predecessor */
+       unsigned           num_data;  /**< number of data entries */
+       const pns_lookup_t *data;     /**< the data */
+} proj_lookup_t;
+
+#include "gen_irdump.c.inl"
+
 /** Dump only irgs with names that start with this prefix. */
 static ident *dump_file_filter_id = NULL;
 
@@ -203,7 +214,7 @@ static void custom_color(int num, const char *rgb_def)
        obstack_1grow(&color_obst, '\0');
 
        color_rgb[num]   = rgb_def;
-       color_names[num] = obstack_finish(&color_obst);
+       color_names[num] = (const char*)obstack_finish(&color_obst);
 }
 
 /** Define a named color. */
@@ -217,7 +228,7 @@ static void named_color(int num, const char *name)
 /** Initializes the used colors. */
 static void init_colors(void)
 {
-       static int initialized = 0;
+       static bool initialized = 0;
        if (initialized)
                return;
 
@@ -250,12 +261,37 @@ 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.
  *
  * Projs should be dumped near their predecessor, so they get "nearedge".
  */
-static void print_node_edge_kind(FILE *out, ir_node *node)
+static void print_node_edge_kind(FILE *out, const ir_node *node)
 {
        if (is_Proj(node)) {
                fprintf(out, "nearedge: ");
@@ -273,9 +309,11 @@ 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);
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -289,9 +327,11 @@ 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, "\"");
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -306,14 +346,15 @@ 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, "\"");
-       vfprintf(F, fmt, ap);
+               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_t) -1)
+       if (color != ird_color_none)
                print_vcg_color(F, color);
        fprintf(F, "}\n");
        va_end(ap);
@@ -328,9 +369,11 @@ 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);
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -344,9 +387,11 @@ 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);
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -360,26 +405,11 @@ 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, "\"");
-       vfprintf(F, fmt, ap);
-       fprintf(F,"}\n");
-       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_ENTID(ent);
-       fprintf(F, "\" targetname: \""); PRINT_NODEID(irn); fprintf(F, "\"");
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -388,14 +418,16 @@ static void print_ent_node_edge(FILE *F, const ir_entity *ent, const ir_node *ir
  * Prints the edge from a type tp to an enumeration item item with additional info fmt, ...
  * to the file F.
  */
-static void print_enum_item_edge(FILE *F, const ir_type *tp, int item, const char *fmt, ...)
+static void print_enum_item_edge(FILE *F, const ir_type *tp, size_t item, const char *fmt, ...)
 {
        va_list ap;
 
        va_start(ap, fmt);
-       fprintf(F, "edge: { sourcename: "); PRINT_TYPEID(tp);
-       fprintf(F, " targetname: \""); PRINT_ITEMID(tp, item); fprintf(F, "\" ");
-       vfprintf(F, fmt, ap);
+       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);
 }
@@ -404,7 +436,6 @@ static void print_enum_item_edge(FILE *F, const ir_type *tp, int item, const cha
 /* global and ahead declarations                                   */
 /*-----------------------------------------------------------------*/
 
-static void dump_node_with_edges(ir_node *n, void *env);
 static void dump_loop_nodes_into_graph(FILE *F, ir_graph *irg);
 
 /*-----------------------------------------------------------------*/
@@ -438,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);
 }
 
 /**
@@ -462,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);
 }
 
 /**
@@ -494,7 +519,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>";
@@ -508,13 +533,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);
 }
 
 /**
@@ -522,8 +547,9 @@ const char *get_irg_dump_name(const ir_graph *irg)
  */
 static int node_floats(const ir_node *n)
 {
+       ir_graph *irg = get_irn_irg(n);
        return ((get_irn_pinned(n) == op_pin_state_floats) &&
-               (get_irg_pinned(current_ir_graph) == op_pin_state_floats));
+               (get_irg_pinned(irg) == op_pin_state_floats));
 }
 
 /**
@@ -540,7 +566,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
+ * Walker, allocates an array for all blocks and puts their non-floating
  * nodes into this array.
  */
 static void collect_node(ir_node *node, void *env)
@@ -579,72 +605,26 @@ static void collect_node(ir_node *node, void *env)
  */
 static ir_node **construct_block_lists(ir_graph *irg)
 {
-       int      i;
+       size_t   i;
        int      walk_flag = ir_resources_reserved(irg) & IR_RESOURCE_IRN_VISITED;
-       ir_graph *rem      = current_ir_graph;
-
-       current_ir_graph = irg;
 
        if (walk_flag) {
                ir_free_resources(irg, IR_RESOURCE_IRN_VISITED);
        }
 
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i)
-               ird_set_irg_link(get_irp_irg(i), NULL);
+       for (i = get_irp_n_irgs(); i > 0;)
+               ird_set_irg_link(get_irp_irg(--i), NULL);
 
-       ird_walk_graph(current_ir_graph, clear_link, collect_node, current_ir_graph);
+       ird_walk_graph(irg, clear_link, collect_node, irg);
 
        if (walk_flag) {
                ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED);
        }
 
-       current_ir_graph = rem;
-       return 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);
-       int i;
-       ir_graph *rem = current_ir_graph;
-       list_tuple *lists = XMALLOC(list_tuple);
-
-       current_ir_graph = irg;
-
-       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 = ARR_LEN(blk_list) - 1; i >= 0; --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);
-
-       current_ir_graph = rem;
-       ird_set_irg_link(irg, lists);
-       return lists;
+       return (ir_node**)ird_get_irg_link(irg);
 }
 
-void dump_node_opcode(FILE *F, ir_node *n)
+void dump_node_opcode(FILE *F, const ir_node *n)
 {
        const ir_op_ops *ops = get_op_ops(get_irn_op(n));
 
@@ -664,9 +644,6 @@ void dump_node_opcode(FILE *F, ir_node *n)
                case symconst_ofs_ent:
                        fprintf(F, "SymC %s offset", get_entity_name(get_SymConst_entity(n)));
                        break;
-               case symconst_type_tag:
-                       ir_fprintf(F, "SymC %+F tag", get_SymConst_type(n));
-                       break;
                case symconst_type_size:
                        ir_fprintf(F, "SymC %+F size", get_SymConst_type(n));
                        break;
@@ -679,30 +656,17 @@ void dump_node_opcode(FILE *F, ir_node *n)
                }
                break;
 
-       case iro_Proj: {
-               ir_node *pred = get_Proj_pred(n);
-
-               if (get_irn_opcode(pred) == iro_Cond
-                       && get_Proj_proj(n) == get_Cond_default_proj(pred)
-                       && get_irn_mode(get_Cond_selector(pred)) != mode_b)
-                       fprintf(F, "defProj");
-               else
-                       goto default_case;
-       } break;
-
        case iro_Load:
-               if (get_Load_align(n) == align_non_aligned)
+               if (get_Load_unaligned(n) == align_non_aligned)
                        fprintf(F, "ua");
                fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Load_mode(n), NULL));
                break;
        case iro_Store:
-               if (get_Store_align(n) == align_non_aligned)
+               if (get_Store_unaligned(n) == align_non_aligned)
                        fprintf(F, "ua");
                fprintf(F, "%s", get_irn_opname(n));
                break;
        case iro_Block:
-               if (is_Block_dead(n))
-                       fputs("Dead ", F);
                if (n == get_irg_start_block(get_irn_irg(n)))
                        fputs("Start ", F);
                if (n == get_irg_end_block(get_irn_irg(n)))
@@ -710,11 +674,6 @@ void dump_node_opcode(FILE *F, ir_node *n)
                fprintf(F, "%s%s", get_irn_opname(n),
                        (flags & ir_dump_flag_show_marks) ? (get_Block_mark(n) ? "*" : "") : "");
                break;
-       case iro_Conv:
-               if (get_Conv_strict(n))
-                       fprintf(F, "strict");
-               fprintf(F, "%s", get_irn_opname(n));
-               break;
        case iro_Div:
                fprintf(F, "%s", get_irn_opname(n));
                if (get_Div_no_remainder(n))
@@ -724,15 +683,11 @@ void dump_node_opcode(FILE *F, ir_node *n)
        case iro_Mod:
                fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_Mod_resmode(n), NULL));
                break;
-       case iro_DivMod:
-               fprintf(F, "%s[%s]", get_irn_opname(n), get_mode_name_ex(get_DivMod_resmode(n), NULL));
-               break;
        case iro_Builtin:
                fprintf(F, "%s[%s]", get_irn_opname(n), get_builtin_kind_name(get_Builtin_kind(n)));
                break;
 
        default:
-default_case:
                fprintf(F, "%s", get_irn_opname(n));
        }
 }
@@ -741,10 +696,10 @@ default_case:
  * Dump the mode of a node n to a file F.
  * Ignore modes that are "always known".
  */
-static void dump_node_mode(FILE *F, ir_node *n)
+static void dump_node_mode(FILE *F, const ir_node *n)
 {
        const ir_op_ops *ops = get_op_ops(get_irn_op(n));
-       ir_opcode       iro;
+       unsigned         iro;
        ir_mode         *mode;
 
        /* call the dump_node operation if available */
@@ -777,15 +732,16 @@ static void dump_node_mode(FILE *F, ir_node *n)
 /**
  * Dump the type of a node n to a file F if it's known.
  */
-static int dump_node_typeinfo(FILE *F, ir_node *n)
+static int dump_node_typeinfo(FILE *F, const ir_node *n)
 {
+       ir_graph *irg = get_irn_irg(n);
        int bad = 0;
 
        if (ir_get_dump_flags() & ir_dump_flag_analysed_types) {
-               if (get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_consistent  ||
-                       get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_inconsistent) {
+               if (get_irg_typeinfo_state(irg) == ir_typeinfo_consistent  ||
+                       get_irg_typeinfo_state(irg) == ir_typeinfo_inconsistent) {
                        ir_type *tp = get_irn_typeinfo_type(n);
-                       if (tp != firm_none_type) {
+                       if (tp != get_none_type()) {
                                ir_fprintf(F, "[%+F]", tp);
                        } else {
                                fprintf(F, "[] ");
@@ -795,180 +751,13 @@ static int dump_node_typeinfo(FILE *F, ir_node *n)
        return bad;
 }
 
-typedef struct _pns_lookup {
-       long       nr;      /**< the proj number */
-       const char *name;   /**< the name of the Proj */
-} pns_lookup_t;
-
-typedef struct _proj_lookup {
-       ir_opcode          code;      /**< the opcode of the Proj predecessor */
-       unsigned           num_data;  /**< number of data entries */
-       const pns_lookup_t *data;     /**< the data */
-} proj_lookup_t;
-
-/** the lookup table for Proj(Start) names */
-static const pns_lookup_t start_lut[] = {
-#define X(a)    { pn_Start_##a, #a }
-       X(X_initial_exec),
-       X(P_frame_base),
-       X(P_tls),
-       X(T_args),
-#undef X
-};
-
-/** the lookup table for Proj(Cond) names */
-static const pns_lookup_t cond_lut[] = {
-#define X(a)    { pn_Cond_##a, #a }
-       X(false),
-       X(true)
-#undef X
-};
-
-/** the lookup table for Proj(Call) names */
-static const pns_lookup_t call_lut[] = {
-#define X(a)    { pn_Call_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(T_result),
-       X(P_value_res_base)
-#undef X
-};
-
-/** the lookup table for Proj(Quot) names */
-static const pns_lookup_t quot_lut[] = {
-#define X(a)    { pn_Quot_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res)
-#undef X
-};
-
-/** the lookup table for Proj(DivMod) names */
-static const pns_lookup_t divmod_lut[] = {
-#define X(a)    { pn_DivMod_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res_div),
-       X(res_mod)
-#undef X
-};
-
-/** the lookup table for Proj(Div) names */
-static const pns_lookup_t div_lut[] = {
-#define X(a)    { pn_Div_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res)
-#undef X
-};
-
-/** the lookup table for Proj(Mod) names */
-static const pns_lookup_t mod_lut[] = {
-#define X(a)    { pn_Mod_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res)
-#undef X
-};
-
-/** the lookup table for Proj(Load) names */
-static const pns_lookup_t load_lut[] = {
-#define X(a)    { pn_Load_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res)
-#undef X
-};
-
-/** the lookup table for Proj(Store) names */
-static const pns_lookup_t store_lut[] = {
-#define X(a)    { pn_Store_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except)
-#undef X
-};
-
-/** the lookup table for Proj(Alloc) names */
-static const pns_lookup_t alloc_lut[] = {
-#define X(a)    { pn_Alloc_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res)
-#undef X
-};
-
-/** the lookup table for Proj(CopyB) names */
-static const pns_lookup_t copyb_lut[] = {
-#define X(a)    { pn_CopyB_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-#undef X
-};
-
-/** the lookup table for Proj(InstOf) names */
-static const pns_lookup_t instof_lut[] = {
-#define X(a)    { pn_InstOf_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res),
-#undef X
-};
-
-/** the lookup table for Proj(Raise) names */
-static const pns_lookup_t raise_lut[] = {
-#define X(a)    { pn_Raise_##a, #a }
-       X(M),
-       X(X),
-#undef X
-};
-
-/** the lookup table for Proj(Bound) names */
-static const pns_lookup_t bound_lut[] = {
-#define X(a)    { pn_Bound_##a, #a }
-       X(M),
-       X(X_regular),
-       X(X_except),
-       X(res),
-#undef X
-};
-
-/** the Proj lookup table */
-static const proj_lookup_t proj_lut[] = {
-#define E(a)  ARRAY_SIZE(a), a
-       { iro_Start,   E(start_lut) },
-       { iro_Cond,    E(cond_lut) },
-       { iro_Call,    E(call_lut) },
-       { iro_Quot,    E(quot_lut) },
-       { iro_DivMod,  E(divmod_lut) },
-       { iro_Div,     E(div_lut) },
-       { iro_Mod,     E(mod_lut) },
-       { iro_Load,    E(load_lut) },
-       { iro_Store,   E(store_lut) },
-       { iro_Alloc,   E(alloc_lut) },
-       { iro_CopyB,   E(copyb_lut) },
-       { iro_InstOf,  E(instof_lut) },
-       { iro_Raise,   E(raise_lut) },
-       { iro_Bound,   E(bound_lut) }
-#undef E
-};
-
 /**
  * Dump additional node attributes of some nodes to a file F.
  */
-static void dump_node_nodeattr(FILE *F, ir_node *n)
+static void dump_node_nodeattr(FILE *F, const ir_node *n)
 {
        ir_node *pred;
-       ir_opcode code;
+       unsigned code;
        long proj_nr;
        const ir_op_ops *ops = get_op_ops(get_irn_op(n));
 
@@ -988,9 +777,7 @@ static void dump_node_nodeattr(FILE *F, ir_node *n)
                proj_nr = get_Proj_proj(n);
                code    = get_irn_opcode(pred);
 
-               if (code == iro_Cmp)
-                       fprintf(F, "%s ", get_pnc_string(get_Proj_proj(n)));
-               else if (code == iro_Proj && get_irn_opcode(get_Proj_pred(pred)) == iro_Start)
+               if (code == iro_Proj && get_irn_opcode(get_Proj_pred(pred)) == iro_Start)
                        fprintf(F, "Arg %ld ", proj_nr);
                else if (code == iro_Cond && get_irn_mode(get_Cond_selector(pred)) != mode_b)
                        fprintf(F, "%ld ", proj_nr);
@@ -1025,29 +812,22 @@ static void dump_node_nodeattr(FILE *F, ir_node *n)
        case iro_Cast:
                ir_fprintf(F, "(%+F)", get_Cast_type(n));
                break;
+       case iro_Cmp:
+               fprintf(F, "%s ", get_relation_string(get_Cmp_relation(n)));
+               break;
        case iro_Confirm:
-               fprintf(F, "%s ", get_pnc_string(get_Confirm_cmp(n)));
+               fprintf(F, "%s ", get_relation_string(get_Confirm_relation(n)));
                break;
        case iro_CopyB:
                ir_fprintf(F, "(%+F)", get_CopyB_type(n));
                break;
 
        default:
-               ;
-       } /* end switch */
-}
-
-#include <math.h>
-#include "execution_frequency.h"
-
-static void dump_node_ana_vals(FILE *F, ir_node *n)
-{
-       (void) F;
-       (void) n;
-       return;
+               break;
+       }
 }
 
-void dump_node_label(FILE *F, ir_node *n)
+void dump_node_label(FILE *F, const ir_node *n)
 {
        dump_node_opcode(F, n);
        fputs(" ", F);
@@ -1063,31 +843,14 @@ void dump_node_label(FILE *F, ir_node *n)
        }
 }
 
-void dump_vrp_info(FILE *F, ir_node *n)
-{
-       vrp_attr *vrp = vrp_get_info(n);
-       if (n == NULL) {
-               return;
-       }
-
-       fprintf(F, "range_type: %d\n", (int) vrp->range_type);
-       if (vrp->range_type == VRP_RANGE || vrp->range_type ==
-                       VRP_ANTIRANGE) {
-               ir_fprintf(F, "range_bottom: %F\n",vrp->range_bottom);
-               ir_fprintf(F, "range_top: %F\n", vrp->range_top);
-       }
-       ir_fprintf(F, "bits_set: %T\n", vrp->bits_set);
-       ir_fprintf(F, "bits_not_set: %T\n", vrp->bits_not_set);
-}
-
 /**
  * Dumps the attributes of a node n into the file F.
  * Currently this is only the color of a node.
  */
-static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad)
+static void dump_node_vcgattr(FILE *F, const ir_node *node, const ir_node *local, bool bad)
 {
        ir_mode *mode;
-       ir_node *n;
+       const ir_node *n;
 
        if (bad) {
                print_vcg_color(F, ird_color_error);
@@ -1125,10 +888,7 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad)
                print_vcg_color(F, ird_color_error);
                break;
        case iro_Block:
-               if (is_Block_dead(n))
-                       print_vcg_color(F, ird_color_dead_block_background);
-               else
-                       print_vcg_color(F, ird_color_block_background);
+               print_vcg_color(F, ird_color_block_background);
                break;
        case iro_Phi:
                print_vcg_color(F, ird_color_phi);
@@ -1159,7 +919,7 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad)
 
 void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data)
 {
-       hook_entry_t *info = XMALLOC(hook_entry_t);
+       hook_entry_t *info = XMALLOCZ(hook_entry_t);
 
        info->hook._hook_node_info = cb;
        info->context              = data;
@@ -1170,7 +930,7 @@ void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data)
 
 void dump_remove_node_info_callback(void *handle)
 {
-       hook_entry_t *info = handle;
+       hook_entry_t *info = (hook_entry_t*)handle;
        unregister_hook(hook_node_info, info);
        xfree(info);
 }
@@ -1178,7 +938,7 @@ void dump_remove_node_info_callback(void *handle)
 /**
  * Dump the node information of a node n to a file F.
  */
-static void dump_node_info(FILE *F, ir_node *n)
+static void dump_node_info(FILE *F, const ir_node *n)
 {
        const ir_op_ops *ops = get_op_ops(get_irn_op(n));
 
@@ -1199,11 +959,22 @@ 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. */
-static void dump_const_node_local(FILE *F, ir_node *n)
+static void dump_const_node_local(FILE *F, const ir_node *n)
 {
+       ir_graph *irg = get_irn_irg(n);
        int i;
        if (!get_opt_dump_const_local()) return;
 
@@ -1212,17 +983,17 @@ static void dump_const_node_local(FILE *F, ir_node *n)
        for (i = 0; i < get_irn_arity(n); i++) {
                ir_node *con = get_irn_n(n, i);
                if (is_constlike_node(con)) {
-                       set_irn_visited(con, get_irg_visited(current_ir_graph) - 1);
+                       set_irn_visited(con, get_irg_visited(irg) - 1);
                }
        }
 
        for (i = 0; i < get_irn_arity(n); i++) {
                ir_node *con = get_irn_n(n, i);
-               if (is_constlike_node(con) && !irn_visited(con)) {
-                       mark_irn_visited(con);
+               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, "\" ");
@@ -1234,7 +1005,7 @@ static void dump_const_node_local(FILE *F, ir_node *n)
 }
 
 /** If the block of an edge is a const_like node, dump it local with an edge */
-static void dump_const_block_local(FILE *F, ir_node *n)
+static void dump_const_block_local(FILE *F, const ir_node *n)
 {
        ir_node *blk;
 
@@ -1244,30 +1015,28 @@ static void dump_const_block_local(FILE *F, 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");
        }
 }
 
@@ -1305,30 +1074,25 @@ static void print_type_dbg_info(FILE *F, type_dbg_info *dbg)
 /**
  * Dump a node
  */
-static void dump_node(FILE *F, ir_node *n)
+void dump_node(FILE *F, const ir_node *n)
 {
        int bad = 0;
        const char *p;
+       ir_graph   *irg;
 
        if (get_opt_dump_const_local() && is_constlike_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_vrfy_irg_dump(n, current_ir_graph, &p);
+       irg = get_irn_irg(n);
+       bad = ! irn_verify_irg_dump(n, irg, &p);
        dump_node_label(F, n);
-       dump_node_ana_vals(F, n);
-       //dump_node_ana_info(F, n);
        fputs("\" ", F);
 
-       if (get_op_flags(get_irn_op(n)) & irop_flag_dump_noinput) {
-               //fputs(" node_class:23", F);
-       }
-
        dump_node_info(F, n);
        print_node_error(F, p);
        print_dbg_info(F, get_irn_dbg_info(n));
@@ -1336,12 +1100,10 @@ static void dump_node(FILE *F, ir_node *n)
        fputs("}\n", F);
        dump_const_node_local(F, n);
 
-       if (dump_node_edge_hook)
-               dump_node_edge_hook(F, n);
 }
 
 /** dump the edge to the block this node belongs to */
-static void dump_ir_block_edge(FILE *F, ir_node *n)
+static void dump_ir_block_edge(FILE *F, const ir_node *n)
 {
        if (get_opt_dump_const_local() && is_constlike_node(n)) return;
        if (!is_Block(n)) {
@@ -1350,53 +1112,48 @@ static void dump_ir_block_edge(FILE *F, 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");
                }
        }
 }
 
-static void print_data_edge_vcgattr(FILE *F, ir_node *from, int to)
+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);
 }
 
-static void print_mem_edge_vcgattr(FILE *F, ir_node *from, int to)
+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);
 }
 
-/** 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)
+/** Print the vcg attributes for the edge from node "from" to its "to"th input */
+static void print_edge_vcgattr(FILE *F, const ir_node *from, int to)
 {
        assert(from);
 
@@ -1439,10 +1196,13 @@ static void 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)
+static void dump_ir_data_edges(FILE *F, const ir_node *n)
 {
        int i, num;
 
+       if (dump_node_edge_hook)
+               dump_node_edge_hook(F, n);
+
        if (!(flags & ir_dump_flag_keepalive_edges) && is_End(n)) {
                /* the End node has only keep-alive edges */
                return;
@@ -1455,15 +1215,13 @@ static void dump_ir_data_edges(FILE *F, 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");
@@ -1476,32 +1234,22 @@ static void dump_ir_data_edges(FILE *F, 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);
                fprintf(F, "}\n");
        }
-
-       if ((flags & ir_dump_flag_macroblock_edges) && is_Block(n)) {
-               ir_node *mb = get_Block_MacroBlock(n);
-               fprintf(F, "edge: {sourcename: \"");
-               PRINT_NODEID(n);
-               fprintf(F, "\" targetname: \"");
-               PRINT_NODEID(mb);
-               fprintf(F, "\" label: \"mb\" " MACROBLOCK_EDGE_ATTR);
-               fprintf(F, "}\n");
-       }
 }
 
 /**
@@ -1509,19 +1257,17 @@ static void dump_ir_data_edges(FILE *F, ir_node *n)
  */
 static void dump_ir_edges(ir_node *node, void *env)
 {
-       int              i = 0;
-       FILE            *F = 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);
 
                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);
@@ -1532,9 +1278,8 @@ static void dump_ir_edges(ir_node *node, void *env)
 
 
 /** Dumps a node and its edges but not the block edge  */
-static void dump_node_wo_blockedge(ir_node *n, void *env)
+static void dump_node_wo_blockedge(FILE *F, const ir_node *n)
 {
-       FILE *F = env;
        dump_node(F, n);
        dump_ir_data_edges(F, n);
 }
@@ -1542,8 +1287,8 @@ static void dump_node_wo_blockedge(ir_node *n, void *env)
 /** Dumps a node and its edges. */
 static void dump_node_with_edges(ir_node *n, void *env)
 {
-       FILE *F = env;
-       dump_node_wo_blockedge(n, env);
+       FILE *F = (FILE*)env;
+       dump_node_wo_blockedge(F, n);
        if (!node_floats(n))
                dump_ir_block_edge(F, n);
 }
@@ -1551,8 +1296,9 @@ static void dump_node_with_edges(ir_node *n, void *env)
 /** Dumps a const-like node. */
 static void dump_const_node(ir_node *n, void *env)
 {
+       FILE *F = (FILE*)env;
        if (is_Block(n)) return;
-       dump_node_wo_blockedge(n, env);
+       dump_node_wo_blockedge(F, n);
 }
 
 /***********************************************************************/
@@ -1562,19 +1308,17 @@ static void dump_const_node(ir_node *n, void *env)
 /** Dumps a constant expression as entity initializer, array bound ... */
 static void dump_const_expression(FILE *F, ir_node *value)
 {
-       ir_graph *rem = current_ir_graph;
+       ir_graph *irg = get_const_code_irg();
        ir_dump_flags_t old_flags = ir_get_dump_flags();
        ir_remove_dump_flags(ir_dump_flag_consts_local);
 
-       current_ir_graph = get_const_code_irg();
        irg_walk(value, dump_const_node, NULL, F);
        /* Decrease visited flag so that we walk with the same flag for the next
           expression.  This guarantees that we don't dump the same node twice,
           as for const expressions cse is performed to save memory. */
-       set_irg_visited(current_ir_graph, get_irg_visited(current_ir_graph) -1);
+       set_irg_visited(irg, get_irg_visited(irg) -1);
 
        ir_set_dump_flags(old_flags);
-       current_ir_graph = rem;
 }
 
 /** Dump a block as graph containing its nodes.
@@ -1582,23 +1326,21 @@ static void dump_const_expression(FILE *F, ir_node *value)
  *  Expects to find nodes belonging to the block as list in its
  *  link field.
  *  Dumps the edges of all nodes including itself. */
-static void dump_whole_block(FILE *F, ir_node *block)
+static void dump_whole_block(FILE *F, const ir_node *block)
 {
        ir_node *node;
        ird_color_t color = ird_color_block_background;
 
        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 */
        if (! get_Block_matured(block))
                color = ird_color_block_background;
-       if (is_Block_dead(block))
-               color = ird_color_dead_block_background;
 
        fprintf(F, "\" status:clustered ");
        print_vcg_color(F, color);
@@ -1615,7 +1357,7 @@ static void dump_whole_block(FILE *F, ir_node *block)
                dump_block_edge_hook(F, block);
 
        /* dump the nodes that go into the block */
-       for (node = ird_get_irn_link(block); node; node = ird_get_irn_link(node)) {
+       for (node = (ir_node*)ird_get_irn_link(block); node; node = (ir_node*)ird_get_irn_link(node)) {
                dump_node(F, node);
                dump_ir_data_edges(F, node);
        }
@@ -1630,13 +1372,11 @@ static void dump_whole_block(FILE *F, ir_node *block)
  *  The outermost nodes: blocks and nodes not op_pin_state_pinned, Bad, Unknown. */
 static void dump_block_graph(FILE *F, ir_graph *irg)
 {
-       int i;
-       ir_graph *rem = current_ir_graph;
-       ir_node **arr = ird_get_irg_link(irg);
-       current_ir_graph = irg;
+       size_t i, n;
+       ir_node **arr = (ir_node**)ird_get_irg_link(irg);
 
-       for (i = ARR_LEN(arr) - 1; i >= 0; --i) {
-               ir_node * node = arr[i];
+       for (i = 0, n = ARR_LEN(arr); i < n; ++i) {
+               ir_node *node = arr[i];
                if (is_Block(node)) {
                /* Dumps the block and all the nodes in the block, which are to
                        be found in Block->link. */
@@ -1653,10 +1393,9 @@ static void dump_block_graph(FILE *F, ir_graph *irg)
                        dump_ir_edges(node, F);
        }
 
-       if ((flags & ir_dump_flag_loops) && (get_irg_loopinfo_state(irg) & loopinfo_valid))
+       if ((flags & ir_dump_flag_loops)
+            && irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO))
                dump_loop_nodes_into_graph(F, irg);
-
-       current_ir_graph = rem;
 }
 
 /**
@@ -1667,6 +1406,41 @@ static void dump_graph_info(FILE *F, ir_graph *irg)
 {
        fprintf(F, "info1: \"");
        dump_entity_to_file(F, get_irg_entity(irg));
+       fprintf(F, "\n");
+
+       /* dump graph state */
+       fprintf(F, "constraints:");
+       if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_ARCH_DEP))
+               fprintf(F, " arch_dep");
+       if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_MODEB_LOWERED))
+               fprintf(F, " modeb_lowered");
+       if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_NORMALISATION2))
+               fprintf(F, " normalisation2");
+       if (irg_is_constrained(irg, IR_GRAPH_CONSTRAINT_OPTIMIZE_UNREACHABLE_CODE))
+               fprintf(F, " optimize_unreachable_code");
+       fprintf(F, "\n");
+
+       fprintf(F, "properties:");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES))
+               fprintf(F, " no_critical_edges");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_BADS))
+               fprintf(F, " no_bads");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE))
+               fprintf(F, " no_unreachable_code");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_ONE_RETURN))
+               fprintf(F, " one_return");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE))
+               fprintf(F, " consistent_dominance");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE))
+               fprintf(F, " consistent_postdominance");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES))
+               fprintf(F, " consistent_out_edges");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUTS))
+               fprintf(F, " consistent_outs");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO))
+               fprintf(F, " consistent_loopinfo");
+       if (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE))
+               fprintf(F, " consistent_entity_usage");
        fprintf(F, "\"\n");
 }
 
@@ -1677,9 +1451,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);
@@ -1698,7 +1472,7 @@ static void dump_graph_from_list(FILE *F, ir_graph *irg)
 /** dumps the edges between nodes and their type or entity attributes. */
 static void dump_node2type_edges(ir_node *n, void *env)
 {
-       FILE *F = env;
+       FILE *F = (FILE*)env;
        assert(n);
 
        switch (get_irn_opcode(n)) {
@@ -1729,52 +1503,6 @@ static void dump_node2type_edges(ir_node *n, void *env)
        }
 }
 
-#if 0
-static int print_type_info(FILE *F, ir_type *tp)
-{
-       int bad = 0;
-
-       if (get_type_state(tp) == layout_undefined) {
-               fprintf(F, "state: layout_undefined\n");
-       } else {
-               fprintf(F, "state: layout_fixed,\n");
-       }
-       if (get_type_mode(tp))
-               fprintf(F, "mode: %s,\n", get_mode_name_ex(get_type_mode(tp), &bad));
-       fprintf(F, "size: %db,\n", get_type_size_bits(tp));
-
-       return bad;
-}
-
-static void print_typespecific_info(FILE *F, ir_type *tp)
-{
-       switch (get_type_tpop_code(tp)) {
-       case tpo_class:
-               fprintf(F, "peculiarity: %s\n", get_peculiarity_string(get_class_peculiarity(tp)));
-               break;
-       case tpo_struct:
-               break;
-       case tpo_method:
-               fprintf(F, "variadicity: %s\n", get_variadicity_name(get_method_variadicity(tp)));
-               fprintf(F, "params: %d\n", get_method_n_params(tp));
-               fprintf(F, "results: %d\n", get_method_n_ress(tp));
-               break;
-       case tpo_union:
-               break;
-       case tpo_array:
-               break;
-       case tpo_enumeration:
-               break;
-       case tpo_pointer:
-               break;
-       case tpo_primitive:
-               break;
-       default:
-               break;
-       } /* switch type */
-}
-#endif
-
 static void print_typespecific_vcgattr(FILE *F, ir_type *tp)
 {
        switch (get_type_tpop_code(tp)) {
@@ -1798,18 +1526,18 @@ static void print_typespecific_vcgattr(FILE *F, ir_type *tp)
                break;
        default:
                break;
-       } /* switch type */
+       }
 }
 
 void dump_type_node(FILE *F, ir_type *tp)
 {
        fprintf(F, "node: {title: ");
-       PRINT_TYPEID(tp);
-       fprintf(F, " label: \"%s ", get_type_tpop_name(tp));
+       print_typeid(F, tp);
+       fprintf(F, " label: \"");
        if (tp->dbi != NULL) {
-               char buf[256];
+               char buf[1024];
                ir_print_type(buf, sizeof(buf), tp);
-               fprintf(F, "'%s'", buf);
+               fprintf(F, "%s '%s'", get_type_tpop_name(tp), buf);
        } else {
                ir_fprintf(F, "%+F", tp);
        }
@@ -1823,8 +1551,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));
 
@@ -1838,19 +1566,19 @@ static void dump_entity_node(FILE *F, ir_entity *ent)
        fprintf(F, "}\n");
 }
 
-static void dump_enum_item(FILE *F, ir_type *tp, int pos)
+static void dump_enum_item(FILE *F, ir_type *tp, size_t pos)
 {
        char buf[1024];
        ir_enum_const *ec = get_enumeration_const(tp, pos);
        ident         *id = get_enumeration_const_nameid(ec);
-       tarval        *tv = get_enumeration_value(ec);
+       ir_tarval     *tv = get_enumeration_value(ec);
 
        if (tv)
                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);
@@ -1866,18 +1594,19 @@ static void dump_entity_initializer(FILE *F, const ir_entity *ent)
        (void) ent;
 }
 
-/** Dumps a type or entity and it's edges. */
+/**
+ * type-walker: Dumps a type or entity and its edges.
+ */
 static void dump_type_info(type_or_ent tore, void *env)
 {
-       FILE *F = env;
-       int i = 0;  /* to shutup gcc */
+       FILE *F = (FILE*)env;
+       size_t i = 0;  /* to shutup gcc */
 
        /* dump this type or entity */
 
        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 */
@@ -1886,29 +1615,14 @@ static void dump_type_info(type_or_ent tore, void *env)
                ENT_OWN_EDGE_ATTR "}\n", ent, get_entity_owner(ent));*/
                print_ent_type_edge(F,ent, get_entity_type(ent), ENT_TYPE_EDGE_ATTR);
                if (is_Class_type(get_entity_owner(ent))) {
-                       for (i = get_entity_n_overwrites(ent) - 1; i >= 0; --i)
-                               print_ent_ent_edge(F,ent, get_entity_overwrites(ent, i), 0, -1, ENT_OVERWRITES_EDGE_ATTR);
+                       for (i = get_entity_n_overwrites(ent); i > 0;)
+                               print_ent_ent_edge(F, ent, get_entity_overwrites(ent, --i), 0, ird_color_none, ENT_OVERWRITES_EDGE_ATTR);
                }
                /* attached subgraphs */
                if (! (flags & ir_dump_flag_no_entity_values)) {
                        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) - 1; i >= 0; --i) {
-                                       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, -1, 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;
@@ -1919,56 +1633,74 @@ static void dump_type_info(type_or_ent tore, void *env)
                /* and now the edges */
                switch (get_type_tpop_code(tp)) {
                case tpo_class:
-                       for (i = get_class_n_supertypes(tp) - 1; i >= 0; --i)
+                       for (i = get_class_n_supertypes(tp); i > 0;) {
+                               --i;
                                print_type_type_edge(F, tp, get_class_supertype(tp, i), TYPE_SUPER_EDGE_ATTR);
-                       for (i = get_class_n_members(tp) - 1; i >= 0; --i)
+                       }
+                       for (i = get_class_n_members(tp); i > 0;) {
+                               --i;
                                print_type_ent_edge(F, tp, get_class_member(tp, i), TYPE_MEMBER_EDGE_ATTR);
+                       }
                        break;
                case tpo_struct:
-                       for (i = get_struct_n_members(tp) - 1; i >= 0; --i)
+                       for (i = get_struct_n_members(tp); i > 0;) {
+                               --i;
                                print_type_ent_edge(F, tp, get_struct_member(tp, i), TYPE_MEMBER_EDGE_ATTR);
+                       }
                        break;
                case tpo_method:
-                       for (i = get_method_n_params(tp) - 1; i >= 0; --i)
+                       for (i = get_method_n_params(tp); i > 0;) {
+                               --i;
                                print_type_type_edge(F, tp, get_method_param_type(tp, i), METH_PAR_EDGE_ATTR,i);
-                       for (i = get_method_n_ress(tp) - 1; i >= 0; --i)
+                       }
+                       for (i = get_method_n_ress(tp); i > 0;) {
+                                --i;
                                print_type_type_edge(F, tp, get_method_res_type(tp, i), METH_RES_EDGE_ATTR,i);
+                       }
                        break;
                case tpo_union:
-                       for (i = get_union_n_members(tp) - 1; i >= 0; --i)
+                       for (i = get_union_n_members(tp); i > 0;) {
+                                --i;
                                print_type_ent_edge(F, tp, get_union_member(tp, i), UNION_EDGE_ATTR);
+                       }
                        break;
                case tpo_array:
                        print_type_type_edge(F, tp, get_array_element_type(tp), ARR_ELT_TYPE_EDGE_ATTR);
                        print_type_ent_edge(F, tp, get_array_element_entity(tp), ARR_ENT_EDGE_ATTR);
-                       for (i = get_array_n_dimensions(tp) - 1; i >= 0; --i) {
-                               ir_node *upper = get_array_upper_bound(tp, i);
-                               ir_node *lower = get_array_lower_bound(tp, i);
-                               print_node_type_edge(F, upper, tp, "label: \"upper %d\"", get_array_order(tp, i));
-                               print_node_type_edge(F, lower, tp, "label: \"lower %d\"", get_array_order(tp, i));
+                       for (i = get_array_n_dimensions(tp); i > 0;) {
+                               ir_node *upper, *lower;
+
+                                --i;
+                               upper = get_array_upper_bound(tp, i);
+                               lower = get_array_lower_bound(tp, i);
+                               print_node_type_edge(F, upper, tp, "label: \"upper %zu\"", get_array_order(tp, i));
+                               print_node_type_edge(F, lower, tp, "label: \"lower %zu\"", get_array_order(tp, i));
                                dump_const_expression(F, upper);
                                dump_const_expression(F, lower);
                        }
                        break;
                case tpo_enumeration:
-                       for (i = get_enumeration_n_enums(tp) - 1; i >= 0; --i) {
+                       for (i = get_enumeration_n_enums(tp); i > 0;) {
+                                --i;
                                dump_enum_item(F, tp, i);
-                               print_enum_item_edge(F, tp, i, "label: \"item %d\"", i);
+                               print_enum_item_edge(F, tp, i, "label: \"item %zu\"", i);
                        }
                        break;
                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;
-               } /* switch type */
+               }
                break; /* case k_type */
        }
        default:
                printf(" *** irdump,  dump_type_info(l.%i), faulty type.\n", __LINE__);
-       } /* switch kind_or_entity */
+       }
 }
 
 /** For dumping class hierarchies.
@@ -1976,8 +1708,8 @@ static void dump_type_info(type_or_ent tore, void *env)
  */
 static void dump_class_hierarchy_node(type_or_ent tore, void *ctx)
 {
-       FILE *F = ctx;
-       int i = 0;  /* to shutup gcc */
+       FILE *F = (FILE*)ctx;
+       size_t i = 0;  /* to shutup gcc */
 
        /* dump this type or entity */
        switch (get_kind(tore.ent)) {
@@ -1992,8 +1724,10 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx)
                        dump_entity_node(F, ent);
                        /* The edges */
                        print_type_ent_edge(F, get_entity_owner(ent), ent, TYPE_MEMBER_EDGE_ATTR);
-                       for (i = get_entity_n_overwrites(ent) - 1; i >= 0; --i)
-                               print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, -1, ENT_OVERWRITES_EDGE_ATTR);
+                       for (i = get_entity_n_overwrites(ent); i > 0;) {
+                                --i;
+                               print_ent_ent_edge(F, get_entity_overwrites(ent, i), ent, 0, ird_color_none, ENT_OVERWRITES_EDGE_ATTR);
+                       }
                }
                break;
        }
@@ -2005,17 +1739,18 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx)
                case tpo_class:
                        dump_type_node(F, tp);
                        /* and now the edges */
-                       for (i = get_class_n_supertypes(tp) - 1; i >= 0; --i) {
+                       for (i = get_class_n_supertypes(tp); i > 0;) {
+                                --i;
                                print_type_type_edge(F,tp,get_class_supertype(tp, i),TYPE_SUPER_EDGE_ATTR);
                        }
                        break;
                default: break;
-               } /* switch type */
+               }
                break; /* case k_type */
        }
        default:
                printf(" *** irdump,  dump_class_hierarchy_node(l.%i), faulty type.\n", __LINE__);
-       } /* switch kind_or_entity */
+       }
 }
 
 /*******************************************************************/
@@ -2025,84 +1760,98 @@ static void dump_class_hierarchy_node(type_or_ent tore, void *ctx)
 /* dump out edges */
 static void dump_out_edge(ir_node *n, void *env)
 {
-       FILE *F = env;
+       FILE *F = (FILE*)env;
        int i;
        for (i = get_irn_n_outs(n) - 1; i >= 0; --i) {
                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");
        }
 }
 
-static void dump_loop_label(FILE *F, ir_loop *loop)
+static void dump_loop_label(FILE *F, const ir_loop *loop)
 {
-       fprintf(F, "loop %d, %d sons, %d nodes",
-               get_loop_depth(loop), get_loop_n_sons(loop), get_loop_n_nodes(loop));
+       fprintf(F, "loop %u", get_loop_depth(loop));
 }
 
-static void dump_loop_info(FILE *F, ir_loop *loop)
+static void dump_loop_info(FILE *F, const ir_loop *loop)
 {
        fprintf(F, " info1: \"");
-       fprintf(F, " loop nr: %d", get_loop_loop_nr(loop));
-#ifdef DEBUG_libfirm   /* GL @@@ debug analyses */
-       fprintf(F, "\n The loop was analyzed %d times.", PTR_TO_INT(get_loop_link(loop)));
+       fprintf(F, " loop nr: %ld", get_loop_loop_nr(loop));
+#ifdef DEBUG_libfirm
+       fprintf(F, "\n The loop was analyzed %ld times.", (long int) PTR_TO_INT(get_loop_link(loop)));
 #endif
        fprintf(F, "\"");
 }
 
-static void dump_loop_node(FILE *F, ir_loop *loop)
+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);
        fprintf(F, "}\n");
 }
 
-static void dump_loop_node_edge(FILE *F, ir_loop *loop, int i)
+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_node(loop, i));
-       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, ir_loop *loop, int i)
+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_son(loop, i));
-       fprintf(F, "\" color: darkgreen label: \"%d\"}\n",
-               get_loop_element_pos(loop, get_loop_son(loop, 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, ir_loop *loop)
+static void dump_loops(FILE *F, const ir_loop *loop)
 {
-       int i;
+       size_t i;
+       size_t n_elements = get_loop_n_elements(loop);
        /* dump this loop node */
        dump_loop_node(F, loop);
 
        /* dump edges to nodes in loop -- only if it is a real loop */
        if (get_loop_depth(loop) != 0) {
-               for (i = get_loop_n_nodes(loop) - 1; i >= 0; --i) {
+               for (i = n_elements; i > 0;) {
+                       loop_element element;
+                       --i;
+                       element = get_loop_element(loop, i);
+                       if (*element.kind != k_ir_node)
+                               continue;
                        dump_loop_node_edge(F, loop, i);
                }
        }
-       for (i = get_loop_n_sons(loop) - 1; i >= 0; --i) {
-               dump_loops(F, get_loop_son(loop, i));
+       for (i = n_elements; i > 0;) {
+               loop_element element;
+               --i;
+               element = get_loop_element(loop, i);
+               if (*element.kind != k_ir_loop)
+                       continue;
+               dump_loops(F, element.son);
                dump_loop_son_edge(F, loop, i);
        }
 }
@@ -2110,29 +1859,38 @@ static void dump_loops(FILE *F, ir_loop *loop)
 static void dump_loop_nodes_into_graph(FILE *F, ir_graph *irg)
 {
        ir_loop *loop = get_irg_loop(irg);
-
        if (loop != NULL) {
-               ir_graph *rem = current_ir_graph;
-               current_ir_graph = irg;
-
                dump_loops(F, loop);
+       }
+}
 
-               current_ir_graph = rem;
+void dump_vcg_header_colors(FILE *F)
+{
+       int i;
+       init_colors();
+       for (i = 0; i < ird_color_count; ++i) {
+               if (color_rgb[i] != NULL) {
+                       fprintf(F, "colorentry %s: %s\n", color_names[i], color_rgb[i]);
+               }
        }
 }
 
+void dump_vcg_infonames(FILE *F)
+{
+       fputs(
+               "infoname 1: \"Attribute\"\n"
+               "infoname 2: \"Verification errors\"\n"
+               "infoname 3: \"Debug info\"\n", F);
+}
 
 /**
  * dumps the VCG header
  */
 void dump_vcg_header(FILE *F, const char *name, const char *layout, const char *orientation)
 {
-       int   i;
        const char *label
                = (flags & ir_dump_flag_disable_edge_labels) ? "no" : "yes";
 
-       init_colors();
-
        if (! layout)     layout = "Compilergraph";
        if (!orientation) orientation = "bottom_to_top";
 
@@ -2165,18 +1923,10 @@ void dump_vcg_header(FILE *F, const char *name, const char *layout, const char *
                "classname 19: \"Postdominators\"\n"
                "classname 20: \"Keep Alive\"\n"
                "classname 21: \"Out Edges\"\n"
-               "classname 22: \"Macro Block Edges\"\n"
-               //"classname 23: \"NoInput Nodes\"\n"
-               "infoname 1: \"Attribute\"\n"
-               "infoname 2: \"Verification errors\"\n"
-               "infoname 3: \"Debug info\"\n",
+               "classname 22: \"Macro Block Edges\"\n",
                name, label, layout, orientation);
-
-       for (i = 0; i < ird_color_count; ++i) {
-               if (color_rgb[i] != NULL) {
-                       fprintf(F, "colorentry %s: %s\n", color_names[i], color_rgb[i]);
-               }
-       }
+       dump_vcg_infonames(F);
+       dump_vcg_header_colors(F);
        fprintf(F, "\n");
 }
 
@@ -2192,7 +1942,7 @@ void dump_vcg_footer(FILE *F)
 
 static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg)
 {
-       int i;
+       size_t i;
 
        construct_block_lists(irg);
 
@@ -2201,120 +1951,24 @@ static void dump_blocks_as_subgraphs(FILE *out, ir_graph *irg)
         * only the requested irg but also all irgs that can be reached
         * from irg.
         */
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
-               ir_graph *irg = get_irp_irg(i);
-               ir_node **arr = ird_get_irg_link(irg);
+       for (i = get_irp_n_irgs(); i > 0;) {
+               ir_graph *other_irg = get_irp_irg(--i);
+               ir_node **arr = (ir_node**)ird_get_irg_link(other_irg);
                if (arr == NULL)
                        continue;
 
-               dump_graph_from_list(out, irg);
+               dump_graph_from_list(out, other_irg);
                DEL_ARR_F(arr);
        }
 }
 
-/** 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)
-{
-       int i;
-       ir_graph *rem = current_ir_graph;
-       ir_extblk **arr = ird_get_irg_link(irg);
-       current_ir_graph = irg;
-
-       for (i = ARR_LEN(arr) - 1; i >= 0; --i) {
-               ir_extblk *extbb = arr[i];
-               ir_node *leader = get_extbb_leader(extbb);
-               int j;
-
-               fprintf(F, "graph: { title: \"");
-               PRINT_EXTBBID(leader);
-               fprintf(F, "\"  label: \"ExtBB %ld\" status:clustered color:lightgreen\n",
-                       get_irn_node_nr(leader));
-
-               for (j = ARR_LEN(extbb->blks) - 1; j >= 0; --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)
-                       && (get_irg_loopinfo_state(irg) & loopinfo_valid))
-               dump_loop_nodes_into_graph(F, irg);
-
-       current_ir_graph = rem;
-       free_extbb(irg);
-}
-
-static void dump_blocks_extbb_grouped(FILE *F, ir_graph *irg)
-{
-       int        i;
-       ir_entity *ent = get_irg_entity(irg);
-
-       if (get_irg_extblk_state(irg) != extblk_valid)
-               compute_extbb(irg);
-
-       construct_extblock_lists(irg);
-
-       fprintf(F, "graph: { title: \"");
-       PRINT_IRGID(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() - 1; i >= 0; --i) {
-               ir_graph *irg     = get_irp_irg(i);
-               list_tuple *lists = ird_get_irg_link(irg);
-
-               if (lists) {
-                       /* dump the extended blocks first */
-                       if (ARR_LEN(lists->extbb_list)) {
-                               ird_set_irg_link(irg, lists->extbb_list);
-                               dump_extblock_graph(F, irg);
-                       }
-
-                       /* we may have blocks without extended blocks, bad for instance */
-                       if (ARR_LEN(lists->blk_list)) {
-                               ird_set_irg_link(irg, lists->blk_list);
-                               dump_block_graph(F, 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);
@@ -2322,25 +1976,20 @@ void dump_ir_graph_file(FILE *out, ir_graph *irg)
 
        /* dump type info */
        if (flags & ir_dump_flag_with_typegraph) {
-               ir_graph *rem = current_ir_graph;
-               current_ir_graph = irg;
-
                type_walk_irg(irg, dump_type_info, NULL, out);
                inc_irg_visited(get_const_code_irg());
                /* dump edges from graph to type info */
                irg_walk(get_irg_end(irg), dump_node2type_edges, NULL, out);
-
-               current_ir_graph = rem;
        }
 
        /* dump iredges out edges */
-       if ((flags & ir_dump_flag_iredges) && edges_activated(current_ir_graph)) {
+       if ((flags & ir_dump_flag_iredges) && edges_activated(irg)) {
                irg_walk_edges(get_irg_start_block(irg), dump_ir_edges, NULL, out);
        }
 
        /* dump the out edges in a separate walk */
        if ((flags & ir_dump_flag_out_edges)
-                       && (get_irg_outs_state(irg) != outs_none)) {
+                       && (irg_has_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUTS))) {
                irg_out_walk(get_irg_start(irg), dump_out_edge, NULL, out);
        }
 
@@ -2349,69 +1998,68 @@ void dump_ir_graph_file(FILE *out, ir_graph *irg)
 
 static void dump_block_to_cfg(ir_node *block, void *env)
 {
-       FILE *F = env;
-       int i, fl = 0;
-       ir_node *pred;
+       FILE *F = (FILE*)env;
+       int i;
+
+       if (is_Bad(block) && get_irn_mode(block) == mode_X) {
+               dump_node(F, block);
+       }
 
        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:\"");
 
                /* the generic version. */
                dump_irnode_to_file(F, block);
 
-               /* Check whether we have bad predecessors to color the block. */
-               for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i)
-                       if ((fl = is_Bad(get_Block_cfgpred(block, i))))
-                               break;
-
                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 = get_Block_n_cfgpreds(block) - 1; i >= 0; --i)
-                       if (!is_Bad(skip_Proj(get_Block_cfgpred(block, i)))) {
-                               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");
-                       }
+               for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i) {
+                       ir_node *pred = get_Block_cfgpred(block, i);
+                       if (!is_Bad(pred))
+                               pred = get_nodes_block(pred);
+                       fprintf(F, "edge: { sourcename: ");
+                       print_nodeid(F, block);
+                       fprintf(F, " targetname: ");
+                       print_nodeid(F, pred);
+                       fprintf(F, "\"}\n");
+               }
 
                /* Dump dominator/postdominator edge */
                if (ir_get_dump_flags() & ir_dump_flag_dominance) {
-                       if (get_irg_dom_state(current_ir_graph) == dom_consistent && get_Block_idom(block)) {
-                               pred = get_Block_idom(block);
-                               fprintf(F, "edge: { sourcename: \"");
-                               PRINT_NODEID(block);
-                               fprintf(F, "\" targetname: \"");
-                               PRINT_NODEID(pred);
-                               fprintf(F, "\" " DOMINATOR_EDGE_ATTR "}\n");
+                       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);
+                               fprintf(F, " targetname: ");
+                               print_nodeid(F, pred);
+                               fprintf(F, " " DOMINATOR_EDGE_ATTR "}\n");
                        }
-                       if (get_irg_postdom_state(current_ir_graph) == dom_consistent && get_Block_ipostdom(block)) {
-                               pred = get_Block_ipostdom(block);
-                               fprintf(F, "edge: { sourcename: \"");
-                               PRINT_NODEID(block);
-                               fprintf(F, "\" targetname: \"");
-                               PRINT_NODEID(pred);
-                               fprintf(F, "\" " POSTDOMINATOR_EDGE_ATTR "}\n");
+                       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);
+                               fprintf(F, " targetname: ");
+                               print_nodeid(F, pred);
+                               fprintf(F, " " POSTDOMINATOR_EDGE_ATTR "}\n");
                        }
                }
        }
@@ -2422,33 +2070,31 @@ void dump_cfg(FILE *F, ir_graph *irg)
        dump_vcg_header(F, get_irg_dump_name(irg), NULL, NULL);
 
        /* walk over the blocks in the graph */
-       irg_block_walk(get_irg_end(irg), dump_block_to_cfg, NULL, F);
-       dump_node(F, get_irg_bad(irg));
+       irg_walk_graph(irg, dump_block_to_cfg, NULL, F);
 
        dump_vcg_footer(F);
 }
 
 void dump_callgraph(FILE *F)
 {
-       int             i;
+       size_t          i;
        ir_dump_flags_t old_flags = ir_get_dump_flags();
 
        ir_remove_dump_flags(ir_dump_flag_disable_edge_labels);
        dump_vcg_header(F, "Callgraph", "Hierarchic", NULL);
 
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
-               ir_graph *irg = get_irp_irg(i);
+       for (i = get_irp_n_irgs(); i > 0;) {
+               ir_graph *irg = get_irp_irg(--i);
                ir_entity *ent = get_irg_entity(irg);
-               int j;
-               int n_callees = get_irg_n_callees(irg);
+               size_t j, n_callees = get_irg_n_callees(irg);
 
                dump_entity_node(F, ent);
                for (j = 0; j < n_callees; ++j) {
                        ir_entity  *c    = get_irg_entity(get_irg_callee(irg, j));
                        int         be   = is_irg_callee_backedge(irg, j);
                        const char *attr = be
-                               ? "label:\"recursion %d\""
-                               : "label:\"calls %d\"";
+                               ? "label:\"recursion %zu\""
+                               : "label:\"calls %zu\"";
                        print_ent_ent_edge(F, ent, c, be, ird_color_entity, attr,
                                           get_irg_callee_loop_depth(irg, j));
                }
@@ -2460,21 +2106,24 @@ 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);
 }
 
 static void dump_loops_standalone(FILE *F, ir_loop *loop)
 {
-       int i = 0, loop_node_started = 0, son_number = 0, first = 0;
+       size_t i;
+       bool   loop_node_started = false;
+       size_t first      = 0;
+       size_t son_number = 0;
        loop_element le;
        ir_loop *son = NULL;
 
@@ -2491,12 +2140,14 @@ 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, "-%d-nodes\" label:\"%d...%d\"}\n", first, first, i-1);
-                               loop_node_started = 0;
+                               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);
+                               loop_node_started = false;
                        }
                        dump_loop_son_edge(F, loop, son_number++);
                        dump_loops_standalone(F, son);
@@ -2506,16 +2157,15 @@ 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, "-%d-nodes\" color: lightyellow label: \"", i);
-                               loop_node_started = 1;
+                               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;
                        } else
                                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;
@@ -2525,10 +2175,10 @@ 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, "-%d-nodes\" color: lightyellow label: \"", i);
-                               loop_node_started = 1;
+                               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;
                        } else
                                fprintf(F, "\n");
@@ -2540,20 +2190,20 @@ 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, "-%d-nodes\" label:\"%d...%d\"}\n", first, first, i-1);
-               loop_node_started = 0;
+               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);
+               loop_node_started = false;
        }
 }
 
 void dump_loop_tree(FILE *out, ir_graph *irg)
 {
-       ir_graph       *rem       = current_ir_graph;
        ir_dump_flags_t old_flags = ir_get_dump_flags();
 
-       current_ir_graph = irg;
        ir_remove_dump_flags(ir_dump_flag_disable_edge_labels);
 
        dump_vcg_header(out, get_irg_dump_name(irg), "Tree", "top_to_bottom");
@@ -2564,7 +2214,6 @@ void dump_loop_tree(FILE *out, ir_graph *irg)
        dump_vcg_footer(out);
 
        ir_set_dump_flags(old_flags);
-       current_ir_graph = rem;
 }
 
 void dump_callgraph_loop_tree(FILE *out)
@@ -2574,9 +2223,11 @@ void dump_callgraph_loop_tree(FILE *out)
        dump_vcg_footer(out);
 }
 
-static void collect_nodeloop(FILE *F, ir_loop *loop, eset *loopnodes)
+static void collect_nodeloop(FILE *F, ir_loop *loop, pset *loopnodes)
 {
-       int i, son_number = 0, node_number = 0;
+       size_t i;
+       int    son_number = 0;
+       int    node_number = 0;
 
        if (flags & ir_dump_flag_loops)
                dump_loop_node(F, loop);
@@ -2591,15 +2242,16 @@ static void collect_nodeloop(FILE *F, ir_loop *loop, eset *loopnodes)
                } else {
                        if (flags & ir_dump_flag_loops)
                                dump_loop_node_edge(F, loop, node_number++);
-                       eset_insert(loopnodes, le.node);
+                       pset_insert_ptr(loopnodes, le.node);
                }
        }
 }
 
-static void collect_nodeloop_external_nodes(ir_loop *loop, eset *loopnodes,
-                                            eset *extnodes)
+static void collect_nodeloop_external_nodes(ir_loop *loop, pset *loopnodes,
+                                            pset *extnodes)
 {
-       int i, j, start;
+       size_t i;
+       int j, start;
 
        for (i = 0; i < get_loop_n_elements(loop); i++) {
                loop_element le = get_loop_element(loop, i);
@@ -2610,11 +2262,12 @@ static void collect_nodeloop_external_nodes(ir_loop *loop, eset *loopnodes,
                        if (is_Block(le.node)) start = 0; else start = -1;
                        for (j = start; j < get_irn_arity(le.node); j++) {
                                ir_node *pred = get_irn_n(le.node, j);
-                               if (!eset_contains(loopnodes, pred)) {
-                                       eset_insert(extnodes, pred);
+                               if (!pset_find_ptr(loopnodes, pred)) {
+                                       pset_insert_ptr(extnodes, pred);
                                        if (!is_Block(pred)) {
                                                pred = get_nodes_block(pred);
-                                               if (!eset_contains(loopnodes, pred)) eset_insert(extnodes, pred);
+                                               if (!pset_find_ptr(loopnodes, pred))
+                                                       pset_insert_ptr(extnodes, pred);
                                        }
                                }
                        }
@@ -2624,12 +2277,11 @@ static void collect_nodeloop_external_nodes(ir_loop *loop, eset *loopnodes,
 
 void dump_loop(FILE *F, ir_loop *l)
 {
-       eset *loopnodes = eset_create();
-       eset *extnodes = eset_create();
-       ir_node *n, *b;
+       pset *loopnodes = pset_new_ptr_default();
+       pset *extnodes  = pset_new_ptr_default();
        char name[50];
 
-       snprintf(name, sizeof(name), "loop_%d", get_loop_loop_nr(l));
+       snprintf(name, sizeof(name), "loop_%ld", get_loop_loop_nr(l));
        dump_vcg_header(F, name, NULL, NULL);
 
        /* collect all nodes to dump */
@@ -2637,44 +2289,46 @@ void dump_loop(FILE *F, ir_loop *l)
        collect_nodeloop_external_nodes(l, loopnodes, extnodes);
 
        /* build block lists */
-       for (n = eset_first(loopnodes); n != NULL; n = eset_next(loopnodes))
+       foreach_pset(loopnodes, ir_node, n) {
                set_irn_link(n, NULL);
-       for (n = eset_first(extnodes); n != NULL; n = eset_next(extnodes))
+       }
+       foreach_pset(extnodes, ir_node, n) {
                set_irn_link(n, NULL);
-       for (n = eset_first(loopnodes); n != NULL; n = eset_next(loopnodes)) {
+       }
+       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);
                }
        }
-       for (n = eset_first(extnodes); n != NULL; n = eset_next(extnodes)) {
+       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);
                }
        }
 
-       for (b = eset_first(loopnodes); b != NULL; b = eset_next(loopnodes)) {
+       foreach_pset(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:%d", get_irn_node_nr(b), get_irn_idx(b));
+                       fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b));
                        fprintf(F, "\" status:clustered color:yellow\n");
 
                        /* dump the blocks edges */
                        dump_ir_data_edges(F, b);
 
                        /* dump the nodes that go into the block */
-                       for (n = get_irn_link(b); n; n = get_irn_link(n)) {
-                               if (eset_contains(extnodes, 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);
                                overrule_nodecolor = ird_color_default_node;
-                               if (!eset_contains(extnodes, n)) dump_ir_data_edges(F, n);
+                               if (!pset_find_ptr(extnodes, n)) dump_ir_data_edges(F, n);
                        }
 
                        /* Close the vcg information for the block */
@@ -2683,22 +2337,22 @@ void dump_loop(FILE *F, ir_loop *l)
                        fprintf(F, "\n");
                }
        }
-       for (b = eset_first(extnodes); b != NULL; b = eset_next(extnodes)) {
+       foreach_pset(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:%d", get_irn_node_nr(b), get_irn_idx(b));
+                       fprintf(F, " %ld:%u", get_irn_node_nr(b), get_irn_idx(b));
                        fprintf(F, "\" status:clustered color:lightblue\n");
 
                        /* dump the nodes that go into the block */
-                       for (n = get_irn_link(b); n; n = get_irn_link(n)) {
-                               if (!eset_contains(loopnodes, 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);
                                overrule_nodecolor = ird_color_default_node;
-                               if (eset_contains(loopnodes, n)) dump_ir_data_edges(F, n);
+                               if (pset_find_ptr(loopnodes, n)) dump_ir_data_edges(F, n);
                        }
 
                        /* Close the vcg information for the block */
@@ -2707,8 +2361,8 @@ void dump_loop(FILE *F, ir_loop *l)
                        fprintf(F, "\n");
                }
        }
-       eset_destroy(loopnodes);
-       eset_destroy(extnodes);
+       del_pset(loopnodes);
+       del_pset(extnodes);
 
        dump_vcg_footer(F);
 }
@@ -2777,8 +2431,8 @@ void dump_ir_graph_ext(ir_graph_dump_func func, ir_graph *graph,
        }
        obstack_1grow(&obst, '\0');
 
-       file_name = obstack_finish(&obst);
-       /* xvcg expects only <CR> so we need "b"inary mode (for win32) */
+       file_name = (char*)obstack_finish(&obst);
+       /* xvcg expects only <LF> so we need "b"inary mode (for win32) */
        out       = fopen(file_name, "wb");
        obstack_free(&obst, file_name);
 
@@ -2806,7 +2460,7 @@ void dump_ir_prog_ext(ir_prog_dump_func func, const char *suffix)
        }
        obstack_1grow(&obst, '\0');
 
-       file_name = obstack_finish(&obst);
+       file_name = (char*)obstack_finish(&obst);
        out       = fopen(file_name, "wb");
        obstack_free(&obst, file_name);
 
@@ -2828,8 +2482,7 @@ void dump_ir_graph(ir_graph *graph, const char *suffix)
 
 void dump_all_ir_graphs(const char *suffix)
 {
-       int n_irgs = get_irp_n_irgs();
-       int i;
+       size_t i, n_irgs = get_irp_n_irgs();
 
        for (i = 0; i < n_irgs; ++i) {
                ir_graph *irg = get_irp_irg(i);
@@ -2837,17 +2490,17 @@ void dump_all_ir_graphs(const char *suffix)
        }
 }
 
-struct pass_t {
+typedef struct pass_t {
        ir_prog_pass_t pass;
        char           suffix[1];
-};
+} pass_t;
 
 /**
  * Wrapper around dump_all_ir_graphs().
  */
 static int dump_all_ir_graphs_wrapper(ir_prog *irp, void *context)
 {
-       struct pass_t *pass = context;
+       pass_t *pass = (pass_t*)context;
 
        (void)irp;
        dump_all_ir_graphs(pass->suffix);
@@ -2856,8 +2509,8 @@ static int dump_all_ir_graphs_wrapper(ir_prog *irp, void *context)
 
 ir_prog_pass_t *dump_all_ir_graph_pass(const char *name, const char *suffix)
 {
-       size_t         len   = strlen(suffix);
-       struct pass_t  *pass = xmalloc(sizeof(*pass) + len);
+       size_t  len  = strlen(suffix) + 1;
+       pass_t *pass = XMALLOCF(pass_t, suffix, len);
        ir_prog_pass_t *res  = def_prog_pass_constructor(
                &pass->pass, name ? name : "dump_all_graphs", dump_all_ir_graphs_wrapper);
 
@@ -2865,7 +2518,7 @@ ir_prog_pass_t *dump_all_ir_graph_pass(const char *name, const char *suffix)
        res->dump_irprog   = ir_prog_no_dump;
        res->verify_irprog = ir_prog_no_verify;
 
-       memcpy(pass->suffix, suffix, len+1);
+       memcpy(pass->suffix, suffix, len);
 
        return res;
 }