no need for pointless comments
[libfirm] / ir / ir / irvrfy.c
index ca5d031..b9b28b0 100644 (file)
@@ -28,7 +28,6 @@
 #include "irprog.h"
 #include "irop_t.h"
 #include "irgraph_t.h"
-#include "ircgcons.h"
 #include "irvrfy_t.h"
 #include "irgwalk.h"
 #include "irdump.h"
@@ -36,6 +35,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 +43,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 +53,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 +68,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 +86,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 +100,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 +112,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 +129,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 +144,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 +163,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 +178,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 +247,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 +262,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 +275,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 +287,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 +302,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 +315,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,10 +324,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_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);
@@ -316,7 +338,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);
 
@@ -335,7 +358,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;
@@ -351,18 +375,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);
@@ -373,17 +397,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,
@@ -398,17 +422,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);
 
@@ -440,7 +461,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);
 
@@ -473,7 +495,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);
 
@@ -505,7 +528,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);
 
@@ -537,7 +561,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;
@@ -558,7 +583,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);
 
@@ -608,7 +634,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);
 
@@ -636,7 +663,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;
@@ -657,7 +685,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);
@@ -697,6 +726,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);
@@ -727,63 +758,27 @@ 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 */
        return 1;
 }
 
-/**
- * verify a Proj(CallBegin) node
- */
-static int verify_node_Proj_CallBegin(ir_node *n, ir_node *p) {
-       (void) n;
-       (void) p;
-       return 1;
-}
-
-/**
- * verify a Proj(EndReg) node
- */
-static int verify_node_Proj_EndReg(ir_node *n, ir_node *p) {
-       (void) n;
-       (void) p;
-#ifdef INTERPROCEDURAL_VIEW
-       ASSERT_AND_RET(
-               (get_irp_ip_view_state() != ip_view_no),
-               "EndReg may only appear if ip view is constructed.", 0);
-#endif
-       return 1;
-}
-
-/**
- * verify a Proj(EndExcept) node
- */
-static int verify_node_Proj_EndExcept(ir_node *n, ir_node *p) {
-       (void) n;
-       (void) p;
-#ifdef INTERPROCEDURAL_VIEW
-       ASSERT_AND_RET(
-               (get_irp_ip_view_state() != ip_view_no),
-               "EndExcept may only appear if ip view is constructed.", 0);
-#endif
-       return 1;
-}
-
 /**
  * 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);
@@ -802,7 +797,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);
 
@@ -825,8 +821,8 @@ 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;
 
@@ -846,7 +842,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);
 
@@ -878,7 +875,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);
@@ -900,16 +897,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;
 
@@ -923,7 +919,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;
 
@@ -937,7 +934,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;
@@ -949,28 +947,11 @@ static int verify_node_IJmp(ir_node *n, ir_graph *irg) {
        return 1;
 }
 
-/**
- * verify a Break node
- */
-static int verify_node_Break(ir_node *n, ir_graph *irg) {
-       ir_mode *mymode = get_irn_mode(n);
-       (void) irg;
-
-#ifdef INTERPROCEDURAL_VIEW
-       ASSERT_AND_RET((get_irp_ip_view_state() != ip_view_no),
-               "Break may only appear if ip view is constructed.", 0);
-#endif
-       ASSERT_AND_RET(
-               /* Jmp: BB --> X */
-               mymode == mode_X, "Break node", 0
-       );
-       return 1;
-}
-
 /**
  * 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;
@@ -989,7 +970,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));
@@ -1033,7 +1015,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));
@@ -1050,7 +1033,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;
 
@@ -1071,20 +1055,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) ||
@@ -1097,7 +1072,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));
@@ -1122,7 +1098,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;
@@ -1135,7 +1112,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)
@@ -1151,7 +1129,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));
@@ -1167,7 +1146,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;
        }
 
@@ -1183,16 +1162,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));
                );
        }
 
@@ -1230,7 +1209,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));
@@ -1256,7 +1236,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));
@@ -1282,7 +1263,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;
@@ -1298,7 +1280,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));
@@ -1322,7 +1305,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));
@@ -1342,7 +1326,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));
@@ -1363,7 +1348,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));
@@ -1384,7 +1370,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));
@@ -1405,7 +1392,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));
@@ -1426,7 +1414,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;
@@ -1444,7 +1433,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));
@@ -1468,7 +1458,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;
@@ -1486,7 +1477,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));
@@ -1506,7 +1498,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));
@@ -1531,7 +1524,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));
@@ -1551,7 +1545,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;
@@ -1568,7 +1563,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;
@@ -1585,14 +1581,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,
@@ -1641,24 +1640,11 @@ static int verify_node_Phi(ir_node *n, ir_graph *irg) {
        return 1;
 }
 
-/**
- * verify a Filter node
- */
-static int verify_node_Filter(ir_node *n, ir_graph *irg) {
-       (void) n;
-       (void) irg;
-#ifdef INTERPROCEDURAL_VIEW
-       ASSERT_AND_RET((get_irp_ip_view_state() != ip_view_no),
-               "Filter may only appear if ip view is constructed.", 0);
-#endif
-       /* We should further do tests as for Proj and Phi. */
-       return 1;
-}
-
 /**
  * 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));
@@ -1690,7 +1676,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);
@@ -1721,10 +1708,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(
@@ -1742,7 +1730,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));
@@ -1764,7 +1753,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;
@@ -1780,7 +1770,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));
@@ -1799,7 +1790,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));
@@ -1820,7 +1812,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));
@@ -1835,7 +1828,7 @@ static int verify_node_CopyB(ir_node *n, ir_graph *irg) {
        }
 
        ASSERT_AND_RET(
-               is_compound_type(t),
+               is_compound_type(t) || is_Array_type(t),
                "CopyB node should copy compound types only", 0 );
 
        /* NoMem nodes are only allowed as memory input if the CopyB is NOT pinned.
@@ -1847,7 +1840,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));
@@ -1874,7 +1868,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);
 
@@ -1920,35 +1915,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 ...
-                */
+       /*
+        * do NOT check placement in interprocedural view, as we don't always
+        * know the "right" graph ...
+        */
 
 #ifndef NDEBUG
