aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/reload.c3
-rw-r--r--gcc/reload1.c3
3 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d911b36..97fed21 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-12-23 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ PR target/18511
+ * reload1.c (emit_output_reload_insns): Check if OLD is a hard
+ register before calling regno_clobbered_p.
+ * reload.c: Update comment for regno_clobbered_p.
+
2004-12-22 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (override_options): Respect user disable of
diff --git a/gcc/reload.c b/gcc/reload.c
index dc45ea5..9c0836a 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -6940,7 +6940,8 @@ find_inc_amount (rtx x, rtx inced)
}
/* Return 1 if register REGNO is the subject of a clobber in insn INSN.
- If SETS is nonzero, also consider SETs. */
+ If SETS is nonzero, also consider SETs. REGNO must refer to a hard
+ register. */
int
regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode,
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c90c8b6..1fec0cd 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -6705,7 +6705,8 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
|| !(set = single_set (insn))
|| rtx_equal_p (old, SET_DEST (set))
|| !reg_mentioned_p (old, SET_SRC (set))
- || !regno_clobbered_p (REGNO (old), insn, rl->mode, 0))
+ || !((REGNO (old) < FIRST_PSEUDO_REGISTER)
+ && regno_clobbered_p (REGNO (old), insn, rl->mode, 0)))
gen_reload (old, reloadreg, rl->opnum,
rl->when_needed);
}