X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_optimize.c;h=2198bc1e696409383e6c3578ba1990b3d3acb1e5;hb=82ae33d5f06da493af71ebed0e9e22cd9d23e6fd;hp=d70f8b99772c9099a19aca0586b5e00c2e86db22;hpb=bb0a0d711b614d65419cef6c7d9140186e4c9b12;p=libfirm diff --git a/ir/be/ia32/ia32_optimize.c b/ir/be/ia32/ia32_optimize.c index d70f8b997..2198bc1e6 100644 --- a/ir/be/ia32/ia32_optimize.c +++ b/ir/be/ia32/ia32_optimize.c @@ -1,4 +1,4 @@ -/* +/** * Project: libFIRM * File name: ir/be/ia32/ia32_optimize.c * Purpose: Implements several optimizations for IA32 @@ -1179,7 +1179,7 @@ static ir_node *fold_addr(ia32_code_gen_t *cg, ir_node *irn, ir_node *noreg) { am_flav = ia32_am_N; /* determine new am flavour */ - if (offs || offs_cnst || offs_lea) { + if (offs || offs_cnst || offs_lea || have_am_sc) { am_flav |= ia32_O; } if (! be_is_NoReg(cg, base)) { @@ -1522,6 +1522,8 @@ static void optimize_am(ir_node *irn, void *env) { DBG_OPT_AM_D(load, store, irn); DB((mod, LEVEL_1, "merged with %+F and %+F into dest AM\n", load, store)); + + need_exchange_on_fail = 0; } } /* if (store) */ else if (get_ia32_am_support(irn) & ia32_am_Source) { @@ -1535,7 +1537,7 @@ static void optimize_am(ir_node *irn, void *env) { } /* was exchanged but optimize failed: exchange back */ - if (check_am_src && need_exchange_on_fail) { + if (need_exchange_on_fail) { exchange_left_right(irn, &left, &right, 3, 2); cand = orig_cand; }