OSDN Git Service

* flow.c (mark_regs_live_at_end, insn_dead_p,
authorwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 May 1999 08:43:04 +0000 (08:43 +0000)
committerwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 31 May 1999 08:43:04 +0000 (08:43 +0000)
mark_set_1, mark_used_regs): Only give FRAME_POINTER_REGNUM
and HARD_FRAME_POINTER_REGNUM special treatment if reload
hasn't run or the frame pointer is needed.
* haifa-sched.c (attach_deaths): Likewise.
* sched.c (attach_deaths): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27276 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/flow.c
gcc/haifa-sched.c
gcc/sched.c

index 8188d48..0efedc1 100644 (file)
@@ -1,3 +1,12 @@
+Mon May 31 11:40:20 EDT 1999  John Wehle  (john@feith.com)
+
+       * flow.c (mark_regs_live_at_end, insn_dead_p,
+       mark_set_1, mark_used_regs): Only give FRAME_POINTER_REGNUM
+       and HARD_FRAME_POINTER_REGNUM special treatment if reload
+       hasn't run or the frame pointer is needed.
+       * haifa-sched.c (attach_deaths): Likewise.
+       * sched.c (attach_deaths): Likewise.
+
 Mon May 31 00:46:17 1999  Jeffrey A Law  (law@cygnus.com)
 
        * configure.in (native gas tests): Search for an assembler in the
index a519ea8..8b0a769 100644 (file)
@@ -2272,11 +2272,14 @@ mark_regs_live_at_end (set)
      we end up eliminating it, it will be removed from the live list
      of each basic block by reload.  */
 
-  SET_REGNO_REG_SET (set, FRAME_POINTER_REGNUM);
+  if (! reload_completed || frame_pointer_needed)
+    {
+      SET_REGNO_REG_SET (set, FRAME_POINTER_REGNUM);
 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-  /* If they are different, also mark the hard frame pointer as live */
-  SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
+      /* If they are different, also mark the hard frame pointer as live */
+      SET_REGNO_REG_SET (set, HARD_FRAME_POINTER_REGNUM);
 #endif      
+    }
 
   /* Mark all global registers, and all registers used by the epilogue
      as being live at the end of the function since they may be
@@ -2957,9 +2960,11 @@ insn_dead_p (x, needed, call_ok, notes)
          /* Don't delete insns to set global regs.  */
          if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
              /* Make sure insns to set frame pointer aren't deleted.  */
-             || regno == FRAME_POINTER_REGNUM
+             || (regno == FRAME_POINTER_REGNUM
+                 && (! reload_completed || frame_pointer_needed))
 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-             || regno == HARD_FRAME_POINTER_REGNUM
+             || (regno == HARD_FRAME_POINTER_REGNUM
+                 && (! reload_completed || frame_pointer_needed))
 #endif
 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
              /* Make sure insns to set arg pointer are never deleted
@@ -3268,9 +3273,11 @@ mark_set_1 (needed, dead, x, insn, significant)
     mem_set_list = gen_rtx_EXPR_LIST (VOIDmode, reg, mem_set_list);
 
   if (GET_CODE (reg) == REG
-      && (regno = REGNO (reg), regno != FRAME_POINTER_REGNUM)
+      && (regno = REGNO (reg), ! (regno == FRAME_POINTER_REGNUM
+                                 && (! reload_completed || frame_pointer_needed)))
 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-      && regno != HARD_FRAME_POINTER_REGNUM
+      && ! (regno == HARD_FRAME_POINTER_REGNUM
+           && (! reload_completed || frame_pointer_needed))
 #endif
 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
       && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
@@ -3728,12 +3735,14 @@ mark_used_regs (needed, live, x, final, insn)
               nothing below can be necessary, so waste no more time.  */
            if (regno == STACK_POINTER_REGNUM
 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-               || regno == HARD_FRAME_POINTER_REGNUM
+               || (regno == HARD_FRAME_POINTER_REGNUM
+                   && (! reload_completed || frame_pointer_needed))
 #endif
 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
                || (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
 #endif
-               || regno == FRAME_POINTER_REGNUM)
+               || (regno == FRAME_POINTER_REGNUM
+                   && (! reload_completed || frame_pointer_needed)))
              {
                /* If this is a register we are going to try to eliminate,
                   don't mark it live here.  If we are successful in
@@ -3909,9 +3918,11 @@ mark_used_regs (needed, live, x, final, insn)
        if ((GET_CODE (testreg) == PARALLEL
             && GET_MODE (testreg) == BLKmode)
            || (GET_CODE (testreg) == REG
-               && (regno = REGNO (testreg), regno != FRAME_POINTER_REGNUM)
+               && (regno = REGNO (testreg), ! (regno == FRAME_POINTER_REGNUM
+                                               && (! reload_completed || frame_pointer_needed)))
 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-               && regno != HARD_FRAME_POINTER_REGNUM
+               && ! (regno == HARD_FRAME_POINTER_REGNUM
+                     && (! reload_completed || frame_pointer_needed))
 #endif
 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
                && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
index a87c98a..41a61c4 100644 (file)
@@ -4630,12 +4630,15 @@ attach_deaths (x, insn, set_p)
 
        if (regno >= FIRST_PSEUDO_REGISTER || ! global_regs[regno])
          {
-           /* Never add REG_DEAD notes for the FRAME_POINTER_REGNUM or the
-              STACK_POINTER_REGNUM, since these are always considered to be
-              live.  Similarly for ARG_POINTER_REGNUM if it is fixed.  */
-           if (regno != FRAME_POINTER_REGNUM
+           /* Never add REG_DEAD notes for STACK_POINTER_REGNUM
+              since it's always considered to be live.  Similarly
+              for FRAME_POINTER_REGNUM if a frame pointer is needed
+              and for ARG_POINTER_REGNUM if it is fixed.  */
+           if (! (regno == FRAME_POINTER_REGNUM
+                  && (! reload_completed || frame_pointer_needed))
 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-               && ! (regno == HARD_FRAME_POINTER_REGNUM)
+               && ! (regno == HARD_FRAME_POINTER_REGNUM
+                     && (! reload_completed || frame_pointer_needed))
 #endif
 #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
                && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])
index f4e8939..e8cd070 100644 (file)
@@ -2309,12 +2309,15 @@ attach_deaths (x, insn, set_p)
 
        if (regno >= FIRST_PSEUDO_REGISTER || ! global_regs[regno])
          {
-           /* Never add REG_DEAD notes for the FRAME_POINTER_REGNUM or the
-              STACK_POINTER_REGNUM, since these are always considered to be
-              live.  Similarly for ARG_POINTER_REGNUM if it is fixed.  */
-           if (regno != FRAME_POINTER_REGNUM
+           /* Never add REG_DEAD notes for STACK_POINTER_REGNUM
+              since it's always considered to be live.  Similarly
+              for FRAME_POINTER_REGNUM if a frame pointer is needed
+              and for ARG_POINTER_REGNUM if it is fixed.  */
+           if (! (regno == FRAME_POINTER_REGNUM
+                  && (! reload_completed || frame_pointer_needed))
 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-               && ! (regno == HARD_FRAME_POINTER_REGNUM)
+               && ! (regno == HARD_FRAME_POINTER_REGNUM
+                     && (! reload_completed || frame_pointer_needed))
 #endif
 #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
                && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno])