aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-01-30 10:07:44 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-01-30 10:07:44 -0800
commit5748ebeb998a01e22e9e2ee1e649f46c42e6bece (patch)
tree5bfe6696efdf613c71ba47adae1a6cf747f80eef
parent20d32cc2b51f9f9d649059e04c83e627226f494e (diff)
downloadgcc-5748ebeb998a01e22e9e2ee1e649f46c42e6bece.zip
gcc-5748ebeb998a01e22e9e2ee1e649f46c42e6bece.tar.gz
gcc-5748ebeb998a01e22e9e2ee1e649f46c42e6bece.tar.bz2
* sched-deps.c (sched_analyze): Make a call read the frame pointer.
From-SVN: r49341
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/sched-deps.c19
2 files changed, 18 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6598e92..dc3476a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-01-30 Richard Henderson <rth@redhat.com>
+
+ * sched-deps.c (sched_analyze): Make a call read the frame pointer.
+
2002-01-30 Zack Weinberg <zack@codesourcery.com>
* expmed.c (emit_store_flag): Call protect_from_queue on op0 and op1.
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 384bab7..9f20aad 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -1267,21 +1267,30 @@ sched_analyze (deps, head, tail)
}
else
{
- /* A call may read and modify global register variables.
- Other call-clobbered hard regs may be clobbered. We
- don't know what set of fixed registers might be used
- by the function. It is certain that the stack pointer
- is among them, but be conservative. */
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ /* A call may read and modify global register variables. */
if (global_regs[i])
{
SET_REGNO_REG_SET (reg_pending_sets, i);
SET_REGNO_REG_SET (reg_pending_uses, i);
}
+ /* Other call-clobbered hard regs may be clobbered. */
else if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
SET_REGNO_REG_SET (reg_pending_clobbers, i);
+ /* We don't know what set of fixed registers might be used
+ by the function, but it is certain that the stack pointer
+ is among them, but be conservative. */
else if (fixed_regs[i])
SET_REGNO_REG_SET (reg_pending_uses, i);
+ /* The frame pointer is normally not used by the function
+ itself, but by the debugger. */
+ /* ??? MIPS o32 is an exception. It uses the frame pointer
+ in the macro expansion of jal but does not represent this
+ fact in the call_insn rtl. */
+ else if (i == FRAME_POINTER_REGNUM
+ || (i == HARD_FRAME_POINTER_REGNUM
+ && (! reload_completed || frame_pointer_needed)))
+ SET_REGNO_REG_SET (reg_pending_uses, i);
}
/* For each insn which shouldn't cross a call, add a dependence