X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_manage.c;h=ab9dc08c186d40992d7d83185a10aabaaaa310c3;hb=8c9921a1fc166552f6e416434fd8394a4fc210a3;hp=327595ce3dc9b41c7f6c99c49c311208719fc3cd;hpb=3bb47464dc990c9def630a208a12da1bdd035bbb;p=libfirm diff --git a/ir/opt/opt_manage.c b/ir/opt/opt_manage.c index 327595ce3..ab9dc08c1 100644 --- a/ir/opt/opt_manage.c +++ b/ir/opt/opt_manage.c @@ -25,11 +25,15 @@ void perform_irg_optimization(ir_graph *irg, optdesc_t *opt) 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) @@ -57,13 +61,14 @@ void perform_irg_optimization(ir_graph *irg, optdesc_t *opt) 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));