From 9e8f528cd437be7bd63318326caeb26e702ce9f5 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 14 Sep 2000 17:42:48 +0000 Subject: reload.c (find_reloads_address_1): Generate reloads for auto_inc pseudos that refer to the original pseudos... * reload.c (find_reloads_address_1): Generate reloads for auto_inc pseudos that refer to the original pseudos, not only to their equivalent memory locations. From-SVN: r36413 --- gcc/reload.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'gcc/reload.c') diff --git a/gcc/reload.c b/gcc/reload.c index 1737ac48356..3fc2bfe98cc 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -5276,21 +5276,18 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn) && ((*insn_data[icode].operand[1].predicate) (equiv, Pmode)))) { - loc = &XEXP (x, 0); + /* We use the original pseudo for loc, so that + emit_reload_insns() knows which pseudo this + reload refers to and updates the pseudo rtx, not + its equivalent memory location, as well as the + corresponding entry in reg_last_reload_reg. */ + loc = &XEXP (x_orig, 0); x = XEXP (x, 0); reloadnum = push_reload (x, x, loc, loc, (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); - - /* If we created a new MEM based on reg_equiv_mem[REGNO], then - LOC above is part of the new MEM, not the MEM in INSN. - - We must also replace the address of the MEM in INSN. */ - if (&XEXP (x_orig, 0) != loc) - push_replacement (&XEXP (x_orig, 0), reloadnum, VOIDmode); - } else { -- cgit v1.2.1