rename tarval to ir_tarval
[libfirm] / ir / ana / callgraph.c
index 068cbe6..65a6c2f 100644 (file)
  */
 #include "config.h"
 
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-# ifdef HAVE_STDLIB_H
+#include <string.h>
 #include <stdlib.h>
-#endif
 
 #include "callgraph.h"
 
 static ir_visited_t master_cg_visited = 0;
 static inline int cg_irg_visited      (ir_graph *n);
 static inline void mark_cg_irg_visited(ir_graph *n);
-static inline void set_cg_irg_visited (ir_graph *n, ir_visited_t i);
 
 /** Returns the callgraph state of the program representation. */
-irp_callgraph_state get_irp_callgraph_state(void) {
+irp_callgraph_state get_irp_callgraph_state(void)
+{
        return irp->callgraph_state;
 }
 
 /* Sets the callgraph state of the program representation. */
-void set_irp_callgraph_state(irp_callgraph_state s) {
+void set_irp_callgraph_state(irp_callgraph_state s)
+{
        irp->callgraph_state = s;
 }
 
 /* Returns the number of procedures that call the given irg. */
-int get_irg_n_callers(ir_graph *irg) {
+int get_irg_n_callers(const ir_graph *irg)
+{
        if (irg->callers) return ARR_LEN(irg->callers);
        return -1;
 }
 
 /* Returns the caller at position pos. */
-ir_graph *get_irg_caller(ir_graph *irg, int pos) {
+ir_graph *get_irg_caller(const ir_graph *irg, int pos)
+{
        assert(pos >= 0 && pos < get_irg_n_callers(irg));
        if (irg->callers) return irg->callers[pos];
        return NULL;
 }
 
 /* Returns non-zero if the caller at position pos is "a backedge", i.e. a recursion. */
-int is_irg_caller_backedge(ir_graph *irg, int pos) {
+int is_irg_caller_backedge(const ir_graph *irg, int pos)
+{
        assert(pos >= 0 && pos < get_irg_n_callers(irg));
        return irg->caller_isbe != NULL ? rbitset_is_set(irg->caller_isbe, pos) : 0;
 }
 
 /** Search the caller in the list of all callers and set it's backedge property. */
-static void set_irg_caller_backedge(ir_graph *irg, ir_graph *caller) {
+static void set_irg_caller_backedge(ir_graph *irg, ir_graph *caller)
+{
        int i, n_callers = get_irg_n_callers(irg);
 
        /* allocate a new array on demand */
@@ -100,7 +101,8 @@ static void set_irg_caller_backedge(ir_graph *irg, ir_graph *caller) {
 }
 
 /* Returns non-zero if the irg has a backedge caller. */
-int has_irg_caller_backedge(ir_graph *irg) {
+int has_irg_caller_backedge(const ir_graph *irg)
+{
        int i, n_callers = get_irg_n_callers(irg);
 
        if (irg->caller_isbe != NULL) {
@@ -116,7 +118,8 @@ int has_irg_caller_backedge(ir_graph *irg) {
  * Given the position pos_caller of an caller of irg, return
  * irg's callee position on that caller.
  */
-static int reverse_pos(ir_graph *callee, int pos_caller) {
+static int reverse_pos(const ir_graph *callee, int pos_caller)
+{
        ir_graph *caller = get_irg_caller(callee, pos_caller);
        /* search the other relation for the corresponding edge. */
        int pos_callee = -1;
@@ -134,7 +137,8 @@ static int reverse_pos(ir_graph *callee, int pos_caller) {
 }
 
 /* Returns the maximal loop depth of call nodes that call along this edge. */
-int get_irg_caller_loop_depth(ir_graph *irg, int pos) {
+int get_irg_caller_loop_depth(const ir_graph *irg, int pos)
+{
        ir_graph *caller     = get_irg_caller(irg, pos);
        int       pos_callee = reverse_pos(irg, pos);
 
@@ -143,26 +147,30 @@ int get_irg_caller_loop_depth(ir_graph *irg, int pos) {
 
 
 /* Returns the number of procedures that are called by the given irg. */
-int get_irg_n_callees(ir_graph *irg) {
+int get_irg_n_callees(const ir_graph *irg)
+{
        if (irg->callees) return ARR_LEN(irg->callees);
        return -1;
 }
 
 /* Returns the callee at position pos. */
-ir_graph *get_irg_callee(ir_graph *irg, int pos) {
+ir_graph *get_irg_callee(const ir_graph *irg, int pos)
+{
        assert(pos >= 0 && pos < get_irg_n_callees(irg));
        if (irg->callees) return irg->callees[pos]->irg;
        return NULL;
 }
 
 /* Returns non-zero if the callee at position pos is "a backedge", i.e. a recursion. */
-int is_irg_callee_backedge(ir_graph *irg, int pos) {
+int is_irg_callee_backedge(const ir_graph *irg, int pos)
+{
        assert(pos >= 0 && pos < get_irg_n_callees(irg));
        return irg->callee_isbe != NULL ? rbitset_is_set(irg->callee_isbe, pos) : 0;
 }
 
 /* Returns non-zero if the irg has a backedge callee. */
-int has_irg_callee_backedge(ir_graph *irg) {
+int has_irg_callee_backedge(const ir_graph *irg)
+{
        int i, n_callees = get_irg_n_callees(irg);
 
        if (irg->callee_isbe != NULL) {
@@ -176,7 +184,8 @@ int has_irg_callee_backedge(ir_graph *irg) {
 /**
  * Mark the callee at position pos as a backedge.
  */
-static void set_irg_callee_backedge(ir_graph *irg, int pos) {
+static void set_irg_callee_backedge(ir_graph *irg, int pos)
+{
        int n = get_irg_n_callees(irg);
 
        /* allocate a new array on demand */
@@ -187,14 +196,15 @@ static void set_irg_callee_backedge(ir_graph *irg, int pos) {
 }
 
 /* Returns the maximal loop depth of call nodes that call along this edge. */
-int get_irg_callee_loop_depth(ir_graph *irg, int pos) {
+int get_irg_callee_loop_depth(const ir_graph *irg, int pos)
+{
        assert(pos >= 0 && pos < get_irg_n_callees(irg));
        if (irg->callees) return irg->callees[pos]->max_depth;
        return -1;
 }
 
-
-double get_irg_callee_execution_frequency(ir_graph *irg, int pos) {
+static double get_irg_callee_execution_frequency(const ir_graph *irg, int pos)
+{
        ir_node **arr = irg->callees[pos]->call_list;
        int i, n_Calls = ARR_LEN(arr);
        double freq = 0.0;
@@ -205,14 +215,17 @@ double get_irg_callee_execution_frequency(ir_graph *irg, int pos) {
        return freq;
 }
 
-double get_irg_callee_method_execution_frequency(ir_graph *irg, int pos) {
+static double get_irg_callee_method_execution_frequency(const ir_graph *irg,
+                                                        int pos)
+{
        double call_freq = get_irg_callee_execution_frequency(irg, pos);
        double meth_freq = get_irg_method_execution_frequency(irg);
        return call_freq * meth_freq;
 }
 
-
-double get_irg_caller_method_execution_frequency(ir_graph *irg, int pos) {
+static double get_irg_caller_method_execution_frequency(const ir_graph *irg,
+                                                        int pos)
+{
        ir_graph *caller     = get_irg_caller(irg, pos);
        int       pos_callee = reverse_pos(irg, pos);
 
@@ -220,13 +233,13 @@ double get_irg_caller_method_execution_frequency(ir_graph *irg, int pos) {
 }
 
 
-
 /* --------------------- Compute the callgraph ------------------------ */
 
 /**
  * Walker called by compute_callgraph(), analyses all Call nodes.
  */
-static void ana_Call(ir_node *n, void *env) {
+static void ana_Call(ir_node *n, void *env)
+{
        int i, n_callees;
        ir_graph *irg;
        (void) env;
@@ -253,7 +266,7 @@ static void ana_Call(ir_node *n, void *env) {
                                ARR_APP1(ir_node *, arr, n);
                                found->call_list = arr;
                        } else { /* New node, add Call node and init nesting. */
-                               found = (cg_callee_entry *)obstack_alloc(irg->obst, sizeof(*found));
+                               found = OALLOC(irg->obst, cg_callee_entry);
                                found->irg = callee;
                                found->call_list = NEW_ARR_F(ir_node *, 1);
                                found->call_list[0] = n;
@@ -267,14 +280,16 @@ static void ana_Call(ir_node *n, void *env) {
 }
 
 /** compare two ir graphs in a cg_callee_entry */
-static int cg_callee_entry_cmp(const void *elt, const void *key) {
+static int cg_callee_entry_cmp(const void *elt, const void *key)
+{
        const cg_callee_entry *e1 = elt;
        const cg_callee_entry *e2 = key;
        return e1->irg != e2->irg;
 }
 
 /** compare two ir graphs for pointer identity */
-static int graph_cmp(const void *elt, const void *key) {
+static int graph_cmp(const void *elt, const void *key)
+{
        const ir_graph *e1 = elt;
        const ir_graph *e2 = key;
        return e1 != e2;
@@ -282,13 +297,10 @@ static int graph_cmp(const void *elt, const void *key) {
 
 
 /* Construct and destruct the callgraph. */
-void compute_callgraph(void) {
+void compute_callgraph(void)
+{
        int i, n_irgs;
 
-#ifdef INTERPROCEDURAL_VIEW
-       assert(! get_interprocedural_view());  /* Else walking will not reach the Call nodes. */
-#endif
-
        /* initialize */
        free_callgraph();
 
@@ -343,7 +355,8 @@ void compute_callgraph(void) {
 }
 
 /* Destruct the callgraph. */
-void free_callgraph(void) {
+void free_callgraph(void)
+{
        int i, n_irgs = get_irp_n_irgs();
        for (i = 0; i < n_irgs; ++i) {
                ir_graph *irg = get_irp_irg(i);
@@ -364,7 +377,8 @@ void free_callgraph(void) {
 /* ----------------------------------------------------------------------------------- */
 
 
-static void do_walk(ir_graph *irg, callgraph_walk_func *pre, callgraph_walk_func *post, void *env) {
+static void do_walk(ir_graph *irg, callgraph_walk_func *pre, callgraph_walk_func *post, void *env)
+{
        int i, n_callees;
 
        if (cg_irg_visited(irg))
@@ -384,7 +398,8 @@ static void do_walk(ir_graph *irg, callgraph_walk_func *pre, callgraph_walk_func
                post(irg, env);
 }
 
-void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env) {
+void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env)
+{
        int i, n_irgs = get_irp_n_irgs();
        ++master_cg_visited;
 
@@ -431,77 +446,87 @@ typedef struct scc_info {
 /**
  * allocates a new scc_info on the obstack
  */
-static inline scc_info *new_scc_info(struct obstack *obst) {
-       scc_info *info = obstack_alloc(obst, sizeof(*info));
-       memset(info, 0, sizeof(*info));
-       return info;
+static inline scc_info *new_scc_info(struct obstack *obst)
+{
+       return OALLOCZ(obst, scc_info);
 }
 
 /**
  * Returns non-zero if a graph was already visited.
  */
-static inline int cg_irg_visited(ir_graph *irg) {
+static inline int cg_irg_visited(ir_graph *irg)
+{
        return irg->self_visited >= master_cg_visited;
 }
 
 /**
  * Marks a graph as visited.
  */
-static inline void mark_cg_irg_visited(ir_graph *irg) {
+static inline void mark_cg_irg_visited(ir_graph *irg)
+{
        irg->self_visited = master_cg_visited;
 }
 
 /**
  * Set a graphs visited flag to i.
  */
-static inline void set_cg_irg_visited(ir_graph *irg, ir_visited_t i) {
+static inline void set_cg_irg_visited(ir_graph *irg, ir_visited_t i)
+{
        irg->self_visited = i;
 }
 
 /**
  * Returns the visited flag of a graph.
  */
-static inline ir_visited_t get_cg_irg_visited(ir_graph *irg) {
+static inline ir_visited_t get_cg_irg_visited(ir_graph *irg)
+{
        return irg->self_visited;
 }
 
-static inline void mark_irg_in_stack(ir_graph *irg) {
+static inline void mark_irg_in_stack(ir_graph *irg)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        info->in_stack = 1;
 }
 
-static inline void mark_irg_not_in_stack(ir_graph *irg) {
+static inline void mark_irg_not_in_stack(ir_graph *irg)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        info->in_stack = 0;
 }
 
-static inline int irg_is_in_stack(ir_graph *irg) {
+static inline int irg_is_in_stack(ir_graph *irg)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        return info->in_stack;
 }
 
-static inline void set_irg_uplink(ir_graph *irg, int uplink) {
+static inline void set_irg_uplink(ir_graph *irg, int uplink)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        info->uplink = uplink;
 }
 
-static inline int get_irg_uplink(ir_graph *irg) {
+static inline int get_irg_uplink(ir_graph *irg)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        return info->uplink;
 }
 
-static inline void set_irg_dfn(ir_graph *irg, int dfn) {
+static inline void set_irg_dfn(ir_graph *irg, int dfn)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        info->dfn = dfn;
 }
 
-static inline int get_irg_dfn(ir_graph *irg) {
+static inline int get_irg_dfn(ir_graph *irg)
+{
        scc_info *info = get_irg_link(irg);
        assert(info && "missing call to init_scc()");
        return info->dfn;
@@ -517,7 +542,8 @@ static int tos = 0;                /**< top of stack */
 /**
  * Initialize the irg stack.
  */
-static inline void init_stack(void) {
+static inline void init_stack(void)
+{
        if (stack) {
                ARR_RESIZE(ir_graph *, stack, 1000);
        } else {
@@ -530,7 +556,8 @@ static inline void init_stack(void) {
  * push a graph on the irg stack
  * @param n the graph to be pushed
  */
-static inline void push(ir_graph *irg) {
+static inline void push(ir_graph *irg)
+{
        if (tos == ARR_LEN(stack)) {
                int nlen = ARR_LEN(stack) * 2;
                ARR_RESIZE(ir_node *, stack, nlen);
@@ -542,7 +569,8 @@ static inline void push(ir_graph *irg) {
 /**
  * return the topmost graph on the stack and pop it
  */
-static inline ir_graph *pop(void) {
+static inline ir_graph *pop(void)
+{
        ir_graph *irg = stack[--tos];
        mark_irg_not_in_stack(irg);
        return irg;
@@ -552,7 +580,8 @@ static inline ir_graph *pop(void) {
  * The nodes up to irg belong to the current loop.
  * Removes them from the stack and adds them to the current loop.
  */
-static inline void pop_scc_to_loop(ir_graph *irg) {
+static inline void pop_scc_to_loop(ir_graph *irg)
+{
        ir_graph *m;
 
        do {
@@ -562,13 +591,14 @@ static inline void pop_scc_to_loop(ir_graph *irg) {
                add_loop_irg(current_loop, m);
                m->l = current_loop;
                //m->callgraph_loop_depth = current_loop->depth;
-       } while(m != irg);
+       } while (m != irg);
 }
 
 /* GL ??? my last son is my grandson???  Removes cfloops with no
    ir_nodes in them.  Such loops have only another loop as son. (Why
    can't they have two loops as sons? Does it never get that far? ) */
-static void close_loop(ir_loop *l) {
+static void close_loop(ir_loop *l)
+{
        int last = get_loop_n_elements(l) - 1;
        loop_element lelement = get_loop_element(l, last);
        ir_loop *last_son = lelement.son;
@@ -594,7 +624,8 @@ static void close_loop(ir_loop *l) {
  * Removes and unmarks all nodes up to n from the stack.
  * The nodes must be visited once more to assign them to a scc.
  */
-static inline void pop_scc_unmark_visit(ir_graph *n) {
+static inline void pop_scc_unmark_visit(ir_graph *n)
+{
        ir_graph *m = NULL;
 
        while (m != n) {
@@ -611,7 +642,8 @@ static inline void pop_scc_unmark_visit(ir_graph *n) {
  * Allocates a new loop as son of current_loop.  Sets current_loop
  * to the new loop and returns the father.
  */
-static ir_loop *new_loop(void) {
+static ir_loop *new_loop(void)
+{
        ir_loop *father = current_loop;
        ir_loop *son    = alloc_loop(father, outermost_ir_graph->obst);
 
@@ -626,7 +658,8 @@ static ir_loop *new_loop(void) {
 
 /* Initialization steps. **********************************************/
 
-static void init_scc(struct obstack *obst) {
+static void init_scc(struct obstack *obst)
+{
        int i;
        int n_irgs;
 
@@ -648,7 +681,8 @@ static void init_scc(struct obstack *obst) {
  *
  *  @param root: only needed for assertion.
  */
-static int is_head(ir_graph *n, ir_graph *root) {
+static int is_head(ir_graph *n, ir_graph *root)
+{
        int i, arity;
        int some_outof_loop = 0, some_in_loop = 0;
 
@@ -666,12 +700,12 @@ static int is_head(ir_graph *n, ir_graph *root) {
                }
        }
 
-       return some_outof_loop & some_in_loop;
+       return some_outof_loop && some_in_loop;
 }
 
 /**
  * Returns non-zero if n is possible loop head of an endless loop.
- * I.e., it is a Block, Phi or Filter node and has only predecessors
+ * I.e., it is a Block or Phi node and has only predecessors
  * within the loop.
  * @arg root: only needed for assertion.
  */
@@ -695,45 +729,8 @@ static int is_endless_head(ir_graph *n, ir_graph *root)
                        some_in_loop = 1;
                }
        }
-       return !some_outof_loop & some_in_loop;
-}
-
-#ifdef INTERPROCEDURAL_VIEW
-/**
- * Check whether there is a parallel edge in the ip control flow.
- * Only
- */
-static int is_ip_head(ir_graph *n, ir_graph *pred)
-{
-       int is_be = 0;
-
-       int iv_rem = get_interprocedural_view();
-       set_interprocedural_view(1);
-       {
-               ir_node *sblock = get_irg_start_block(n);
-               int i, arity = get_Block_n_cfgpreds(sblock);
-
-               //printf(" edge from "); DDMG(n);
-               //printf(" to pred   "); DDMG(pred);
-               //printf(" sblock    "); DDMN(sblock);
-
-               for (i = 0; i < arity; i++) {
-                       ir_node *pred_cfop = skip_Proj(get_Block_cfgpred(sblock, i));
-                       //printf("  "); DDMN(pred_cfop);
-                       if (is_CallBegin(pred_cfop)) { /* could be Unknown */
-                               ir_graph *ip_pred = get_irn_irg(pred_cfop);
-                               //printf("   "); DDMG(ip_pred);
-                               if ((ip_pred == pred) && is_backedge(sblock, i)) {
-                                       //printf("   found\n");
-                                       is_be = 1;
-                               }
-                       }
-               }
-       }
-       set_interprocedural_view(iv_rem);
-       return is_be;
+       return !some_outof_loop && some_in_loop;
 }
-#endif /* INTERPROCEDURAL_VIEW */
 
 /**
  * Returns index of the predecessor with the smallest dfn number
@@ -758,7 +755,8 @@ static int smallest_dfn_pred(ir_graph *n, int limit)
 }
 
 /** Returns index of the predecessor with the largest dfn number. */
-static int largest_dfn_pred(ir_graph *n) {
+static int largest_dfn_pred(ir_graph *n)
+{
        int i, index = -2, max = -1;
 
        int arity = get_irg_n_callees(n);
@@ -774,8 +772,8 @@ static int largest_dfn_pred(ir_graph *n) {
        return index;
 }
 
-#ifndef INTERPROCEDURAL_VIEW
-static ir_graph *find_tail(ir_graph *n) {
+static ir_graph *find_tail(ir_graph *n)
+{
        ir_graph *m;
        int i, res_index = -2;
 
@@ -834,81 +832,14 @@ static ir_graph *find_tail(ir_graph *n) {
        set_irg_callee_backedge(m, res_index);
        return get_irg_callee(m, res_index);
 }
-#else
-static ir_graph *find_tail(ir_graph *n) {
-       ir_graph *m;
-       int i, res_index = -2;
-
-       ir_graph *res;
-       ir_graph *in_and_out    = NULL;
-       ir_graph *only_in       = NULL;
-       ir_graph *ip_in_and_out = NULL;
-       ir_graph *ip_only_in    = NULL;
-
-       //printf("find tail for "); DDMG(n);
-
-       for (i = tos-1; i >= 0; --i) {
-               ir_graph *pred = (i < tos -1) ? stack[i+1] : n;
-               m = stack[i];
-
-               if (is_head(m, n)) {
-                       //printf(" found 1a! "); DDM;
-                       in_and_out = m;
-                       if (is_ip_head(pred, m)) {
-                               //printf(" found 1b! "); DDM;
-                               ip_in_and_out = m;
-                       }
-               } else if (!ip_only_in && is_endless_head(m, n)) {
-                       only_in = m;
-                       //printf(" found 2a! "); DDM;
-                       if (is_ip_head(pred, m)) {
-                               //printf(" found 2b! "); DDM;
-                               ip_only_in = m;
-                       }
-               } else if (is_ip_head(pred, m)) {
-                       //printf(" found 3! "); DDM;   This happens for self recursions in the second
-                       //assert(0);                   scc iteration (the one to flip the loop.)
-               }
-
-               if (ip_in_and_out) break;    /* That's what we really want. */
-
-               if (m == n) break;   /* Don't walk past n on the stack! */
-       }
-
-
-       if (!in_and_out && !only_in)
-               /* There is no loop */
-               return NULL;
-
-
-       /* Is there a head in the callgraph without a head in the
-          ip cf graph? */
-       assert(in_and_out || only_in);
-
-       m = (ip_in_and_out) ? ip_in_and_out : ip_only_in;
-
-       if (!m)
-               m = (in_and_out) ? in_and_out : only_in;
-
-       //printf("*** head is "); DDMG(m);
-
-       res_index = smallest_dfn_pred(m, get_irg_dfn(m) + 1);
-       if (res_index == -2)  /* no smallest dfn pred found. */
-               res_index = largest_dfn_pred(m);
-
-       set_irg_callee_backedge(m, res_index);
-       res = get_irg_callee(m, res_index);
-       //printf("*** tail is "); DDMG(res);
-       return res;
-}
-#endif /* INTERPROCEDURAL_VIEW */
 
 /*-----------------------------------------------------------*
  *                   The core algorithm.                     *
  *-----------------------------------------------------------*/
 
 
-static void cgscc(ir_graph *n) {
+static void cgscc(ir_graph *n)
+{
        int i, arity;
 
        if (cg_irg_visited(n)) return;
@@ -929,7 +860,7 @@ static void cgscc(ir_graph *n) {
                /** This marks the backedge, but does it guarantee a correct loop tree? */
                //if (m == n) { set_irg_callee_backedge(n, i); continue; }
 
-               cgscc (m);
+               cgscc(m);
                if (irg_is_in_stack(m)) {
                        /* Uplink of m is smaller if n->m is a backedge.
                           Propagate the uplink to mark the cfloop. */
@@ -982,7 +913,8 @@ static void cgscc(ir_graph *n) {
 /**
  * reset the backedge information for all callers in all irgs
  */
-static void reset_isbe(void) {
+static void reset_isbe(void)
+{
        int i, n_irgs = get_irp_n_irgs();
 
        for (i = 0; i < n_irgs; ++i) {
@@ -1004,7 +936,8 @@ static void reset_isbe(void) {
 /* weight. Assign graphs the maximal depth.                                            */
 /* ----------------------------------------------------------------------------------- */
 
-static void compute_loop_depth(ir_graph *irg, void *env) {
+static void compute_loop_depth(ir_graph *irg, void *env)
+{
        int current_nesting = *(int *) env;
        int old_nesting = irg->callgraph_loop_depth;
        ir_visited_t old_visited = get_cg_irg_visited(irg);
@@ -1016,9 +949,6 @@ static void compute_loop_depth(ir_graph *irg, void *env) {
 
        mark_cg_irg_visited(irg);
 
-       //printf(" old: %d new %d master %d", old_visited, get_cg_irg_visited(irg), master_cg_visited); DDMG(irg);
-
-
        if (old_nesting < current_nesting)
                irg->callgraph_loop_depth = current_nesting;
 
@@ -1058,7 +988,8 @@ typedef struct ana_entry2 {
 /**
  * push a loop entry on the stack
  */
-static void push2(ana_entry2 *e, ir_loop *g) {
+static void push2(ana_entry2 *e, ir_loop *g)
+{
        if (ARR_LEN(e->loop_stack) == e->tos) {
                ARR_APP1(ir_loop *, e->loop_stack, g);
        } else {
@@ -1070,14 +1001,16 @@ static void push2(ana_entry2 *e, ir_loop *g) {
 /**
  * returns the top of stack and pop it
  */
-static ir_loop *pop2(ana_entry2 *e) {
+static ir_loop *pop2(ana_entry2 *e)
+{
        return e->loop_stack[--e->tos];
 }
 
 /**
  * check if a loop g in on the stack. Did not check the TOS.
  */
-static int in_stack(ana_entry2 *e, ir_loop *g) {
+static int in_stack(ana_entry2 *e, ir_loop *g)
+{
        int i;
        for (i = e->tos-1; i >= 0; --i) {
                if (e->loop_stack[i] == g) return 1;
@@ -1085,7 +1018,8 @@ static int in_stack(ana_entry2 *e, ir_loop *g) {
        return 0;
 }
 
-static void compute_rec_depth(ir_graph *irg, void *env) {
+static void compute_rec_depth(ir_graph *irg, void *env)
+{
        ana_entry2 *e = (ana_entry2 *)env;
        ir_loop *l = irg->l;
        int depth, old_depth = irg->callgraph_recursion_depth;
@@ -1137,7 +1071,8 @@ static void compute_rec_depth(ir_graph *irg, void *env) {
 /* ----------------------------------------------------------------------------------- */
 
 /* Returns the method execution frequency of a graph. */
-double get_irg_method_execution_frequency(ir_graph *irg) {
+double get_irg_method_execution_frequency(const ir_graph *irg)
+{
        return irg->method_execution_frequency;
 }
 
@@ -1145,14 +1080,16 @@ double get_irg_method_execution_frequency(ir_graph *irg) {
  * Increase the method execution frequency to freq if its current value is
  * smaller then this.
  */
-static void set_irg_method_execution_frequency(ir_graph *irg, double freq) {
+static void set_irg_method_execution_frequency(ir_graph *irg, double freq)
+{
        irg->method_execution_frequency = freq;
 
        if (irp->max_method_execution_frequency < freq)
                irp->max_method_execution_frequency = freq;
 }
 
-static void compute_method_execution_frequency(ir_graph *irg, void *env) {
+static void compute_method_execution_frequency(ir_graph *irg, void *env)
+{
        int i, n_callers;
        double freq;
        int    found_edge;
@@ -1209,8 +1146,9 @@ static void compute_method_execution_frequency(ir_graph *irg, void *env) {
 /* ----------------------------------------------------------------------------------- */
 
 /* Compute the backedges that represent recursions. */
-void find_callgraph_recursions(void) {
-       int i, n_irgs = get_irp_n_irgs();
+void find_callgraph_recursions(void)
+{
+       int i, n_irgs;
        struct obstack temp;
 
        reset_isbe();
@@ -1231,6 +1169,7 @@ void find_callgraph_recursions(void) {
 
        ++master_cg_visited;
        cgscc(outermost_ir_graph);
+       n_irgs = get_irp_n_irgs();
        for (i = 0; i < n_irgs; ++i) {
                ir_graph *irg = get_irp_irg(i);
                if (!cg_irg_visited(irg) && get_irg_n_callers(irg) == 0)
@@ -1260,7 +1199,8 @@ void find_callgraph_recursions(void) {
 }
 
 /* Compute interprocedural performance estimates. */
-void compute_performance_estimates(void) {
+void compute_performance_estimates(void)
+{
        int i, n_irgs = get_irp_n_irgs();
        int current_nesting;
        ana_entry2 e;
@@ -1271,21 +1211,18 @@ void compute_performance_estimates(void) {
        current_nesting = 0;
        irp->max_callgraph_loop_depth = 0;
        master_cg_visited += 2;
-       //printf(" ** starting at      "); DDMG(get_irp_main_irg());
        compute_loop_depth(get_irp_main_irg(), &current_nesting);
        for (i = 0; i < n_irgs; i++) {
                ir_graph *irg = get_irp_irg(i);
                if ((get_cg_irg_visited(irg) < master_cg_visited-1) &&
                        get_irg_n_callers(irg) == 0) {
                                compute_loop_depth(irg, &current_nesting);
-                               //printf(" ** starting at      "); DDMG(irg);
                }
        }
        for (i = 0; i < n_irgs; i++) {
                ir_graph *irg = get_irp_irg(i);
                if (get_cg_irg_visited(irg) < master_cg_visited-1) {
                        compute_loop_depth(irg, &current_nesting);
-                       //printf(" ** starting at      "); DDMG(irg);
                }
        }
 
@@ -1299,20 +1236,17 @@ void compute_performance_estimates(void) {
 
        master_cg_visited += 2;
        compute_rec_depth(get_irp_main_irg(), &e);
-       //printf(" ++ starting at "); DDMG(get_irp_main_irg());
        for (i = 0; i < n_irgs; i++) {
                ir_graph *irg = get_irp_irg(i);
                if ((get_cg_irg_visited(irg) < master_cg_visited-1) &&
                        get_irg_n_callers(irg) == 0) {
                                compute_rec_depth(irg, &e);
-                               //printf(" ++ starting at "); DDMG(irg);
                }
        }
        for (i = 0; i < n_irgs; i++) {
                ir_graph *irg = get_irp_irg(i);
                if (get_cg_irg_visited(irg) < master_cg_visited-1) {
                        compute_rec_depth(irg, &e);
-                       //printf(" ++ starting at "); DDMG(irg);
                }
        }
 
@@ -1340,7 +1274,8 @@ void compute_performance_estimates(void) {
 
 /* Returns the maximal loop depth of all paths from an external visible method to
    this irg. */
-int  get_irg_loop_depth(ir_graph *irg) {
+int  get_irg_loop_depth(const ir_graph *irg)
+{
        assert(irp->callgraph_state == irp_callgraph_consistent ||
                irp->callgraph_state == irp_callgraph_and_calltree_consistent);
        return  irg->callgraph_loop_depth;
@@ -1348,13 +1283,15 @@ int  get_irg_loop_depth(ir_graph *irg) {
 
 /* Returns the maximal recursion depth of all paths from an external visible method to
    this irg. */
-int get_irg_recursion_depth(ir_graph *irg) {
+int get_irg_recursion_depth(const ir_graph *irg)
+{
        assert(irp->callgraph_state == irp_callgraph_and_calltree_consistent);
        return irg->callgraph_recursion_depth;
 }
 
 /* Computes the interprocedural loop nesting information. */
-void analyse_loop_nesting_depth(void) {
+void analyse_loop_nesting_depth(void)
+{
        ir_entity **free_methods = NULL;
        int arr_len;
 
@@ -1374,13 +1311,16 @@ void analyse_loop_nesting_depth(void) {
        set_irp_loop_nesting_depth_state(loop_nesting_depth_consistent);
 }
 
-loop_nesting_depth_state get_irp_loop_nesting_depth_state(void) {
+loop_nesting_depth_state get_irp_loop_nesting_depth_state(void)
+{
        return irp->lnd_state;
 }
-void set_irp_loop_nesting_depth_state(loop_nesting_depth_state s) {
+void set_irp_loop_nesting_depth_state(loop_nesting_depth_state s)
+{
        irp->lnd_state = s;
 }
-void set_irp_loop_nesting_depth_state_inconsistent(void) {
+void set_irp_loop_nesting_depth_state_inconsistent(void)
+{
        if (irp->lnd_state == loop_nesting_depth_consistent)
                irp->lnd_state = loop_nesting_depth_inconsistent;
 }