X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_transform.c;h=1d6f292504cfe4c1ec970bacffd7ef1c303484bf;hb=cd817f7e21d4b77b860e88d6ad7b72f93f2778dd;hp=4f1b369efa54cc707899808c21e29e70afd30839;hpb=2f1ba1fee3af12801fedf198e1f9a9bc97f54036;p=libfirm diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 4f1b369ef..1d6f29250 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -397,7 +397,7 @@ static ir_node *gen_imm_Add(ia32_transform_env_t *env, ir_node *expr_op, ir_node DEBUG_ONLY(firm_dbg_module_t *mod = env->mod;) /* try to optimize to inc/dec */ - if ((env->cg->opt & IA32_OPT_INCDEC) && tv) { + if ((env->cg->opt & IA32_OPT_INCDEC) && (get_ia32_op_type(const_op) == ia32_Const)) { /* optimize tarvals */ class_tv = classify_tarval(tv); class_negtv = classify_tarval(tarval_neg(tv)); @@ -417,6 +417,7 @@ static ir_node *gen_imm_Add(ia32_transform_env_t *env, ir_node *expr_op, ir_node if (normal_add) { new_op = new_rd_ia32_Add(dbg, irg, block, noreg, noreg, expr_op, noreg, nomem); set_ia32_Immop_attr(new_op, const_op); + set_ia32_commutative(new_op); } return new_op; @@ -499,7 +500,6 @@ static ir_node *gen_Add(ia32_transform_env_t *env) { /* set AM support */ set_ia32_am_support(new_op, ia32_am_Dest); - set_ia32_commutative(new_op); } else { /* This is a normal add */ @@ -2039,6 +2039,7 @@ void ia32_transform_sub_to_neg_add(ir_node *irn, ia32_code_gen_t *cg) { set_ia32_am_support(res, ia32_am_Full); set_ia32_commutative(res); } + set_ia32_res_mode(res, tenv.mode); SET_IA32_ORIG_NODE(res, ia32_get_old_node_name(tenv.cg, irn)); /* copy register */ @@ -2152,6 +2153,7 @@ void ia32_transform_lea_to_add(ir_node *irn, ia32_code_gen_t *cg) { arch_set_irn_register(cg->arch_env, res, out_reg); set_ia32_op_type(res, ia32_Normal); set_ia32_commutative(res); + set_ia32_res_mode(res, tenv.mode); if (imm) { set_ia32_cnst(res, offs);