fixed inc generation/emitter
[libfirm] / ir / be / ia32 / ia32_transform.c
index 0f1a39c..78288f7 100644 (file)
@@ -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 */
@@ -1329,7 +1329,7 @@ static ir_node *gen_Store(ia32_transform_env_t *env) {
        /* address might be a constant (symconst or absolute address) */
        if (is_ia32_Const(ptr)) {
                sptr   = noreg;
-               is_imm = 0;
+               is_imm = 1;
        }
 
        if (mode_is_float(mode)) {
@@ -1343,7 +1343,7 @@ static ir_node *gen_Store(ia32_transform_env_t *env) {
                new_op = new_rd_ia32_Store8Bit(env->dbg, env->irg, env->block, sptr, noreg, sval, mem);
        }
        else {
-               new_op = new_rd_ia32_Store(env->dbg, env->irg, env->block, ptr, noreg, sval, mem);
+               new_op = new_rd_ia32_Store(env->dbg, env->irg, env->block, sptr, noreg, sval, mem);
        }
 
        /* stored const is an attribute (saves a register) */