Cleanup: remove firm_common_t.h (and the PRECISE_EXC_CONTEXT define)
[libfirm] / ir / ana / irouts.c
index 7a402c5..3804180 100644 (file)
  * @date     1.2002
  * @version  $Id$
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
-#ifdef HAVE_STRING_H
 #include <string.h>
-#endif
 
 #include "xmalloc.h"
 #include "irouts.h"
@@ -67,7 +63,7 @@ int get_irn_outs_computed(const ir_node *node)
 }
 
 /* returns the number of successors of the node: */
-int get_irn_n_outs(ir_node *node) {
+int get_irn_n_outs(const ir_node *node) {
        assert(node && node->kind == k_ir_node);
 #ifdef DEBUG_libfirm
        /* assert(node->out_valid); */
@@ -77,7 +73,7 @@ int get_irn_n_outs(ir_node *node) {
 }
 
 /* Access successor n */
-ir_node *get_irn_out(ir_node *def, int pos) {
+ir_node *get_irn_out(const ir_node *def, int pos) {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
        /* assert(def->out_valid); */
@@ -86,7 +82,7 @@ ir_node *get_irn_out(ir_node *def, int pos) {
 }
 
 /* Access successor n */
-ir_node *get_irn_out_ex(ir_node *def, int pos, int *in_pos) {
+ir_node *get_irn_out_ex(const ir_node *def, int pos, int *in_pos) {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
        /* assert(def->out_valid); */
@@ -106,7 +102,7 @@ void set_irn_out(ir_node *def, int pos, ir_node *use, int in_pos) {
 }
 
 /* Return the number of control flow successors, ignore keep-alives. */
-int get_Block_n_cfg_outs(ir_node *bl) {
+int get_Block_n_cfg_outs(const ir_node *bl) {
        int i, n_cfg_outs = 0;
        assert(bl && is_Block(bl));
 #ifdef DEBUG_libfirm
@@ -121,7 +117,7 @@ int get_Block_n_cfg_outs(ir_node *bl) {
 }
 
 /* Return the number of control flow successors, honor keep-alives. */
-int get_Block_n_cfg_outs_ka(ir_node *bl) {
+int get_Block_n_cfg_outs_ka(const ir_node *bl) {
        int i, n_cfg_outs = 0;
        assert(bl && is_Block(bl));
 #ifdef DEBUG_libfirm
@@ -145,7 +141,7 @@ int get_Block_n_cfg_outs_ka(ir_node *bl) {
 }
 
 /* Access predecessor n, ignore keep-alives. */
-ir_node *get_Block_cfg_out(ir_node *bl, int pos) {
+ir_node *get_Block_cfg_out(const ir_node *bl, int pos) {
        int i;
        assert(bl && is_Block(bl));
 #ifdef DEBUG_libfirm
@@ -165,7 +161,7 @@ ir_node *get_Block_cfg_out(ir_node *bl, int pos) {
 }
 
 /* Access predecessor n, honor keep-alives. */
-ir_node *get_Block_cfg_out_ka(ir_node *bl, int pos) {
+ir_node *get_Block_cfg_out_ka(const ir_node *bl, int pos) {
        int i, n_outs;
        assert(bl && is_Block(bl));
 #ifdef DEBUG_libfirm
@@ -233,7 +229,7 @@ static void irg_out_block_walk2(ir_node *bl,
                                 void *env) {
        int i, n;
 
-       if (Block_not_block_visited(bl)) {
+       if (!Block_block_visited(bl)) {
                mark_Block_block_visited(bl);
 
                if (pre)
@@ -266,8 +262,7 @@ void irg_out_block_walk(ir_node *node,
 
                for (i = 0, n = get_irn_n_outs(node); i < n; ++i) {
                        ir_node *succ = get_irn_out(node, i);
-                       if (get_irn_visited(succ) < get_irg_visited(current_ir_graph))
-                               irg_out_walk_2(succ, pre, post, env);
+                       irg_out_block_walk2(succ, pre, post, env);
                }
        }
        else {
@@ -316,7 +311,7 @@ static int _count_outs(ir_node *n) {
                }
 
                /* count Def-Use edges for predecessors */
-               if (irn_not_visited(skipped_pred))
+               if (!irn_visited(skipped_pred))
                        res += _count_outs(skipped_pred);
 
                /*count my Def-Use edges */
@@ -340,9 +335,7 @@ static int count_outs(ir_graph *irg) {
           even if they are not visible. */
        for (i = anchor_last - 1; i >= 0; --i) {
                n = get_irg_anchor(irg, i);
-               if (irn_not_visited(n)) {
-                       mark_irn_visited(n);
-
+               if (!irn_visited_else_mark(n)) {
                        n->out = INT_TO_PTR(1);
                        ++res;
                }
@@ -382,7 +375,7 @@ static ir_def_use_edge *_set_out_edges(ir_node *use, ir_def_use_edge *free) {
                ir_node *def = get_irn_n(use, i);
 
                /* Recursion */
-               if (irn_not_visited(def))
+               if (!irn_visited(def))
                        free = _set_out_edges(def, free);
 
                /* Remember this Def-Use edge */
@@ -414,9 +407,7 @@ static ir_def_use_edge *set_out_edges(ir_graph *irg, ir_def_use_edge *free) {
        /* handle anchored nodes */
        for (i = anchor_last - 1; i >= 0; --i) {
                n = get_irg_anchor(irg, i);
-               if (irn_not_visited(n)) {
-                       mark_irn_visited(n);
-
+               if (!irn_visited_else_mark(n)) {
                        n_outs = PTR_TO_INT(n->out);
                        n->out = free;
 #ifdef DEBUG_libfirm
@@ -429,32 +420,6 @@ static ir_def_use_edge *set_out_edges(ir_graph *irg, ir_def_use_edge *free) {
        return free;
 }
 
-
-/**
- * We want that the out of ProjX from Start contains the next block at
- * position 0, the Start block at position 1.  This is necessary for
- * the out block walker.
- */
-static INLINE void fix_start_proj(ir_graph *irg) {
-       ir_node *startbl = get_irg_start_block(irg);
-
-       if (get_Block_n_cfg_outs(startbl)) {
-               ir_node *proj = get_irg_initial_exec(irg);
-               ir_node *irn;
-               int     block_pos, other_pos;
-
-               if (get_irn_n_outs(proj) == 2) {
-                       if (get_irn_out_ex(proj, 0, &block_pos) == startbl) {
-                               irn = get_irn_out_ex(proj, 1, &other_pos);
-                               set_irn_out(proj, 0, irn, other_pos);
-                               set_irn_out(proj, 1, startbl, block_pos);
-                       }
-               } else {
-                       assert(get_irg_phase_state(irg) == phase_backend);
-               }
-       }
-}
-
 /* compute the outs for a given graph */
 void compute_irg_outs(ir_graph *irg) {
        ir_graph        *rem = current_ir_graph;
@@ -474,7 +439,7 @@ void compute_irg_outs(ir_graph *irg) {
        n_out_edges = count_outs(irg);
 
        /* allocate memory for all out edges. */
-       irg->outs = xcalloc(n_out_edges, sizeof(irg->outs[0]));
+       irg->outs = XMALLOCNZ(ir_def_use_edge, n_out_edges);
 #ifdef DEBUG_libfirm
        irg->n_outs = n_out_edges;
 #endif /* defined DEBUG_libfirm */
@@ -486,11 +451,6 @@ void compute_irg_outs(ir_graph *irg) {
        /* Check how much memory we have used */
        assert (end == (irg->outs + n_out_edges));
 
-       /* We want that the out of ProjX from Start contains the next block at
-          position 0, the Start block at position 1.  This is necessary for
-          code placement (place_early() ONLY if started GCSE on graphs with dead blocks) */
-       fix_start_proj(irg);
-
        current_ir_graph->outs_state = outs_consistent;
        current_ir_graph = rem;
 }
@@ -635,7 +595,7 @@ void compute_ip_outs(void) {
        }
 
        global_count = n_out_edges = count_ip_outs();
-       out_edges = xcalloc(n_out_edges, sizeof(out_edges[0]));
+       out_edges    = XMALLOCNZ(ir_node*, n_out_edges);
        set_irp_ip_outedges(out_edges);
        set_ip_outs();
 }