X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgraph.c;h=0686a1cd33680b3ac8f5a46863bb4250a28b344b;hb=560ed5a4e3236d933413ad4863c123d77c807429;hp=7d266e4f1a79e7399205277520d16d0e2038c0f4;hpb=b519dd6a1e6d85e843eff533be787d1f138a07ff;p=libfirm diff --git a/ir/ir/irgraph.c b/ir/ir/irgraph.c index 7d266e4f1..0686a1cd3 100644 --- a/ir/ir/irgraph.c +++ b/ir/ir/irgraph.c @@ -842,6 +842,29 @@ void set_irg_fp_model(ir_graph *irg, unsigned model) { irg->fp_model = model; } +/** + * walker Start->End: places Proj nodes into the same block + * as it's predecessors + * + * @param n the node + * @param env ignored + */ +static void normalize_proj_walker(ir_node *n, void *env) { + (void) env; + if (is_Proj(n)) { + ir_node *pred = get_Proj_pred(n); + ir_node *block = get_nodes_block(pred); + + set_nodes_block(n, block); + } +} + +/* move Proj nodes into the same block as its predecessors */ +void normalize_proj_nodes(ir_graph *irg) { + irg_walk_graph(irg, NULL, normalize_proj_walker, NULL); + set_irg_outs_inconsistent(irg); +} + /* set a description for local value n */ void set_irg_loc_description(ir_graph *irg, int n, void *description) { assert(0 <= n && n < irg->n_loc);