added flag to turn off vrfy
[libfirm] / ir / ir / irvrfy.c
index e51f4b7..435b277 100644 (file)
 /* @@@ replace use of array "in" by access functions. */
 ir_node **get_irn_in(ir_node *node);
 
+bool opt_do_node_verification = 1;
+void do_node_verification(bool b) {
+  opt_do_node_verification = b;
+}
+
+
 INLINE static int
 vrfy_Proj_proj(ir_node *p, ir_graph *irg) {
   ir_node *pred;
@@ -245,6 +251,8 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg)
 
   ir_node **in;
 
+  if (!opt_do_node_verification) return 1;
+
   if (! interprocedural_view) {
     /*
      * do NOT check placement in interprocedural view, as we don't always know
@@ -273,7 +281,10 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg)
     case iro_Block:
       for (i = 0; i < get_Block_n_cfgpreds(n); ++i) {
        ir_node *pred =  get_Block_cfgpred(n, i);
-       ASSERT_AND_RET((is_Bad(pred) || get_irn_op(pred) == op_Unknown || (get_irn_mode(pred) == mode_X)), "Block node", 0);
+       ASSERT_AND_RET((is_Bad(pred)                     ||
+                       (get_irn_op(pred) == op_Unknown) ||
+                       (get_irn_mode(pred) == mode_X)     ),
+                      "Block node", 0);
       }
       // End block may only have Return, Raise or fragile ops as preds.
       if (n == get_irg_end_block(irg))
@@ -287,6 +298,11 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg)
                          is_fragile_op(pred)               ),
                         "End Block node", 0);
        }
+      // irg attr must == graph we are in.
+      if (! interprocedural_view) {
+       ASSERT_AND_RET(((get_irn_irg(n) && get_irn_irg(n) == irg)), "", 0);
+      }
+
       break;
 
     case iro_Start: