X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Frm_tuples.c;h=ad4d6b1dde762cb8a758b943ec3b9a7b50ae8b1b;hb=b59e22a229aa1227ef992c184c79fdafe34908cf;hp=951a42a83b8285809f6539296576c7114c56e5cc;hpb=02f098c997643c82451cd29b6c44d8a75cb4d8d8;p=libfirm diff --git a/ir/ir/rm_tuples.c b/ir/ir/rm_tuples.c index 951a42a83..ad4d6b1dd 100644 --- a/ir/ir/rm_tuples.c +++ b/ir/ir/rm_tuples.c @@ -39,9 +39,9 @@ */ static void exchange_tuple_projs(ir_node *node, void *env) { - bool *changed = (bool*)env; ir_node *pred; int proj; + (void)env; if (!is_Proj(node)) return; @@ -52,12 +52,23 @@ static void exchange_tuple_projs(ir_node *node, void *env) pred = get_Tuple_pred(pred, proj); exchange(node, pred); - *changed = true; } -int remove_tuples(ir_graph *irg) +void remove_tuples(ir_graph *irg) { - bool changed = 0; - irg_walk_graph(irg, exchange_tuple_projs, NULL, &changed); - return changed; + irg_walk_graph(irg, exchange_tuple_projs, NULL, NULL); + + ir_node *end = get_irg_end(irg); + int n_keepalives = get_End_n_keepalives(end); + int i; + + for (i = n_keepalives - 1; i >= 0; --i) { + ir_node *irn = get_End_keepalive(end, i); + + if (is_Tuple(irn)) { + remove_End_keepalive(end, irn); + } + } + + add_irg_properties(irg, IR_GRAPH_PROPERTY_NO_TUPLES); }