diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a58022f12efbe8f11c65e66ff691a3686d60d153..7951f9f367e0d4611b1f7ebc43e246bff6c8695a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2005-12-14  J"orn Rennecke <joern.rennecke@st.com>
+
+	PR bootstrap/25397:
+
+	* struct-equiv.c (struct_equiv_init): Fix off-by-one error in clearing
+	of STACK_REGS bits.
+
+	* struct-euiv.c (rtx_equiv_p): Remove SUBREG case.
+
 2005-12-14  Jakub Jelinek  <jakub@redhat.com>
 
 	PR target/25254
diff --git a/gcc/struct-equiv.c b/gcc/struct-equiv.c
index 60f146f9a56ff44a3662fa467098193dabe34ad8..3e6ba5deaba950797c728533e50e308dcfcada69 100644
--- a/gcc/struct-equiv.c
+++ b/gcc/struct-equiv.c
@@ -367,10 +367,6 @@ rtx_equiv_p (rtx *xp, rtx y, int rvalue, struct equiv_info *info)
   /* ??? could extend to allow CONST_INT inputs.  */
   switch (code)
     {
-    case SUBREG:
-      gcc_assert (!reload_completed
-		  || !info->live_update);
-      break;
     case REG:
       {
 	unsigned x_regno = REGNO (x);
@@ -1001,7 +997,7 @@ struct_equiv_init (int mode, struct equiv_info *info)
 	 these regs are not necessarily all dead - we swap random bogosity
 	 against constant bogosity.  However, clearing these bits at
 	 least makes the regsets comparable.  */
-      for (rn = FIRST_STACK_REG; rn < LAST_STACK_REG; rn++)
+      for (rn = FIRST_STACK_REG; rn <= LAST_STACK_REG; rn++)
 	{
 	  CLEAR_REGNO_REG_SET (info->x_block->il.rtl->global_live_at_end, rn);
 	  CLEAR_REGNO_REG_SET (info->y_block->il.rtl->global_live_at_end, rn);