mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-28 16:01:00 +08:00
PRE_INC with invalid hard reg
PR target/68973 * reloads.c (find_reloads_address_1): For pre/post-inc/dec with an invalid hard reg, reload just the reg not the entire pre/post-inc/dec address expression. From-SVN: r233406
This commit is contained in:
parent
114e2b5198
commit
ab6e41cb3c
@ -1,3 +1,10 @@
|
||||
2016-02-14 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR target/68973
|
||||
* reloads.c (find_reloads_address_1): For pre/post-inc/dec
|
||||
with an invalid hard reg, reload just the reg not the entire
|
||||
pre/post-inc/dec address expression.
|
||||
|
||||
2016-02-13 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/67260
|
||||
|
12
gcc/reload.c
12
gcc/reload.c
@ -5834,14 +5834,16 @@ find_reloads_address_1 (machine_mode mode, addr_space_t as,
|
||||
? XEXP (x, 0)
|
||||
: reg_equiv_mem (regno));
|
||||
enum insn_code icode = optab_handler (add_optab, GET_MODE (x));
|
||||
if (insn && NONJUMP_INSN_P (insn) && equiv
|
||||
&& memory_operand (equiv, GET_MODE (equiv))
|
||||
if (insn && NONJUMP_INSN_P (insn)
|
||||
#if HAVE_cc0
|
||||
&& ! sets_cc0_p (PATTERN (insn))
|
||||
#endif
|
||||
&& ! (icode != CODE_FOR_nothing
|
||||
&& insn_operand_matches (icode, 0, equiv)
|
||||
&& insn_operand_matches (icode, 1, equiv))
|
||||
&& (regno < FIRST_PSEUDO_REGISTER
|
||||
|| (equiv
|
||||
&& memory_operand (equiv, GET_MODE (equiv))
|
||||
&& ! (icode != CODE_FOR_nothing
|
||||
&& insn_operand_matches (icode, 0, equiv)
|
||||
&& insn_operand_matches (icode, 1, equiv))))
|
||||
/* Using RELOAD_OTHER means we emit this and the reload we
|
||||
made earlier in the wrong order. */
|
||||
&& !reloaded_inner_of_autoinc)
|
||||
|
Loading…
x
Reference in New Issue
Block a user