* @return the newly created node
*/
static ir_node *do_apply(ir_opcode code, dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode) {
- ir_graph *irg = current_ir_graph;
ir_node *result;
ir_node *block = find_location(get_nodes_block(op1), get_nodes_block(op2));
switch (code) {
case iro_Mul:
- result = new_rd_Mul(db, irg, block, op1, op2, mode);
+ result = new_rd_Mul(db, block, op1, op2, mode);
break;
case iro_Add:
- result = new_rd_Add(db, irg, block, op1, op2, mode);
+ result = new_rd_Add(db, block, op1, op2, mode);
break;
case iro_Sub:
- result = new_rd_Sub(db, irg, block, op1, op2, mode);
+ result = new_rd_Sub(db, block, op1, op2, mode);
break;
default:
panic("Unsupported opcode");
*/
static ir_node *applyOneEdge(ir_node *iv, ir_node *rc, LFTR_edge *e, iv_env *env) {
if (env->osr_flags & osr_flag_lftr_with_ov_check) {
- tarval *tv_l, *tv_r, *tv, *tv_init, *tv_incr;
+ tarval *tv_l, *tv_r, *tv, *tv_init, *tv_incr, *tv_end;
tarval_int_overflow_mode_t ovmode;
scc *pscc;
}
if (pscc->code == iro_Add) {
- tv = tarval_add(tv, tv_incr);
+ tv_end = tarval_add(tv, tv_incr);
} else {
assert(pscc->code == iro_Sub);
- tv = tarval_sub(tv, tv_incr, NULL);
+ tv_end = tarval_sub(tv, tv_incr, NULL);
}
tarval_set_integer_overflow_mode(ovmode);
- if (tv == tarval_bad || tv_init == tarval_bad) {
+ if (tv == tarval_bad || tv_init == tarval_bad || tv_end == tarval_bad) {
DB((dbg, LEVEL_4, " = OVERFLOW"));
return NULL;
}
if (get_irn_mode(pred) != mode) {
ir_node *block = get_nodes_block(pred);
- pred = new_r_Conv(current_ir_graph, block, pred, mode);
+ pred = new_r_Conv(block, pred, mode);
set_Add_left(irn, pred);
}
pred = get_Add_right(irn);
if (get_irn_mode(pred) != mode) {
ir_node *block = get_nodes_block(pred);
- pred = new_r_Conv(current_ir_graph, block, pred, mode);
+ pred = new_r_Conv(block, pred, mode);
set_Add_right(irn, pred);
}
}
if (l_mode != mode) {
ir_node *block = get_nodes_block(left);
- left = new_r_Conv(current_ir_graph, block, left, mode);
+ left = new_r_Conv(block, left, mode);
set_Sub_left(irn, left);
}
if (r_mode != mode) {
ir_node *block = get_nodes_block(right);
- right = new_r_Conv(current_ir_graph, block, right, mode);
+ right = new_r_Conv(block, right, mode);
set_Sub_right(irn, right);
}
}
irg_walk_graph(irg, NULL, fix_adds_and_subs, &env);
/* try linear function test replacements */
- //lftr(irg, &env); // currently buggy :-(
+ lftr(irg, &env);
(void)lftr;
set_irg_outs_inconsistent(irg);