/* the other defs can't be marked for cases where a user of the original
* value is in the same block as the alternative definition.
* In this case we mustn't use the alternative definition.
/* the other defs can't be marked for cases where a user of the original
* value is in the same block as the alternative definition.
* In this case we mustn't use the alternative definition.
- for(i = 0; i < n_cfgpreds; ++i)
- in[i] = new_Unknown(mode);
+ dummy = new_r_Dummy(irg, mode);
+ for (i = 0; i < n_cfgpreds; ++i)
+ in[i] = dummy;
phi = new_r_Phi(block, n_cfgpreds, in, mode);
set_irn_link(block, phi);
mark_irn_visited(block);
/* set Phi predecessors */
phi = new_r_Phi(block, n_cfgpreds, in, mode);
set_irn_link(block, phi);
mark_irn_visited(block);
/* set Phi predecessors */
ir_node *pred_block = get_Block_cfgpred_block(block, i);
ir_node *pred_val = search_def_and_create_phis(pred_block, mode, 0);
ir_node *pred_block = get_Block_cfgpred_block(block, i);
ir_node *pred_val = search_def_and_create_phis(pred_block, mode, 0);
ir_node *cmp; /**< The Compare node that might be partial evaluated */
pn_Cmp pnc; /**< The Compare mode of the Compare node. */
ir_node *cnst;
ir_node *cmp; /**< The Compare node that might be partial evaluated */
pn_Cmp pnc; /**< The Compare mode of the Compare node. */
ir_node *cnst;
copy = get_Phi_pred(node, j);
/* we might have to evaluate a Phi-cascade */
if (get_irn_visited(copy) >= env->visited_nr) {
copy = get_Phi_pred(node, j);
/* we might have to evaluate a Phi-cascade */
if (get_irn_visited(copy) >= env->visited_nr) {
} else {
new_pred = copy_and_fix_node(env, block, copy_block, j, pred);
}
} else {
new_pred = copy_and_fix_node(env, block, copy_block, j, pred);
}
/* ignore control flow */
mode = get_irn_mode(node);
if (mode == mode_X || is_Cond(node))
/* ignore control flow */
mode = get_irn_mode(node);
if (mode == mode_X || is_Cond(node))
cmp_copy = exact_copy(pred);
set_nodes_block(cmp_copy, user_block);
cmp_copy = exact_copy(pred);
set_nodes_block(cmp_copy, user_block);
- copy = new_r_Proj(current_ir_graph, user_block, cmp_copy, mode_b, pn);
+ copy = new_r_Proj(cmp_copy, mode_b, pn);
* recursive find_phi_with_const() call */
assert(get_irn_visited(copy) <= env->visited_nr);
if (get_irn_visited(copy) >= env->visited_nr) {
* recursive find_phi_with_const() call */
assert(get_irn_visited(copy) <= env->visited_nr);
if (get_irn_visited(copy) >= env->visited_nr) {
DB((dbg, LEVEL_2, ">> Fixing users of %+F\n", node));
DB((dbg, LEVEL_2, ">> Fixing users of %+F\n", node));
construct_ssa(block, node, copy_block, copy_node);
}
}
construct_ssa(block, node, copy_block, copy_node);
}
}
static int eval_cmp_vrp(pn_Cmp pnc, ir_node *left, ir_node *right)
{
pn_Cmp cmp_result = vrp_cmp(left, right);
static int eval_cmp_vrp(pn_Cmp pnc, ir_node *left, ir_node *right)
{
pn_Cmp cmp_result = vrp_cmp(left, right);
- tarval *res = computed_value_Cmp_Confirm(env->cmp, cand, env->cnst, env->pnc);
+ ir_tarval *res = computed_value_Cmp_Confirm(env->cmp, cand, env->cnst, env->pnc);
ir_node *copy_block;
ir_node *phi_pred = get_Phi_pred(value, i);
ir_node *cfgpred = get_Block_cfgpred(block, i);
ir_node *copy_block;
ir_node *phi_pred = get_Phi_pred(value, i);
ir_node *cfgpred = get_Block_cfgpred(block, i);
ir_node *copy_block;
ir_node *phi_pred = get_Phi_pred(value, i);
ir_node *cfgpred = get_Block_cfgpred(block, i);
ir_node *copy_block;
ir_node *phi_pred = get_Phi_pred(value, i);
ir_node *cfgpred = get_Block_cfgpred(block, i);
ir_node *cmp = get_Proj_pred(value);
if (!is_Cmp(cmp))
return NULL;
left = get_Cmp_left(cmp);
right = get_Cmp_right(cmp);
ir_node *cmp = get_Proj_pred(value);
if (!is_Cmp(cmp))
return NULL;
left = get_Cmp_left(cmp);
right = get_Cmp_right(cmp);
ir_node *left = get_Cmp_left(cmp);
ir_node *right = get_Cmp_right(cmp);
if (is_Const(left) && is_Const(right)) {
ir_node *left = get_Cmp_left(cmp);
ir_node *right = get_Cmp_right(cmp);
if (is_Const(left) && is_Const(right)) {
- int pnc = get_Proj_proj(selector);
- tarval *tv_left = get_Const_tarval(left);
- tarval *tv_right = get_Const_tarval(right);
+ pn_Cmp pnc = get_Proj_pn_cmp(selector);
+ ir_tarval *tv_left = get_Const_tarval(left);
+ ir_tarval *tv_right = get_Const_tarval(right);
selector_evaluated = eval_cmp_vrp(pnc, left, right);
}
}
} else if (is_Const_or_Confirm(selector)) {
selector_evaluated = eval_cmp_vrp(pnc, left, right);
}
}
} else if (is_Const_or_Confirm(selector)) {
/* we have to remove the edge towards the pred as the pred now
* jumps into the true_block. We also have to shorten Phis
* in our block because of this */
/* we have to remove the edge towards the pred as the pred now
* jumps into the true_block. We also have to shorten Phis
* in our block because of this */