/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
/* Phi always stop the recursion */
if (is_Phi(node))
- return get_nodes_block(node) == block;
+ return get_irn_intra_n(node, -1) == block;
if (! is_nice_value(node))
return 0;
/* Phi always stop the recursion */
if (is_Phi(node)) {
- if (get_nodes_block(node) == block)
+ if (get_irn_intra_n(node, -1) == block)
return get_Phi_pred(node, pos);
return node;
}
need_new = 0;
do {
ir_node *pred = get_irn_intra_n(node, i);
- ir_node *pred_blk = get_nodes_block(pred);
+ ir_node *pred_blk = get_irn_intra_n(pred, -1);
ir_node *leader = value_lookup(get_block_info(pred_blk)->avail_out, pred);
in[i] = translate(leader ? leader : pred, block, pos, env);
need_new |= (in[i] != pred);
node might depend on that. */
copy_node_attr(node, nn);
res = node_add(env->trans_set, nn);
- if (nn != res)
+ if (nn != res) {
obstack_free(env->obst, nn);
- else
+ } else {
DB((dbg, LEVEL_2, "--> Translate %+F in <%+F,%d> into %+F\n", node, block, pos, res));
+ }
+
return res;
}
return node;
struct obstack *old;
if (is_Phi(node)) {
- if (get_nodes_block(node) == block)
+ if (get_irn_intra_n(node, -1) == block)
return get_Phi_pred(node, pos);
return node;
}
/* check if the node has at least one Phi predecessor */
for (i = 0; i < arity; ++i) {
ir_node *pred = get_irn_intra_n(node, i);
- ir_node *pred_bl = get_nodes_block(pred);
+ ir_node *pred_bl = get_irn_intra_n(pred, -1);
ir_node *leader = value_lookup(get_block_info(pred_bl)->avail_out, pred);
leader = leader != NULL ? leader : pred;
- if (is_Phi(leader) && get_nodes_block(pred) == block)
+ if (is_Phi(leader) && get_irn_intra_n(pred, -1) == block)
break;
}
if (i >= arity) {
node might depend on that. */
copy_node_attr(node, nn);
- set_nodes_block(nn, get_nodes_block(node));
+ set_irn_n(nn, -1, get_irn_intra_n(node, -1));
for (i = 0; i < arity; ++i) {
ir_node *pred = get_irn_intra_n(node, i);
- ir_node *pred_bl = get_nodes_block(pred);
+ ir_node *pred_bl = get_irn_intra_n(pred, -1);
ir_node *leader = value_lookup(get_block_info(pred_bl)->avail_out, pred);
leader = leader != NULL ? leader : pred;
- if (is_Phi(leader) && get_nodes_block(pred) == block)
+ if (is_Phi(leader) && get_irn_intra_n(pred, -1) == block)
set_irn_n(nn, i, get_Phi_pred(leader, pos));
else
set_irn_n(nn, i, leader);
for (i = get_irn_intra_arity(n) - 1; i >= 0; --i) {
pred = get_irn_intra_n(n, i);
- pred_blk = get_nodes_block(pred);
+ pred_blk = get_irn_intra_n(pred, -1);
if (block_dominates(pred_blk, blk))
continue;
/* pred do not dominate it, but may be in the set */
value_set_foreach(entry, idom_info->new_set) {
updated |= value_add_or_replace(curr_info->avail_out, entry->node, entry->value);
}
- if (updated)
+ if (updated) {
dump_value_set(curr_info->avail_out, "Updated [Avail_out]", block);
+ }
if (arity <= 1)
return;
a_env.end_block = get_irg_end_block(irg);
a_env.pairs = NULL;
+ /* Move Proj's into the same block as their args,
+ else we would assign the result to wrong blocks */
+ normalize_proj_nodes(irg);
+
/* critical edges MUST be removed */
remove_critical_cf_edges(irg);