diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0587e1a06e3bd52b913996abc6bd7092b749cbb5..a82ff39004b5401d04b3915a6a95f2c90a36cedf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-12-07  Richard Henderson  <rth@redhat.com>
+
+	* flow.c (calculate_global_regs_live): Force the stack pointer live
+	after reload as well.
+
 2000-12-07  Bruce Korb  <bkorb@gnu.org>
 
 	* fixinc/Makefile.*(exeext): the variables are exeext, the
diff --git a/gcc/flow.c b/gcc/flow.c
index 1e51d20038bf604c0bd4c1b6fd94388a226b0863..92b500290793c8369106b7e6147ad9e6a695bfb4 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -3368,14 +3368,14 @@ calculate_global_regs_live (blocks_in, blocks_out, flags)
 	  IOR_REG_SET (new_live_at_end, sb->global_live_at_start);
 	}
 
+      /* The all-important stack pointer must always be live.  */
+      SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
+
       /* Before reload, there are a few registers that must be forced
 	 live everywhere -- which might not already be the case for 
 	 blocks within infinite loops.  */
       if (! reload_completed)
 	{
-	  /* The all-important stack pointer.  */
-	  SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
-
 	  /* Any reference to any pseudo before reload is a potential
 	     reference of the frame pointer.  */
 	  SET_REGNO_REG_SET (new_live_at_end, FRAME_POINTER_REGNUM);