-               /* this seems to be an expensive check in VS compile (9% over all runtime),
-                  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);
-               );
+       /* 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));
-               }
+       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);
@@ -1978,7 +1973,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
@@ -1995,19 +1991,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);
        }
@@ -2020,7 +2018,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;
@@ -2044,16 +2043,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;
@@ -2062,7 +2061,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();
 
@@ -2087,7 +2120,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);
 
@@ -2105,7 +2139,7 @@ static void check_bads(ir_node *node, void *env) {
                                                fprintf(stderr, "irg_vrfy_bads: Block %ld has Bad predecessor\n", get_irn_node_nr(node));
                                        }
                                        if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                               dump_ir_block_graph_sched(current_ir_graph, "-assert");
+                                               dump_ir_graph(current_ir_graph, "-assert");
                                                assert(0 && "Bad CF detected");
                                        }
                                }
@@ -2122,7 +2156,7 @@ static void check_bads(ir_node *node, void *env) {
                                        fprintf(stderr, "irg_vrfy_bads: node %ld has Bad Block\n", get_irn_node_nr(node));
                                }
                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
+                                       dump_ir_graph(current_ir_graph, "-assert");
                                        assert(0 && "Bad CF detected");
                                }
                        }
@@ -2136,7 +2170,7 @@ static void check_bads(ir_node *node, void *env) {
                                        fprintf(stderr, "irg_vrfy_bads: node %ld is a Tuple\n", get_irn_node_nr(node));
                                }
                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
+                                       dump_ir_graph(current_ir_graph, "-assert");
                                        assert(0 && "Tuple detected");
                                }
                        }
@@ -2157,7 +2191,7 @@ static void check_bads(ir_node *node, void *env) {
                                                        fprintf(stderr, "irg_vrfy_bads: Phi %ld has Bad Input\n", get_irn_node_nr(node));
                                                }
                                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
+                                                       dump_ir_graph(current_ir_graph, "-assert");
                                                        assert(0 && "Bad CF detected");
                                                }
                                        }
@@ -2171,7 +2205,7 @@ static void check_bads(ir_node *node, void *env) {
                                                fprintf(stderr, "irg_vrfy_bads: node %ld has Bad Input\n", get_irn_node_nr(node));
                                        }
                                        if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                               dump_ir_block_graph_sched(current_ir_graph, "-assert");
+                                               dump_ir_graph(current_ir_graph, "-assert");
                                                assert(0 && "Bad NON-CF detected");
                                        }
                                }
@@ -2183,7 +2217,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;
@@ -2197,7 +2232,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; \
@@ -2209,7 +2245,6 @@ void firm_set_default_verifyer(ir_opcode code, ir_op_ops *ops) {
        CASE(Start);
        CASE(Jmp);
        CASE(IJmp);
-       CASE(Break);
        CASE(Cond);
        CASE(Return);
        CASE(Raise);
@@ -2240,7 +2275,6 @@ void firm_set_default_verifyer(ir_opcode code, ir_op_ops *ops) {
        CASE(Conv);
        CASE(Cast);
        CASE(Phi);
-       CASE(Filter);
        CASE(Load);
        CASE(Store);
        CASE(Alloc);
@@ -2276,9 +2310,6 @@ void firm_set_default_verifyer(ir_opcode code, ir_op_ops *ops) {
        CASE(Alloc);
        CASE(Proj);
        CASE(Tuple);
-       CASE(CallBegin);
-       CASE(EndReg);
-       CASE(EndExcept);
        CASE(CopyB);
        CASE(Bound);
        default: