From: Michael Beck Date: Tue, 10 Jul 2007 15:54:05 +0000 (+0000) Subject: improved fixpoint iteration for optimize_graph_df() X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=05e35241bb3b12d3d4d556813c336bd95a9404dd;p=libfirm improved fixpoint iteration for optimize_graph_df() [r15010] --- diff --git a/ir/ir/irgopt.c b/ir/ir/irgopt.c index 8e306ec9e..cad60d63a 100644 --- a/ir/ir/irgopt.c +++ b/ir/ir/irgopt.c @@ -169,13 +169,19 @@ static void enqueue_users(ir_node *n, pdeq *waitq) { static void opt_walker(ir_node *n, void *env) { pdeq *waitq = env; ir_node *optimized; + ir_node *oldn = n; + + for (;;) { + optimized = optimize_in_place_2(n); + set_irn_link(optimized, NULL); + if (optimized == n) + break; + n = optimized; + } - optimized = optimize_in_place_2(n); - set_irn_link(optimized, NULL); - - if (optimized != n) { - enqueue_users(n, waitq); - exchange(n, optimized); + if (optimized != oldn) { + enqueue_users(oldn, waitq); + exchange(oldn, optimized); } }