automatically generate most getter/setter functions of firm nodes
[libfirm] / ir / ir / irvrfy.c
index 6c6b370..d1d6a59 100644 (file)
@@ -36,6 +36,7 @@
 #include "irprintf.h"
 #include "irouts.h"
 #include "irflag_t.h"
+#include "irpass_t.h"
 
 /** if this flag is set, verify entity types in Load & Store nodes */
 static int vrfy_entities = 0;
@@ -43,7 +44,8 @@ static int vrfy_entities = 0;
 const char *firm_vrfy_failure_msg;
 
 /* enable verification of Load/Store entities */
-void vrfy_enable_entity_tests(int enable) {
+void vrfy_enable_entity_tests(int enable)
+{
        vrfy_entities = enable;
 }
 
@@ -52,7 +54,8 @@ void vrfy_enable_entity_tests(int enable) {
 /**
  * little helper for NULL modes
  */
-static const char *get_mode_name_ex(ir_mode *mode) {
+static const char *get_mode_name_ex(ir_mode *mode)
+{
        if (! mode)
                return "<no mode>";
        return get_mode_name(mode);
@@ -66,7 +69,8 @@ static ir_graph *last_irg_error = NULL;
  *
  * @param node  the node caused the failure
  */
-static void show_entity_failure(ir_node *node) {
+static void show_entity_failure(ir_node *node)
+{
        ir_graph *irg = get_irn_irg(node);
 
        if (last_irg_error == irg)
@@ -83,10 +87,8 @@ static void show_entity_failure(ir_node *node) {
                        ir_type *ent_type = get_entity_owner(ent);
 
                        if (ent_type) {
-                               if (ent_type == get_glob_type())
-                                       fprintf(stderr, "\nFIRM: irn_vrfy_irg() %s failed\n", get_entity_name(ent));
-                               else
-                                       fprintf(stderr, "\nFIRM: irn_vrfy_irg() %s::%s failed\n", get_type_name(ent_type), get_entity_name(ent));
+                               ir_fprintf(stderr, "\nFIRM: irn_vrfy_irg() %+F::%s failed\n",
+                                          ent_type, get_entity_name(ent));
                        } else {
                                fprintf(stderr, "\nFIRM: irn_vrfy_irg() <NULL>::%s failed\n", get_entity_name(ent));
                        }
@@ -99,7 +101,8 @@ static void show_entity_failure(ir_node *node) {
 /**
  * Prints a failure for a Node
  */
-static void show_node_failure(ir_node *n) {
+static void show_node_failure(ir_node *n)
+{
        show_entity_failure(n);
        fprintf(stderr, "  node %ld %s%s\n" ,
                get_irn_node_nr(n),
@@ -110,7 +113,8 @@ static void show_node_failure(ir_node *n) {
 /**
  * Prints a failure message for a binop
  */
-static void show_binop_failure(ir_node *n, const char *text) {
+static void show_binop_failure(ir_node *n, const char *text)
+{
        ir_node *left  = get_binop_left(n);
        ir_node *right = get_binop_right(n);
 
@@ -126,7 +130,8 @@ static void show_binop_failure(ir_node *n, const char *text) {
 /**
  * Prints a failure message for an unop
  */
-static void show_unop_failure(ir_node *n, const char *text) {
+static void show_unop_failure(ir_node *n, const char *text)
+{
        ir_node *op  = get_unop_op(n);
 
        show_entity_failure(n);
@@ -140,7 +145,8 @@ static void show_unop_failure(ir_node *n, const char *text) {
 /**
  * Prints a failure message for an op with 3 operands
  */
-static void show_triop_failure(ir_node *n, const char *text) {
+static void show_triop_failure(ir_node *n, const char *text)
+{
        ir_node *op0  = get_irn_n(n, 0);
        ir_node *op1  = get_irn_n(n, 1);
        ir_node *op2  = get_irn_n(n, 2);
@@ -158,7 +164,8 @@ static void show_triop_failure(ir_node *n, const char *text) {
 /**
  * Prints a failure message for a proj
  */
-static void show_proj_failure(ir_node *n) {
+static void show_proj_failure(ir_node *n)
+{
        ir_node *op  = get_Proj_pred(n);
        int proj     = get_Proj_proj(n);
 
@@ -172,51 +179,61 @@ static void show_proj_failure(ir_node *n) {
 /**
  * Prints a failure message for a proj from Start
  */
-static void show_proj_mode_failure(ir_node *n, ir_type *ty) {
+static void show_proj_mode_failure(ir_node *n, ir_type *ty)
+{
        long proj  = get_Proj_proj(n);
        ir_mode *m = get_type_mode(ty);
+       char type_name[256];
+       ir_print_type(type_name, sizeof(type_name), ty);
 
        show_entity_failure(n);
        fprintf(stderr, "  Proj %ld mode %s proj %ld (type %s mode %s) failed\n" ,
                get_irn_node_nr(n),
                get_irn_modename(n),
                proj,
-               get_type_name(ty),
+               type_name,
                get_mode_name_ex(m));
 }
 
 /**
  * Prints a failure message for a proj
  */
-static void show_proj_failure_ent(ir_node *n, ir_entity *ent) {
+static void show_proj_failure_ent(ir_node *n, ir_entity *ent)
+{
        ir_node *op  = get_Proj_pred(n);
        int proj     = get_Proj_proj(n);
        ir_mode *m   = get_type_mode(get_entity_type(ent));
+       char type_name[256];
+       ir_print_type(type_name, sizeof(type_name), get_entity_type(ent));
 
        show_entity_failure(n);
        fprintf(stderr, "  node %ld %s%s %d(%s%s) entity %s(type %s mode %s)failed\n" ,
                get_irn_node_nr(n),
                get_irn_opname(n), get_irn_modename(n), proj,
                get_irn_opname(op), get_irn_modename(op),
-               get_entity_name(ent), get_type_name(get_entity_type(ent)),
+               get_entity_name(ent), type_name,
                get_mode_name_ex(m));
 }
 
 /**
  * Show a node and a graph
  */
-static void show_node_on_graph(ir_graph *irg, ir_node *n) {
+static void show_node_on_graph(ir_graph *irg, ir_node *n)
+{
        ir_fprintf(stderr, "\nFIRM: irn_vrfy_irg() of %+F, node %+F\n", irg, n);
 }
 
 /**
  * Show call parameters
  */
-static void show_call_param(ir_node *n, ir_type *mt) {
+static void show_call_param(ir_node *n, ir_type *mt)
+{
        int i;
+       char type_name[256];
+       ir_print_type(type_name, sizeof(type_name), mt);
 
        show_entity_failure(n);
-       fprintf(stderr, "  Call type-check failed: %s(", get_type_name(mt));
+       fprintf(stderr, "  Call type-check failed: %s(", type_name);
        for (i = 0; i < get_method_n_params(mt); ++i) {
                fprintf(stderr, "%s ", get_mode_name_ex(get_type_mode(get_method_param_type(mt, i))));
        }
@@ -231,7 +248,8 @@ static void show_call_param(ir_node *n, ir_type *mt) {
 /**
  * Show return modes
  */
-static void show_return_modes(ir_graph *irg, ir_node *n, ir_type *mt, int i) {
+static void show_return_modes(ir_graph *irg, ir_node *n, ir_type *mt, int i)
+{
        ir_entity *ent = get_irg_entity(irg);
 
        show_entity_failure(n);
@@ -245,7 +263,8 @@ static void show_return_modes(ir_graph *irg, ir_node *n, ir_type *mt, int i) {
 /**
  * Show return number of results
  */
-static void show_return_nres(ir_graph *irg, ir_node *n, ir_type *mt) {
+static void show_return_nres(ir_graph *irg, ir_node *n, ir_type *mt)
+{
        ir_entity *ent = get_irg_entity(irg);
 
        show_entity_failure(n);
@@ -257,7 +276,8 @@ static void show_return_nres(ir_graph *irg, ir_node *n, ir_type *mt) {
 /**
  * Show Phi input
  */
-static void show_phi_failure(ir_node *phi, ir_node *pred, int pos) {
+static void show_phi_failure(ir_node *phi, ir_node *pred, int pos)
+{
        (void) pos;
        show_entity_failure(phi);
        fprintf(stderr, "  Phi node %ld has mode %s different from predeccessor node %ld mode %s\n",
@@ -268,7 +288,8 @@ static void show_phi_failure(ir_node *phi, ir_node *pred, int pos) {
 /**
  * Show Phi inputs
  */
-static void show_phi_inputs(ir_node *phi, ir_node *block) {
+static void show_phi_inputs(ir_node *phi, ir_node *block)
+{
        show_entity_failure(phi);
        fprintf(stderr, "  Phi node %ld has %d inputs, its Block %ld has %d\n",
                get_irn_node_nr(phi),   get_irn_arity(phi),
@@ -282,7 +303,8 @@ static void show_phi_inputs(ir_node *phi, ir_node *block) {
  *
  * @param ptr  the node representing the address
  */
-static ir_entity *get_ptr_entity(ir_node *ptr) {
+static ir_entity *get_ptr_entity(ir_node *ptr)
+{
        if (is_Sel(ptr)) {
                return get_Sel_entity(ptr);
        } else if (is_SymConst_addr_ent(ptr)) {
@@ -294,7 +316,8 @@ static ir_entity *get_ptr_entity(ir_node *ptr) {
 /**
  * verify a Proj(Start) node
  */
-static int verify_node_Proj_Start(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Start(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        (void) n;
@@ -302,12 +325,10 @@ static int verify_node_Proj_Start(ir_node *n, ir_node *p) {
        ASSERT_AND_RET_DBG(
                (
                        (proj == pn_Start_X_initial_exec && mode == mode_X) ||
-                       (proj == pn_Start_M         && mode == mode_M) ||
-                       (proj == pn_Start_P_frame_base && mode_is_reference(mode)) ||
-                       (proj == pn_Start_P_tls     && mode_is_reference(mode)) ||
-                       (proj == pn_Start_T_args    && mode == mode_T) ||
-                       (proj == pn_Start_P_value_arg_base && mode_is_reference(mode)) ||
-                       (proj == pn_Start_P_value_arg_base && mode == mode_T)    /* FIXME: only one of those */
+                       (proj == pn_Start_M              && mode == mode_M) ||
+                       (proj == pn_Start_P_frame_base   && mode_is_reference(mode)) ||
+                       (proj == pn_Start_P_tls          && mode_is_reference(mode)) ||
+                       (proj == pn_Start_T_args         && mode == mode_T)
                ),
                "wrong Proj from Start", 0,
                show_proj_failure(p);
@@ -318,7 +339,8 @@ static int verify_node_Proj_Start(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Cond) node
  */
-static int verify_node_Proj_Cond(ir_node *pred, ir_node *p) {
+static int verify_node_Proj_Cond(ir_node *pred, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -337,7 +359,8 @@ static int verify_node_Proj_Cond(ir_node *pred, ir_node *p) {
 /**
  * verify a Proj(Raise) node
  */
-static int verify_node_Proj_Raise(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Raise(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        (void) n;
@@ -353,18 +376,18 @@ static int verify_node_Proj_Raise(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(InstOf) node
  */
-static int verify_node_Proj_InstOf(ir_node *n, ir_node *p) {
+static int verify_node_Proj_InstOf(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        (void) n;
 
        ASSERT_AND_RET_DBG(
                (
-                       (proj == pn_InstOf_M_regular && mode == mode_M) ||
+                       (proj == pn_InstOf_M         && mode == mode_M) ||
                        (proj == pn_InstOf_X_regular && mode == mode_X) ||
                        (proj == pn_InstOf_X_except  && mode == mode_X) ||
-                       (proj == pn_InstOf_res       && mode_is_reference(mode)) ||
-                       (proj == pn_InstOf_M_except  && mode == mode_M)
+                       (proj == pn_InstOf_res       && mode_is_reference(mode))
                ),
                "wrong Proj from InstOf", 0,
                show_proj_failure(p);
@@ -375,17 +398,17 @@ static int verify_node_Proj_InstOf(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Call) node
  */
-static int verify_node_Proj_Call(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Call(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
        ASSERT_AND_RET_DBG(
                (
-                       (proj == pn_Call_M_regular        && mode == mode_M) ||
+                       (proj == pn_Call_M                && mode == mode_M) ||
                        (proj == pn_Call_X_regular        && mode == mode_X) ||
                        (proj == pn_Call_X_except         && mode == mode_X) ||
                        (proj == pn_Call_T_result         && mode == mode_T) ||
-                       (proj == pn_Call_M_except         && mode == mode_M) ||
                        (proj == pn_Call_P_value_res_base && mode_is_reference(mode))
                ),
                "wrong Proj from Call", 0,
@@ -400,17 +423,14 @@ static int verify_node_Proj_Call(ir_node *n, ir_node *p) {
                ASSERT_AND_RET(
                        !is_NoMem(get_Call_mem(n)),
                        "Exception Proj from FunctionCall", 0);
-       else if (proj == pn_Call_M_regular || proj == pn_Call_M_except)
-               ASSERT_AND_RET(
-                       (!is_NoMem(get_Call_mem(n)) || 1),
-                       "Memory Proj from FunctionCall", 0);
        return 1;
 }
 
 /**
  * verify a Proj(Quot) node
  */
-static int verify_node_Proj_Quot(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Quot(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -442,7 +462,8 @@ static int verify_node_Proj_Quot(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(DivMod) node
  */
-static int verify_node_Proj_DivMod(ir_node *n, ir_node *p) {
+static int verify_node_Proj_DivMod(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -475,7 +496,8 @@ static int verify_node_Proj_DivMod(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Div) node
  */
-static int verify_node_Proj_Div(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Div(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -507,7 +529,8 @@ static int verify_node_Proj_Div(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Mod) node
  */
-static int verify_node_Proj_Mod(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Mod(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -539,7 +562,8 @@ static int verify_node_Proj_Mod(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Cmp) node
  */
-static int verify_node_Proj_Cmp(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Cmp(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        (void) n;
@@ -560,7 +584,8 @@ static int verify_node_Proj_Cmp(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Load) node
  */
-static int verify_node_Proj_Load(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Load(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -610,7 +635,8 @@ static int verify_node_Proj_Load(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Store) node
  */
-static int verify_node_Proj_Store(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Store(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -638,7 +664,8 @@ static int verify_node_Proj_Store(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Alloc) node
  */
-static int verify_node_Proj_Alloc(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Alloc(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        (void) n;
@@ -659,7 +686,8 @@ static int verify_node_Proj_Alloc(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Proj) node
  */
-static int verify_node_Proj_Proj(ir_node *pred, ir_node *p) {
+static int verify_node_Proj_Proj(ir_node *pred, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
        long nr       = get_Proj_proj(pred);
@@ -690,15 +718,6 @@ static int verify_node_Proj_Proj(ir_node *pred, ir_node *p) {
                                                show_proj_mode_failure(p, get_method_param_type(mt, proj));
                                                );
                        }
-               } else if (nr == pn_Start_P_value_arg_base) {
-                       ASSERT_AND_RET(
-                               (proj >= 0 && mode_is_reference(mode)),
-                               "wrong Proj from Proj from Start", 0
-                               );
-                       ASSERT_AND_RET(
-                               (proj < get_method_n_params(mt)),
-                               "More Projs for args than args in type", 0
-                               );
                }
                break;
 
@@ -708,6 +727,8 @@ static int verify_node_Proj_Proj(ir_node *pred, ir_node *p) {
                                (proj >= 0 && mode_is_datab(mode)),
                                "wrong Proj from Proj from Call", 0);
                        mt = get_Call_type(pred);
+                       ASSERT_AND_RET(mt == get_unknown_type() || is_Method_type(mt),
+                                       "wrong call type on call", 0);
                        ASSERT_AND_RET(
                                (proj < get_method_n_ress(mt)),
                                "More Projs for results than results in type.", 0);
@@ -738,7 +759,8 @@ static int verify_node_Proj_Proj(ir_node *pred, ir_node *p) {
 /**
  * verify a Proj(Tuple) node
  */
-static int verify_node_Proj_Tuple(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Tuple(ir_node *n, ir_node *p)
+{
        (void) n;
        (void) p;
        /* We don't test */
@@ -748,7 +770,8 @@ static int verify_node_Proj_Tuple(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(CallBegin) node
  */
-static int verify_node_Proj_CallBegin(ir_node *n, ir_node *p) {
+static int verify_node_Proj_CallBegin(ir_node *n, ir_node *p)
+{
        (void) n;
        (void) p;
        return 1;
@@ -757,7 +780,8 @@ static int verify_node_Proj_CallBegin(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(EndReg) node
  */
-static int verify_node_Proj_EndReg(ir_node *n, ir_node *p) {
+static int verify_node_Proj_EndReg(ir_node *n, ir_node *p)
+{
        (void) n;
        (void) p;
 #ifdef INTERPROCEDURAL_VIEW
@@ -771,7 +795,8 @@ static int verify_node_Proj_EndReg(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(EndExcept) node
  */
-static int verify_node_Proj_EndExcept(ir_node *n, ir_node *p) {
+static int verify_node_Proj_EndExcept(ir_node *n, ir_node *p)
+{
        (void) n;
        (void) p;
 #ifdef INTERPROCEDURAL_VIEW
@@ -785,16 +810,16 @@ static int verify_node_Proj_EndExcept(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(CopyB) node
  */
-static int verify_node_Proj_CopyB(ir_node *n, ir_node *p) {
+static int verify_node_Proj_CopyB(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
        ASSERT_AND_RET_DBG(
                (
-                       (proj == pn_CopyB_M_regular && mode == mode_M) ||
+                       (proj == pn_CopyB_M         && mode == mode_M) ||
                        (proj == pn_CopyB_X_regular && mode == mode_X) ||
-                       (proj == pn_CopyB_X_except  && mode == mode_X) ||
-                       (proj == pn_CopyB_M_except  && mode == mode_M)
+                       (proj == pn_CopyB_X_except  && mode == mode_X)
                ),
                "wrong Proj from CopyB", 0,
                show_proj_failure(p);
@@ -813,7 +838,8 @@ static int verify_node_Proj_CopyB(ir_node *n, ir_node *p) {
 /**
  * verify a Proj(Bound) node
  */
-static int verify_node_Proj_Bound(ir_node *n, ir_node *p) {
+static int verify_node_Proj_Bound(ir_node *n, ir_node *p)
+{
        ir_mode *mode = get_irn_mode(p);
        long proj     = get_Proj_proj(p);
 
@@ -836,14 +862,14 @@ static int verify_node_Proj_Bound(ir_node *n, ir_node *p) {
 /**
  * verify a Proj node
  */
-static int
-verify_node_Proj(ir_node *p, ir_graph *irg) {
+static int verify_node_Proj(ir_node *p, ir_graph *irg)
+{
        ir_node *pred;
        ir_op *op;
-       (void) irg;
 
        pred = skip_Id(get_Proj_pred(p));
        ASSERT_AND_RET(get_irn_mode(pred) == mode_T, "mode of a 'projed' node is not Tuple", 0);
+       ASSERT_AND_RET(get_irg_pinned(irg) == op_pin_state_floats || get_nodes_block(pred) == get_nodes_block(p), "Proj must be in same block as its predecessor", 0);
 
        op = get_irn_op(pred);
 
@@ -857,7 +883,8 @@ verify_node_Proj(ir_node *p, ir_graph *irg) {
 /**
  * verify a Block node
  */
-static int verify_node_Block(ir_node *n, ir_graph *irg) {
+static int verify_node_Block(ir_node *n, ir_graph *irg)
+{
        int i;
        ir_node *mb = get_Block_MacroBlock(n);
 
@@ -889,7 +916,7 @@ static int verify_node_Block(ir_node *n, ir_graph *irg) {
        }
 
        for (i = get_Block_n_cfgpreds(n) - 1; i >= 0; --i) {
-               ir_node *pred =  get_Block_cfgpred(n, i);
+               ir_node *pred = get_Block_cfgpred(n, i);
                ASSERT_AND_RET(
                        is_Bad(pred) || (get_irn_mode(pred) == mode_X),
                        "Block node must have a mode_X predecessor", 0);
@@ -911,16 +938,15 @@ static int verify_node_Block(ir_node *n, ir_graph *irg) {
                                "End Block node", 0);
                }
                /*  irg attr must == graph we are in. */
-               if (! get_interprocedural_view()) {
-                       ASSERT_AND_RET(((get_irn_irg(n) && get_irn_irg(n) == irg)), "Block node has wrong irg attribute", 0);
-               }
+               ASSERT_AND_RET(((get_irn_irg(n) && get_irn_irg(n) == irg)), "Block node has wrong irg attribute", 0);
                return 1;
 }
 
 /**
  * verify a Start node
  */
-static int verify_node_Start(ir_node *n, ir_graph *irg) {
+static int verify_node_Start(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        (void) irg;
 
@@ -934,7 +960,8 @@ static int verify_node_Start(ir_node *n, ir_graph *irg) {
 /**
  * verify a Jmp node
  */
-static int verify_node_Jmp(ir_node *n, ir_graph *irg) {
+static int verify_node_Jmp(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        (void) irg;
 
@@ -948,7 +975,8 @@ static int verify_node_Jmp(ir_node *n, ir_graph *irg) {
 /**
  * verify an IJmp node
  */
-static int verify_node_IJmp(ir_node *n, ir_graph *irg) {
+static int verify_node_IJmp(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_IJmp_target(n));
        (void) irg;
@@ -963,7 +991,8 @@ static int verify_node_IJmp(ir_node *n, ir_graph *irg) {
 /**
  * verify a Break node
  */
-static int verify_node_Break(ir_node *n, ir_graph *irg) {
+static int verify_node_Break(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        (void) irg;
 
@@ -981,7 +1010,8 @@ static int verify_node_Break(ir_node *n, ir_graph *irg) {
 /**
  * verify a Cond node
  */
-static int verify_node_Cond(ir_node *n, ir_graph *irg) {
+static int verify_node_Cond(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Cond_selector(n));
        (void) irg;
@@ -1000,7 +1030,8 @@ static int verify_node_Cond(ir_node *n, ir_graph *irg) {
 /**
  * verify a Return node
  */
-static int verify_node_Return(ir_node *n, ir_graph *irg) {
+static int verify_node_Return(ir_node *n, ir_graph *irg)
+{
        int i;
        ir_mode *mymode   = get_irn_mode(n);
        ir_mode *mem_mode = get_irn_mode(get_Return_mem(n));
@@ -1044,7 +1075,8 @@ static int verify_node_Return(ir_node *n, ir_graph *irg) {
 /**
  * verify a Raise node
  */
-static int verify_node_Raise(ir_node *n, ir_graph *irg) {
+static int verify_node_Raise(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Raise_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Raise_exo_ptr(n));
@@ -1061,7 +1093,8 @@ static int verify_node_Raise(ir_node *n, ir_graph *irg) {
 /**
  * verify a Const node
  */
-static int verify_node_Const(ir_node *n, ir_graph *irg) {
+static int verify_node_Const(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        (void) irg;
 
@@ -1082,20 +1115,11 @@ static int verify_node_Const(ir_node *n, ir_graph *irg) {
 /**
  * verify a SymConst node
  */
-static int verify_node_SymConst(ir_node *n, ir_graph *irg) {
+static int verify_node_SymConst(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        (void) irg;
 
-       if (get_SymConst_kind(n) == symconst_addr_ent) {
-               ir_entity *ent = get_SymConst_entity(n);
-               if (is_Method_type(get_entity_type(ent)) &&
-                       get_irn_irg(n) != get_const_code_irg()) {
-#if 1
-                       ASSERT_AND_RET((get_entity_peculiarity(ent) != peculiarity_description),
-                               "A constant must address an existing method.", 0);
-#endif
-               }
-       }
        ASSERT_AND_RET(
                /* SymConst: BB --> int*/
                (mode_is_int(mymode) ||
@@ -1108,7 +1132,8 @@ static int verify_node_SymConst(ir_node *n, ir_graph *irg) {
 /**
  * verify a Sel node
  */
-static int verify_node_Sel(ir_node *n, ir_graph *irg) {
+static int verify_node_Sel(ir_node *n, ir_graph *irg)
+{
        int i;
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Sel_mem(n));
@@ -1133,7 +1158,8 @@ static int verify_node_Sel(ir_node *n, ir_graph *irg) {
 /**
  * verify an InstOf node
  */
-static int verify_node_InstOf(ir_node *n, ir_graph *irg) {
+static int verify_node_InstOf(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_InstOf_obj(n));
        (void) irg;
@@ -1146,7 +1172,8 @@ static int verify_node_InstOf(ir_node *n, ir_graph *irg) {
 /**
  * Check if the pinned state is right.
  */
-static int verify_right_pinned(ir_node *n) {
+static int verify_right_pinned(ir_node *n)
+{
        ir_node *mem;
 
        if (get_irn_pinned(n) == op_pin_state_pinned)
@@ -1162,7 +1189,8 @@ static int verify_right_pinned(ir_node *n) {
 /**
  * verify a Call node
  */
-static int verify_node_Call(ir_node *n, ir_graph *irg) {
+static int verify_node_Call(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Call_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Call_ptr(n));
@@ -1178,7 +1206,7 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) {
        ASSERT_AND_RET(verify_right_pinned(n),"Call node with wrong memory input", 0 );
 
        mt = get_Call_type(n);
-       if(get_unknown_type() == mt) {
+       if (get_unknown_type() == mt) {
                return 1;
        }
 
@@ -1194,16 +1222,16 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) {
                        get_Call_n_params(n) >= get_method_n_params(mt),
                        "Number of args for Call doesn't match number of args in variadic type.",
                        0,
-                       ir_fprintf(stderr, "Call %+F has %d params, method %s type %d\n",
-                       n, get_Call_n_params(n), get_type_name(mt), get_method_n_params(mt));
+                       ir_fprintf(stderr, "Call %+F has %d params, type %d\n",
+                       n, get_Call_n_params(n), get_method_n_params(mt));
                );
        } else {
                ASSERT_AND_RET_DBG(
                        get_Call_n_params(n) == get_method_n_params(mt),
                        "Number of args for Call doesn't match number of args in non variadic type.",
                        0,
-                       ir_fprintf(stderr, "Call %+F has %d params, method %s type %d\n",
-                       n, get_Call_n_params(n), get_type_name(mt), get_method_n_params(mt));
+                       ir_fprintf(stderr, "Call %+F has %d params, type %d\n",
+                       n, get_Call_n_params(n), get_method_n_params(mt));
                );
        }
 
@@ -1241,7 +1269,8 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) {
 /**
  * verify an Add node
  */
-static int verify_node_Add(ir_node *n, ir_graph *irg) {
+static int verify_node_Add(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Add_left(n));
        ir_mode *op2mode = get_irn_mode(get_Add_right(n));
@@ -1267,7 +1296,8 @@ static int verify_node_Add(ir_node *n, ir_graph *irg) {
 /**
  * verify a Sub node
  */
-static int verify_node_Sub(ir_node *n, ir_graph *irg) {
+static int verify_node_Sub(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Sub_left(n));
        ir_mode *op2mode = get_irn_mode(get_Sub_right(n));
@@ -1293,7 +1323,8 @@ static int verify_node_Sub(ir_node *n, ir_graph *irg) {
 /**
  * verify a Minus node
  */
-static int verify_node_Minus(ir_node *n, ir_graph *irg) {
+static int verify_node_Minus(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Minus_op(n));
        (void) irg;
@@ -1309,7 +1340,8 @@ static int verify_node_Minus(ir_node *n, ir_graph *irg) {
 /**
  * verify a Mul node
  */
-static int verify_node_Mul(ir_node *n, ir_graph *irg) {
+static int verify_node_Mul(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Mul_left(n));
        ir_mode *op2mode = get_irn_mode(get_Mul_right(n));
@@ -1333,7 +1365,8 @@ static int verify_node_Mul(ir_node *n, ir_graph *irg) {
 /**
  * verify a Mulh node
  */
-static int verify_node_Mulh(ir_node *n, ir_graph *irg) {
+static int verify_node_Mulh(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Mulh_left(n));
        ir_mode *op2mode = get_irn_mode(get_Mulh_right(n));
@@ -1353,7 +1386,8 @@ static int verify_node_Mulh(ir_node *n, ir_graph *irg) {
 /**
  * verify a Quot node
  */
-static int verify_node_Quot(ir_node *n, ir_graph *irg) {
+static int verify_node_Quot(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Quot_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Quot_left(n));
@@ -1374,7 +1408,8 @@ static int verify_node_Quot(ir_node *n, ir_graph *irg) {
 /**
  * verify a DivMod node
  */
-static int verify_node_DivMod(ir_node *n, ir_graph *irg) {
+static int verify_node_DivMod(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_DivMod_mem(n));
        ir_mode *op2mode = get_irn_mode(get_DivMod_left(n));
@@ -1395,7 +1430,8 @@ static int verify_node_DivMod(ir_node *n, ir_graph *irg) {
 /**
  * verify a Div node
  */
-static int verify_node_Div(ir_node *n, ir_graph *irg) {
+static int verify_node_Div(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Div_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Div_left(n));
@@ -1416,7 +1452,8 @@ static int verify_node_Div(ir_node *n, ir_graph *irg) {
 /**
  * verify a Mod node
  */
-static int verify_node_Mod(ir_node *n, ir_graph *irg) {
+static int verify_node_Mod(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Mod_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Mod_left(n));
@@ -1437,7 +1474,8 @@ static int verify_node_Mod(ir_node *n, ir_graph *irg) {
 /**
  * verify an Abs node
  */
-static int verify_node_Abs(ir_node *n, ir_graph *irg) {
+static int verify_node_Abs(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Abs_op(n));
        (void) irg;
@@ -1455,7 +1493,8 @@ static int verify_node_Abs(ir_node *n, ir_graph *irg) {
 /**
  * verify a logical And, Or, Eor node
  */
-static int verify_node_Logic(ir_node *n, ir_graph *irg) {
+static int verify_node_Logic(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_binop_left(n));
        ir_mode *op2mode = get_irn_mode(get_binop_right(n));
@@ -1479,7 +1518,8 @@ static int verify_node_Logic(ir_node *n, ir_graph *irg) {
 /**
  * verify a Not node
  */
-static int verify_node_Not(ir_node *n, ir_graph *irg) {
+static int verify_node_Not(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Not_op(n));
        (void) irg;
@@ -1497,7 +1537,8 @@ static int verify_node_Not(ir_node *n, ir_graph *irg) {
 /**
  * verify a Cmp node
  */
-static int verify_node_Cmp(ir_node *n, ir_graph *irg) {
+static int verify_node_Cmp(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Cmp_left(n));
        ir_mode *op2mode = get_irn_mode(get_Cmp_right(n));
@@ -1517,7 +1558,8 @@ static int verify_node_Cmp(ir_node *n, ir_graph *irg) {
 /**
  * verify a Shift node
  */
-static int verify_node_Shift(ir_node *n, ir_graph *irg) {
+static int verify_node_Shift(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_binop_left(n));
        ir_mode *op2mode = get_irn_mode(get_binop_right(n));
@@ -1542,7 +1584,8 @@ static int verify_node_Shift(ir_node *n, ir_graph *irg) {
 /**
  * verify a Rotl node
  */
-static int verify_node_Rotl(ir_node *n, ir_graph *irg) {
+static int verify_node_Rotl(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Rotl_left(n));
        ir_mode *op2mode = get_irn_mode(get_Rotl_right(n));
@@ -1562,7 +1605,8 @@ static int verify_node_Rotl(ir_node *n, ir_graph *irg) {
 /**
  * verify a Conv node
  */
-static int verify_node_Conv(ir_node *n, ir_graph *irg) {
+static int verify_node_Conv(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Conv_op(n));
        (void) irg;
@@ -1579,7 +1623,8 @@ static int verify_node_Conv(ir_node *n, ir_graph *irg) {
 /**
  * verify a Cast node
  */
-static int verify_node_Cast(ir_node *n, ir_graph *irg) {
+static int verify_node_Cast(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Cast_op(n));
        (void) irg;
@@ -1596,14 +1641,17 @@ static int verify_node_Cast(ir_node *n, ir_graph *irg) {
 /**
  * verify a Phi node
  */
-static int verify_node_Phi(ir_node *n, ir_graph *irg) {
+static int verify_node_Phi(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode = get_irn_mode(n);
        ir_node *block  = get_nodes_block(n);
        int i;
        (void) irg;
 
+       /* a Phi node MUST have the same number of inputs as its block
+        * Exception is a phi with 0 inputs which is used when (re)constructing the
+        * SSA form */
        if (! is_Bad(block) && get_irg_phase_state(get_irn_irg(n)) != phase_building && get_irn_arity(n) > 0) {
-               /* a Phi node MUST have the same number of inputs as its block */
                ASSERT_AND_RET_DBG(
                        get_irn_arity(n) == get_irn_arity(block),
                        "wrong number of inputs in Phi node", 0,
@@ -1655,7 +1703,8 @@ static int verify_node_Phi(ir_node *n, ir_graph *irg) {
 /**
  * verify a Filter node
  */
-static int verify_node_Filter(ir_node *n, ir_graph *irg) {
+static int verify_node_Filter(ir_node *n, ir_graph *irg)
+{
        (void) n;
        (void) irg;
 #ifdef INTERPROCEDURAL_VIEW
@@ -1669,7 +1718,8 @@ static int verify_node_Filter(ir_node *n, ir_graph *irg) {
 /**
  * verify a Load node
  */
-static int verify_node_Load(ir_node *n, ir_graph *irg) {
+static int verify_node_Load(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Load_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Load_ptr(n));
@@ -1701,7 +1751,8 @@ static int verify_node_Load(ir_node *n, ir_graph *irg) {
 /**
  * verify a Store node
  */
-static int verify_node_Store(ir_node *n, ir_graph *irg) {
+static int verify_node_Store(ir_node *n, ir_graph *irg)
+{
        ir_entity *target;
 
        ir_mode *mymode  = get_irn_mode(n);
@@ -1732,10 +1783,11 @@ static int verify_node_Store(ir_node *n, ir_graph *irg) {
 /**
  * verify an Alloc node
  */
-static int verify_node_Alloc(ir_node *n, ir_graph *irg) {
+static int verify_node_Alloc(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Alloc_mem(n));
-       ir_mode *op2mode = get_irn_mode(get_Alloc_size(n));
+       ir_mode *op2mode = get_irn_mode(get_Alloc_count(n));
        (void) irg;
 
        ASSERT_AND_RET_DBG(
@@ -1753,7 +1805,8 @@ static int verify_node_Alloc(ir_node *n, ir_graph *irg) {
 /**
  * verify a Free node
  */
-static int verify_node_Free(ir_node *n, ir_graph *irg) {
+static int verify_node_Free(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Free_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Free_ptr(n));
@@ -1775,7 +1828,8 @@ static int verify_node_Free(ir_node *n, ir_graph *irg) {
 /**
  * verify a Sync node
  */
-static int verify_node_Sync(ir_node *n, ir_graph *irg) {
+static int verify_node_Sync(ir_node *n, ir_graph *irg)
+{
        int i;
        ir_mode *mymode  = get_irn_mode(n);
        (void) irg;
@@ -1791,7 +1845,8 @@ static int verify_node_Sync(ir_node *n, ir_graph *irg) {
 /**
  * verify a Confirm node
  */
-static int verify_node_Confirm(ir_node *n, ir_graph *irg) {
+static int verify_node_Confirm(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Confirm_value(n));
        ir_mode *op2mode = get_irn_mode(get_Confirm_bound(n));
@@ -1810,7 +1865,8 @@ static int verify_node_Confirm(ir_node *n, ir_graph *irg) {
 /**
  * verify a Mux node
  */
-static int verify_node_Mux(ir_node *n, ir_graph *irg) {
+static int verify_node_Mux(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Mux_sel(n));
        ir_mode *op2mode = get_irn_mode(get_Mux_true(n));
@@ -1831,7 +1887,8 @@ static int verify_node_Mux(ir_node *n, ir_graph *irg) {
 /**
  * verify a CopyB node
  */
-static int verify_node_CopyB(ir_node *n, ir_graph *irg) {
+static int verify_node_CopyB(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_CopyB_mem(n));
        ir_mode *op2mode = get_irn_mode(get_CopyB_dst(n));
@@ -1858,7 +1915,8 @@ static int verify_node_CopyB(ir_node *n, ir_graph *irg) {
 /**
  * verify a Bound node
  */
-static int verify_node_Bound(ir_node *n, ir_graph *irg) {
+static int verify_node_Bound(ir_node *n, ir_graph *irg)
+{
        ir_mode *mymode  = get_irn_mode(n);
        ir_mode *op1mode = get_irn_mode(get_Bound_mem(n));
        ir_mode *op2mode = get_irn_mode(get_Bound_index(n));
@@ -1885,7 +1943,8 @@ static int verify_node_Bound(ir_node *n, ir_graph *irg) {
  *
  * @return non-zero on success, 0 on dominance error
  */
-static int check_dominance_for_node(ir_node *use) {
+static int check_dominance_for_node(ir_node *use)
+{
        if (is_Block(use)) {
                ir_node *mbh = get_Block_MacroBlock(use);
 
@@ -1931,29 +1990,35 @@ static int check_dominance_for_node(ir_node *use) {
 }
 
 /* Tests the modes of n and its predecessors. */
-int irn_vrfy_irg(ir_node *n, ir_graph *irg) {
+int irn_vrfy_irg(ir_node *n, ir_graph *irg)
+{
        int i;
        ir_op *op;
 
        if (!get_node_verification_mode())
                return 1;
 
-       if (!get_interprocedural_view()) {
-               /*
-                * do NOT check placement in interprocedural view, as we don't always know
-                * the "right" graph ...
-                */
-               ASSERT_AND_RET_DBG(
-                       node_is_in_irgs_storage(irg, n),
-                       "Node is not stored on proper IR graph!", 0,
-                       show_node_on_graph(irg, n);
-               );
-               assert(get_irn_irg(n) == irg);
-               {
-                       unsigned idx           = get_irn_idx(n);
-                       ir_node *node_from_map = get_idx_irn(irg, idx);
-                       ASSERT_AND_RET_DBG(node_from_map == n, "Node index and index map entry differ", 0, ir_printf("node %+F node in map %+F(%p)", n, node_from_map, node_from_map));
-               }
+       /*
+        * do NOT check placement in interprocedural view, as we don't always
+        * know the "right" graph ...
+        */
+
+#ifndef NDEBUG
+       /* this is an expensive check for large graphs (it has a quadratic
+        * runtime but with a small constant); so do NOT run it in release mode
+        */
+       ASSERT_AND_RET_DBG(
+               node_is_in_irgs_storage(irg, n),
+               "Node is not stored on proper IR graph!", 0,
+               show_node_on_graph(irg, n);
+       );
+#endif
+       assert(get_irn_irg(n) == irg);
+       {
+               unsigned idx           = get_irn_idx(n);
+               ir_node *node_from_map = get_idx_irn(irg, idx);
+               ASSERT_AND_RET_DBG(node_from_map == n, "Node index and index map entry differ", 0,
+                       ir_printf("node %+F node in map %+F(%p)\n", n, node_from_map, node_from_map));
        }
 
        op = get_irn_op(n);
@@ -1983,7 +2048,8 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg) {
        return 1;
 }
 
-int irn_vrfy(ir_node *n) {
+int irn_vrfy(ir_node *n)
+{
 #ifdef DEBUG_libfirm
        return irn_vrfy_irg(n, current_ir_graph);
 #else
@@ -2000,19 +2066,21 @@ int irn_vrfy(ir_node *n) {
 /**
  * Walker to check every node
  */
-static void vrfy_wrap(ir_node *node, void *env) {
+static void vrfy_wrap(ir_node *node, void *env)
+{
        int *res = env;
-       *res = irn_vrfy(node);
+       *res = irn_vrfy_irg(node, current_ir_graph);
 }
 
 /**
  * Walker to check every node including SSA property.
  * Only called if dominance info is available.
  */
-static void vrfy_wrap_ssa(ir_node *node, void *env) {
+static void vrfy_wrap_ssa(ir_node *node, void *env)
+{
        int *res = env;
 
-       *res = irn_vrfy(node);
+       *res = irn_vrfy_irg(node, current_ir_graph);
        if (*res) {
                *res = check_dominance_for_node(node);
        }
@@ -2025,7 +2093,8 @@ static void vrfy_wrap_ssa(ir_node *node, void *env) {
  * Graph must be in state "op_pin_state_pinned".
  * If dominance info is available, check the SSA property.
  */
-int irg_verify(ir_graph *irg, unsigned flags) {
+int irg_verify(ir_graph *irg, unsigned flags)
+{
        int res = 1;
 #ifdef DEBUG_libfirm
        ir_graph *rem;
@@ -2049,16 +2118,16 @@ int irg_verify(ir_graph *irg, unsigned flags) {
                NULL, &res
        );
 
-       current_ir_graph = rem;
-
        if (get_node_verification_mode() == FIRM_VERIFICATION_REPORT && ! res) {
-               ir_entity *ent = get_irg_entity(current_ir_graph);
+               ir_entity *ent = get_irg_entity(irg);
 
                if (ent)
                        fprintf(stderr, "irg_verify: Verifying graph %s failed\n", get_entity_name(ent));
                else
-                       fprintf(stderr, "irg_verify: Verifying graph %p failed\n", (void *)current_ir_graph);
+                       fprintf(stderr, "irg_verify: Verifying graph %p failed\n", (void *)irg);
        }
+
+       current_ir_graph = rem;
 #else
        (void)irg;
        (void)flags;
@@ -2067,7 +2136,41 @@ int irg_verify(ir_graph *irg, unsigned flags) {
        return res;
 }
 
-int irn_vrfy_irg_dump(ir_node *n, ir_graph *irg, const char **bad_string) {
+struct pass_t {
+       ir_graph_pass_t pass;
+       unsigned        flags;
+};
+
+/**
+ * Wrapper to irg_verify to be run as an ir_graph pass.
+ */
+static int irg_verify_wrapper(ir_graph *irg, void *context)
+{
+       struct pass_t *pass = context;
+       irg_verify(irg, pass->flags);
+       /* do NOT rerun the pass if verify is ok :-) */
+       return 0;
+}
+
+/* Creates an ir_graph pass for irg_verify(). */
+ir_graph_pass_t *irg_verify_pass(const char *name, unsigned flags)
+{
+       struct pass_t *pass = XMALLOCZ(struct pass_t);
+
+       def_graph_pass_constructor(
+               &pass->pass, name ? name : "irg_verify", irg_verify_wrapper);
+
+       /* neither dump for verify */
+       pass->pass.dump_irg   = (DUMP_ON_IRG_FUNC)ir_prog_no_dump;
+       pass->pass.verify_irg = (RUN_ON_IRG_FUNC)ir_prog_no_verify;
+
+       pass->flags = flags;
+       return &pass->pass;
+}
+
+/* create a verify pass */
+int irn_vrfy_irg_dump(ir_node *n, ir_graph *irg, const char **bad_string)
+{
        int res;
        firm_verification_t old = get_node_verification_mode();
 
@@ -2092,7 +2195,8 @@ typedef struct _vrfy_bad_env_t {
 /**
  * Pre-Walker: check Bad predecessors of node.
  */
-static void check_bads(ir_node *node, void *env) {
+static void check_bads(ir_node *node, void *env)
+{
        vrfy_bad_env_t *venv = env;
        int i, arity = get_irn_arity(node);
 
@@ -2188,7 +2292,8 @@ static void check_bads(ir_node *node, void *env) {
 /*
  * verify occurrence of bad nodes
  */
-int irg_vrfy_bads(ir_graph *irg, int flags) {
+int irg_vrfy_bads(ir_graph *irg, int flags)
+{
        vrfy_bad_env_t env;
 
        env.flags = flags;
@@ -2202,7 +2307,8 @@ int irg_vrfy_bads(ir_graph *irg, int flags) {
 /*
  * set the default verify operation
  */
-void firm_set_default_verifyer(ir_opcode code, ir_op_ops *ops) {
+void firm_set_default_verifyer(ir_opcode code, ir_op_ops *ops)
+{
 #define CASE(a)                           \
    case iro_##a:                          \
      ops->verify_node  = verify_node_##a; \