From: Christian Würdig Date: Mon, 21 Aug 2006 09:27:04 +0000 (+0000) Subject: fixed am again X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=ba60cfd3cb10672f8cf0aa4a8dcf1b41facd9130;p=libfirm fixed am again --- diff --git a/ir/be/ia32/ia32_optimize.c b/ir/be/ia32/ia32_optimize.c index 4e1133fe1..46d529aec 100644 --- a/ir/be/ia32/ia32_optimize.c +++ b/ir/be/ia32/ia32_optimize.c @@ -1129,14 +1129,14 @@ static ir_node *fold_addr(ia32_code_gen_t *cg, ir_node *irn, ir_node *noreg) { /* default for add -> make right operand to index */ index = right; dolea = 1; - consumed_left_shift = 1; + consumed_left_shift = -1; DBG((mod, LEVEL_1, "\tgot LEA candidate with index %+F\n", index)); /* determine the operand which needs to be checked */ temp = left; if (is_ia32_Lea(left)) { - temp = right; + temp = right; consumed_left_shift = 0; } @@ -1149,14 +1149,14 @@ static ir_node *fold_addr(ia32_code_gen_t *cg, ir_node *irn, ir_node *noreg) { scale = get_tarval_long(get_ia32_Immop_tarval(temp)); if (scale <= 3) { - index = get_irn_n(temp, 2); + index = get_irn_n(temp, 2); + consumed_left_shift = consumed_left_shift < 0 ? 1 : 0; DBG((mod, LEVEL_1, "\tgot scaled index %+F\n", index)); } else { - consumed_left_shift = 0; - scale = 0; - shift = NULL; + scale = 0; + shift = NULL; } } } @@ -1167,7 +1167,7 @@ static ir_node *fold_addr(ia32_code_gen_t *cg, ir_node *irn, ir_node *noreg) { if (left == right) { base = noreg; } - else if (consumed_left_shift) { + else if (consumed_left_shift == 1) { /* -> base is right operand */ base = (right == lea_o) ? noreg : right; }