Fixed optimization of Div/Mod/DivMod nodes
[libfirm] / ir / ir / irvrfy.c
index bd3ce5d..7851fec 100644 (file)
@@ -3,7 +3,7 @@
  * File name:   ir/ir/irvrfy.c
  * Purpose:     Check irnodes for correctness.
  * Author:      Christian Schaefer
- * Modified by: Goetz Lindenmaier. Till Riedel
+ * Modified by: Goetz Lindenmaier. Till Riedel. Michael Beck.
  * Created:
  * CVS-ID:      $Id$
  * Copyright:   (c) 1998-2003 Universität Karlsruhe
@@ -25,9 +25,6 @@
 /** if this flag is set, verify entity types in Load & Store nodes */
 static int vrfy_entities = 0;
 
-/* @@@ replace use of array "in" by access functions. */
-ir_node **get_irn_in(ir_node *node);
-
 node_verification_t opt_do_node_verification = NODE_VERIFICATION_ON;
 const char *firm_vrfy_failure_msg;
 
@@ -390,12 +387,12 @@ static int verify_node_Proj_Call(ir_node *n, ir_node *p) {
   );
   if (proj == pn_Call_X_except)
     ASSERT_AND_RET(
-      get_irn_pinned(n) == op_pin_state_pinned,
-      "Exception Proj from unpinned Call", 0);
+      get_irn_op(get_Call_mem(n)) != op_NoMem,
+      "Exception Proj from FunctionCall", 0);
   else if (proj == pn_Call_M_regular || proj == pn_Call_M_except)
     ASSERT_AND_RET(
-      get_irn_pinned(n) == op_pin_state_pinned,
-      "Memory Proj from unpinned Call", 0);
+      (get_irn_op(get_Call_mem(n)) != op_NoMem || 1),
+      "Memory Proj from FunctionCall", 0);
   return 1;
 }
 
@@ -786,6 +783,20 @@ static int verify_node_Jmp(ir_node *n, ir_graph *irg) {
   return 1;
 }
 
+/**
+ * verify an IJmp node
+ */
+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));
+
+  ASSERT_AND_RET(
+    /* IJmp: BB x ref --> X */
+    mymode == mode_X && mode_is_reference(op1mode), "IJmp node", 0
+  );
+  return 1;
+}
+
 /**
  * verify a Break node
  */
@@ -969,7 +980,7 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) {
 
   /* NoMem nodes are only allowed as memory input if the Call is NOT pinned */
   ASSERT_AND_RET(
-    (get_irn_op(get_Call_mem(n)) == op_NoMem && get_irn_pinned(n) != op_pin_state_pinned) ||
+    (get_irn_op(get_Call_mem(n)) == op_NoMem) ||
     (get_irn_op(get_Call_mem(n)) != op_NoMem && get_irn_pinned(n) == op_pin_state_pinned),
     "Call node with wrong memory input", 0 );
 
@@ -1775,6 +1786,7 @@ void firm_set_default_verifyer(ir_op *op)
    CASE(Block);
    CASE(Start);
    CASE(Jmp);
+   CASE(IJmp);
    CASE(Break);
    CASE(Cond);
    CASE(Return);