Simplify x87_dump_stack().
[libfirm] / ir / opt / return.c
index 7c83536..572ba2b 100644 (file)
@@ -21,7 +21,6 @@
  * @file
  * @brief   Normalize returns.
  * @author  Michael Beck
- * @version $Id$
  */
 #include "config.h"
 
@@ -75,6 +74,8 @@ void normalize_one_return(ir_graph *irg)
        if (n <= 0) {
                /* The end block has no predecessors, we have an endless
                   loop. In that case, no returns exists. */
+               confirm_irg_properties(irg, IR_GRAPH_PROPERTIES_ALL);
+               add_irg_properties(irg, IR_GRAPH_PROPERTY_ONE_RETURN);
                return;
        }
 
@@ -100,8 +101,11 @@ void normalize_one_return(ir_graph *irg)
                }
        }
 
-       if (n_rets <= 1)
+       if (n_rets <= 1) {
+               confirm_irg_properties(irg, IR_GRAPH_PROPERTIES_ALL);
+               add_irg_properties(irg, IR_GRAPH_PROPERTY_ONE_RETURN);
                return;
+       }
 
        in       = ALLOCAN(ir_node*, MAX(n_rets, n_ret_vals));
        retvals  = ALLOCAN(ir_node*, n_rets * n_ret_vals);
@@ -142,10 +146,14 @@ void normalize_one_return(ir_graph *irg)
 
        /* invalidate analysis information:
         * a new Block was added, so dominator, outs and loop are inconsistent,
-        * trouts and callee-state should be still valid
-        */
-       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
-                          | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
+        * trouts and callee-state should be still valid */
+       confirm_irg_properties(irg,
+               IR_GRAPH_PROPERTY_NO_BADS
+               | IR_GRAPH_PROPERTY_NO_TUPLES
+               | IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES
+               | IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE
+               | IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE);
+       add_irg_properties(irg, IR_GRAPH_PROPERTY_ONE_RETURN);
 }
 
 /* Create a graph pass. */
@@ -188,7 +196,7 @@ static bool can_move_ret(ir_node *ret)
        /* check, that predecessors are Jmps */
        n = get_Block_n_cfgpreds(retbl);
        /* we cannot move above a labeled block, as this might kill the block */
-       if (n <= 1 || has_Block_entity(retbl))
+       if (n <= 1 || get_Block_entity(retbl) != NULL)
                return false;
        for (i = 0; i < n; ++i) {
                ir_node *pred = get_Block_cfgpred(retbl, i);
@@ -265,8 +273,11 @@ void normalize_n_returns(ir_graph *irg)
                }
        }
 
-       if (n_rets == 0)
+       if (n_rets == 0) {
+               confirm_irg_properties(irg, IR_GRAPH_PROPERTIES_ALL);
+               add_irg_properties(irg, IR_GRAPH_PROPERTY_MANY_RETURNS);
                return;
+       }
 
        /*
         * Now move the Returns upwards. We move always one block up (and create n
@@ -361,13 +372,11 @@ void normalize_n_returns(ir_graph *irg)
        /* Invalidate analysis information:
         * Blocks become dead and new Returns were deleted, so dominator, outs and
         * loop are inconsistent, trouts and callee-state should be still valid */
-       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
-                          | IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE
-                          | IR_GRAPH_STATE_ONE_RETURN
-                          | IR_GRAPH_STATE_CONSISTENT_OUTS
-                          | IR_GRAPH_STATE_NO_UNREACHABLE_CODE
-                          | IR_GRAPH_STATE_NO_BADS
-                          | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
+       confirm_irg_properties(irg,
+               IR_GRAPH_PROPERTY_NO_TUPLES
+               | IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES
+               | IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE);
+       add_irg_properties(irg, IR_GRAPH_PROPERTY_MANY_RETURNS);
 }
 
 /* Create a graph pass. */