* @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"
}
/* 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); */
}
/* 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); */
}
/* 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); */
}
/* 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
}
/* 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
}
/* 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
}
/* 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
void *env) {
int i, n;
- if (Block_not_block_visited(bl)) {
+ if (!Block_block_visited(bl)) {
mark_Block_block_visited(bl);
if (pre)
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 {
}
/* 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 */
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;
}
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 */
/* 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
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;
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 */
/* 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;
}
}
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();
}