BugFixes:
[libfirm] / ir / be / ia32 / ia32_transform.c
index e59780a..0f1a39c 100644 (file)
@@ -499,6 +499,7 @@ 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 */
@@ -884,7 +885,7 @@ static ir_node *generate_DivMod(ia32_transform_env_t *env, ir_node *dividend, ir
                edx_node = new_rd_Proj(dbg, irg, block, cltd, mode_Is, pn_ia32_Cdq_EDX);
        }
        else {
-               edx_node = new_rd_ia32_Const(dbg, irg, block, mode_Iu);
+               edx_node = new_rd_ia32_Const(dbg, irg, block, get_irg_no_mem(irg), mode_Iu);
                set_ia32_Const_type(edx_node, ia32_Const);
                set_ia32_Immop_tarval(edx_node, get_tarval_null(mode_Iu));
        }
@@ -1457,11 +1458,15 @@ static ir_node *gen_Cond(ia32_transform_env_t *env) {
                                if (USE_SSE2(env->cg))
                                        res = new_rd_ia32_xCondJmp(dbg, irg, block, noreg, noreg, cmp_a, cmp_b, nomem);
                                else {
+                                       ir_node *proj_eax;
                                        res = new_rd_ia32_vfCondJmp(dbg, irg, block, noreg, noreg, cmp_a, cmp_b, nomem);
+                                       proj_eax = new_r_Proj(irg, block, res, mode_Is, pn_ia32_vfCondJmp_temp_reg_eax);
+                                       be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], irg, block, 1, &proj_eax);
                                }
                        }
                        else {
                                res = new_rd_ia32_CondJmp(dbg, irg, block, noreg, noreg, cmp_a, cmp_b, nomem);
+                               set_ia32_commutative(res);
                        }
                        set_ia32_res_mode(res, get_irn_mode(cmp_a));
                }
@@ -1527,7 +1532,7 @@ static ir_node *gen_CopyB(ia32_transform_env_t *env) {
                rem = size & 0x3; /* size % 4 */
                size >>= 2;
 
-               res = new_rd_ia32_Const(dbg, irg, block, mode_Is);
+               res = new_rd_ia32_Const(dbg, irg, block, get_irg_no_mem(irg), mode_Is);
                set_ia32_op_type(res, ia32_Const);
                set_ia32_Immop_tarval(res, new_tarval_from_long(size, mode_Is));