dump addr of nodes, depending on flag
[libfirm] / ir / ir / irvrfy.c
index 9138d98..e51f4b7 100644 (file)
@@ -120,11 +120,26 @@ vrfy_Proj_proj(ir_node *p, ir_graph *irg) {
       break;
 
     case iro_Load:
-      ASSERT_AND_RET(
-          ((proj == 0 && mode == mode_M) ||
-           (proj == 1 && mode == mode_X) ||
-           (proj == 2 && mode_is_data(mode))),
-          "wrong Proj from Load", 0);
+      if (proj == pn_Load_res) {
+       ir_node *ptr = get_Load_ptr(pred);
+       entity *ent = NULL;
+       if (get_irn_op(ptr) == op_Sel) {
+         ent = get_Sel_entity(ptr);
+       } else if ((get_irn_op(ptr) == op_Const) &&
+                  tarval_is_entity(get_Const_tarval(ptr))) {
+         ent = get_tarval_entity(get_Const_tarval(ptr));
+       }
+       if (ent)
+         ASSERT_AND_RET((mode == get_type_mode(get_entity_type(ent))),
+                        "wrong data Proj from Load", 0);
+       else
+         ASSERT_AND_RET(mode_is_data(mode),
+                        "wrong data Proj from Load", 0);
+      } else {
+       ASSERT_AND_RET(((proj == pn_Load_M        && mode == mode_M) ||
+                       (proj == pn_Load_X_except && mode == mode_X)),
+                      "wrong Proj from Load", 0);
+      }
       break;
 
     case iro_Store:
@@ -258,7 +273,7 @@ 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_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))