aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/emit-rtl.c12
2 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f79f8b1..3c578c2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-08-08 Lars Brinkhoff <lars@nocrew.org>
+ Richard Henderson <rth@redhat.com>
+
+ * emit-rtl.c (gen_rtx_REG): After reload, only return
+ frame_pointer_rtx or hard_frame_pointer_rtx if frame_pointer_needed.
+
2002-08-08 Jakub Jelinek <jakub@redhat.com>
* config/rs6000/rs6000-protos.h (rs6000_field_alignment): Remove.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 26032c1..d868924 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -514,10 +514,12 @@ gen_rtx_REG (mode, regno)
if (mode == Pmode && !reload_in_progress)
{
- if (regno == FRAME_POINTER_REGNUM)
+ if (regno == FRAME_POINTER_REGNUM
+ && (!reload_completed || frame_pointer_needed))
return frame_pointer_rtx;
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
- if (regno == HARD_FRAME_POINTER_REGNUM)
+ if (regno == HARD_FRAME_POINTER_REGNUM
+ && (!reload_completed || frame_pointer_needed))
return hard_frame_pointer_rtx;
#endif
#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && HARD_FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
@@ -542,7 +544,11 @@ gen_rtx_REG (mode, regno)
This code is disabled for now until we can fix the various backends
which depend on having non-shared hard registers in some cases. Long
term we want to re-enable this code as it can significantly cut down
- on the amount of useless RTL that gets generated. */
+ on the amount of useless RTL that gets generated.
+
+ We'll also need to fix some code that runs after reload that wants to
+ set ORIGINAL_REGNO. */
+
if (cfun
&& cfun->emit
&& regno_reg_rtx