small optimisation (avoids edges_notify_edge)
authorMatthias Braun <matze@braunis.de>
Fri, 1 Aug 2008 10:44:33 +0000 (10:44 +0000)
committerMatthias Braun <matze@braunis.de>
Fri, 1 Aug 2008 10:44:33 +0000 (10:44 +0000)
[r20892]

ir/ana/irouts.c

index 825bd31..2f1d43e 100644 (file)
@@ -309,15 +309,19 @@ static int _count_outs(ir_node *n) {
 
        for (i = start; i < irn_arity; ++i) {
                /* Optimize Tuples.  They annoy if walking the cfg. */
-               ir_node *pred = skip_Tuple(get_irn_n(n, i));
-               set_irn_n(n, i, pred);
+               ir_node *pred         = get_irn_n(n, i);
+               ir_node *skipped_pred = skip_Tuple(pred);
+
+               if (skipped_pred != pred) {
+                       set_irn_n(n, i, skipped_pred);
+               }
 
                /* count Def-Use edges for predecessors */
-               if (irn_not_visited(pred))
-                       res += _count_outs(pred);
+               if (irn_not_visited(skipped_pred))
+                       res += _count_outs(skipped_pred);
 
                /*count my Def-Use edges */
-               pred->out = INT_TO_PTR(PTR_TO_INT(pred->out) + 1);
+               skipped_pred->out = INT_TO_PTR(PTR_TO_INT(skipped_pred->out) + 1);
        }
        return res;
 }