- int start, i, res, irn_arity;
-
- mark_irn_visited(n);
- n->out = (ir_def_use_edge*) INT_TO_PTR(1); /* Space for array size. */
-
- start = is_Block(n) ? 0 : -1;
- irn_arity = get_irn_arity(n);
- res = irn_arity - start + 1; /* --1 or --0; 1 for array size. */
-
- for (i = start; i < irn_arity; ++i) {
- /* Optimize Tuples. They annoy if walking the cfg. */
- 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_visited(skipped_pred))
- res += _count_outs(skipped_pred);
-
- /*count my Def-Use edges */
- skipped_pred->out = (ir_def_use_edge*) INT_TO_PTR(PTR_TO_INT(skipped_pred->out) + 1);
+ if (irn_visited_else_mark(n))
+ return;
+
+ /* initialize our counter */
+ n->o.n_outs = 0;
+
+ int start = is_Block(n) ? 0 : -1;
+ int irn_arity = get_irn_arity(n);
+ for (int i = start; i < irn_arity; ++i) {
+ ir_node *def = get_irn_n(n, i);
+ /* optimize Tuples */
+ ir_node *skipped = skip_Tuple(def);
+ if (skipped != def)
+ set_irn_n(n, i, skipped);
+
+ count_outs_node(skipped);
+ ++skipped->o.n_outs;