From: Richard Stallman Date: Tue, 16 Feb 1993 22:13:45 +0000 (+0000) Subject: (find_reloads_address): Use strict_memory_address_p X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b39555b4d7c9b2b95facaf17e61cbd324b3e3f01;p=gcc.git (find_reloads_address): Use strict_memory_address_p to check for valid indirect address. From-SVN: r3478 --- diff --git a/gcc/reload.c b/gcc/reload.c index 3ea095ceeb9..e0c3d59dc72 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -3590,25 +3590,12 @@ find_reloads_address (mode, memrefloc, ad, loc, operand, ind_levels) return 1; } - else if (reg_equiv_mem[regno] != 0) - { - tem = XEXP (reg_equiv_mem[regno], 0); - - /* If we can't indirect any more, a pseudo must be reloaded. - If the pseudo's address in its MEM is a SYMBOL_REF, it - must be reloaded unless indirect_symref_ok. Otherwise, it - can be reloaded if the address is REG or REG + CONST_INT. */ - - if (ind_levels > 0 - && ! (GET_CODE (tem) == SYMBOL_REF && ! indirect_symref_ok) - && ((GET_CODE (tem) == REG - && REGNO (tem) < FIRST_PSEUDO_REGISTER) - || (GET_CODE (tem) == PLUS - && GET_CODE (XEXP (tem, 0)) == REG - && REGNO (XEXP (tem, 0)) < FIRST_PSEUDO_REGISTER - && GET_CODE (XEXP (tem, 1)) == CONST_INT))) - return 0; - } + /* We can avoid a reload if the register's equivalent memory expression + is valid as an indirect memory address. */ + + else if (reg_equiv_mem[regno] != 0 && ind_levels > 0 + && strict_memory_address_p (mode, reg_equiv_mem[regno])) + return 0; /* The only remaining case where we can avoid a reload is if this is a hard register that is valid as a base register and which is not the