diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 12 |
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 |