X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgmod.c;h=0a06562804b2c9222c7fec8f308a8600a47e2a2b;hb=20a054e20083e0b0e996aceabf561254c663277a;hp=3d6cd6dabf0142394b7472572e71ae1ece6bf142;hpb=1ec30d95387eb392ba5a1adc7958ebd91383d59c;p=libfirm diff --git a/ir/ir/irgmod.c b/ir/ir/irgmod.c index 3d6cd6dab..0a0656280 100644 --- a/ir/ir/irgmod.c +++ b/ir/ir/irgmod.c @@ -125,6 +125,7 @@ void exchange(ir_node *old, ir_node *nw) { */ static void collect(ir_node *n, void *env) { ir_node *pred; + (void) env; if (is_Phi(n)) { set_irn_link(n, get_irn_link(get_nodes_block(n))); @@ -209,12 +210,21 @@ void part_block(ir_node *node) { set_irn_link(new_block, phi); set_irn_link(old_block, NULL); while (phi) { - if(get_nodes_block(phi) == old_block); /* @@@ inlinening chokes on phis that don't - obey this condition. How do they get into - the list??? Example: InterfaceIII */ set_nodes_block(phi, new_block); phi = get_irn_link(phi); } set_optimize(rem_opt); } + +/* kill a node by setting its predecessors to Bad and finally exchange the node by Bad itself. */ +void kill_node(ir_node *node) { + ir_graph *irg = get_irn_irg(node); + ir_node *bad = get_irg_bad(irg); + int i; + + for (i = get_irn_arity(node) - 1; i >= -1; --i) { + set_irn_n(node, i, bad); + } + exchange(node, bad); +}