From 05e35241bb3b12d3d4d556813c336bd95a9404dd Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 10 Jul 2007 15:54:05 +0000 Subject: [PATCH] improved fixpoint iteration for optimize_graph_df() [r15010] --- ir/ir/irgopt.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) 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); } } -- 2.20.1