X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Freturn.c;h=572ba2b787260b4f057e1d79f2e435337ea49481;hb=8057f671ea7f286a27e40bfe1aa45d85e0990cbe;hp=7c8353618243331b14c9e63a1e98a3c1149bc797;hpb=f44be6a4377eac8569ada904bb94b293dfe0e365;p=libfirm diff --git a/ir/opt/return.c b/ir/opt/return.c index 7c8353618..572ba2b78 100644 --- a/ir/opt/return.c +++ b/ir/opt/return.c @@ -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. */