aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-04-27 11:39:47 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-04-27 11:39:47 +0000
commit8c74fb06c66b569a26f93c0d569d4437fdcfd415 (patch)
treea4840b670d6361a1ddbbb4b10ca1921ee3bb7e7c /gcc/reload.c
parenta9b77cd1f72118dead00c720f1fc3348b7c5127e (diff)
downloadgcc-8c74fb06c66b569a26f93c0d569d4437fdcfd415.zip
gcc-8c74fb06c66b569a26f93c0d569d4437fdcfd415.tar.gz
gcc-8c74fb06c66b569a26f93c0d569d4437fdcfd415.tar.bz2
reload.h (elimination_target_reg_p): Declare.
gcc/ * reload.h (elimination_target_reg_p): Declare. * reload.c (find_reloads): Don't apply the reg_rtx move optimization if the SET_DEST satisfies elimination_target_reg_p. * reload1.c (elimination_target_reg_p): New function. (gen_reload): In the move/add2 fallback, make sure that op0 does not overlap the destination register. From-SVN: r124215
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index de6093b..8ed2f4b 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -4465,7 +4465,8 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
if (rld[i].when_needed == RELOAD_FOR_INPUT
&& GET_CODE (PATTERN (insn)) == SET
&& REG_P (SET_DEST (PATTERN (insn)))
- && SET_SRC (PATTERN (insn)) == rld[i].in)
+ && SET_SRC (PATTERN (insn)) == rld[i].in
+ && !elimination_target_reg_p (SET_DEST (PATTERN (insn))))
{
rtx dest = SET_DEST (PATTERN (insn));
unsigned int regno = REGNO (dest);