improved fixpoint iteration for optimize_graph_df()
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 10 Jul 2007 15:54:05 +0000 (15:54 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 10 Jul 2007 15:54:05 +0000 (15:54 +0000)
[r15010]

ir/ir/irgopt.c

index 8e306ec..cad60d6 100644 (file)
@@ -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);
        }
 }