aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/flow.c9
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2fcc64a..7b3844a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2000-04-22 Richard Henderson <rth@cygnus.com>
+ * flow.c (mark_used_reg): Hack around rs6000 eliminable pic reg.
+
+2000-04-22 Richard Henderson <rth@cygnus.com>
+
* diagnostic.c (init_output_buffer): Don't initialize format_args.
(output_clear): Likewise.
(output_printf): Use va_copy.
diff --git a/gcc/flow.c b/gcc/flow.c
index 9f7537e..24ae92c 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -4473,12 +4473,15 @@ mark_used_reg (pbi, reg, cond, insn)
be eliminated, reload will set it live at that point.
Otherwise, record that this function uses this register. */
+ /* ??? The PPC backend tries to "eliminate" on the pic
+ register to itself. This should be fixed. In the mean
+ time, hack around it. */
- if (! TEST_HARD_REG_BIT (elim_reg_set, regno))
+ if (! (TEST_HARD_REG_BIT (elim_reg_set, regno)
+ && (regno == FRAME_POINTER_REGNUM
+ || regno == ARG_POINTER_REGNUM)))
{
int n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
- if (n == 0)
- n = 1;
do
regs_ever_live[regno + --n] = 1;
while (n > 0);