ir_graph_state_t required = opt->requirements;
const bool dump = get_irp_optimization_dumps();
+ /* It does not make sense to require both: */
+ assert (!((required & IR_GRAPH_STATE_ONE_RETURN) && (required & IR_GRAPH_STATE_MANY_RETURNS)));
+
/* assure that all requirements for the optimization are fulfilled */
#define PREPARE(st,func) if (st & (required ^ irg->state)) {func(irg); set_irg_state(irg,st);}
PREPARE(IR_GRAPH_STATE_ONE_RETURN, normalize_one_return)
+ PREPARE(IR_GRAPH_STATE_MANY_RETURNS, normalize_n_returns)
PREPARE(IR_GRAPH_STATE_NO_CRITICAL_EDGES, remove_critical_cf_edges)
- PREPARE(IR_GRAPH_STATE_NO_UNREACHABLE_CODE, remove_unreachable_blocks)
+ PREPARE(IR_GRAPH_STATE_NO_UNREACHABLE_CODE, remove_unreachable_code)
PREPARE(IR_GRAPH_STATE_NO_BADS, remove_bads)
PREPARE(IR_GRAPH_STATE_CONSISTENT_DOMINANCE, assure_doms)
PREPARE(IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE, assure_postdoms)
INVALIDATE(IR_GRAPH_STATE_NO_UNREACHABLE_CODE, nop)
INVALIDATE(IR_GRAPH_STATE_NO_BADS, nop)
INVALIDATE(IR_GRAPH_STATE_ONE_RETURN, nop)
+ INVALIDATE(IR_GRAPH_STATE_MANY_RETURNS, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_DOMINANCE, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUTS, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUT_EDGES, edges_deactivate)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_LOOPINFO, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE, nop)
- INVALIDATE(IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS, set_irg_extblk_inconsistent)
+ INVALIDATE(IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS, nop)
remove_End_Bads_and_doublets(get_irg_end(irg));