diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eec19752b6822a6f7665ca8cc397d554a00767c0..b20645813bf91382176a8b540ee32c78b0bb4746 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,10 @@
-2008-08-28  Paul Brook  <paul@codesourcery.com>
+2008-08-26  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+	PR rtl-opt/37219
+	* fwprop.c (fwprop): Check that the loop_father is the outer loop.
+	(fwprop_addr): Check that the loop_father is not the outer loop.
+
+2008-08-26  Paul Brook  <paul@codesourcery.com>
 
 	* config/arm/vfp.md: Document fmul{s,d} and fmac{s,d} types.
 	Remove documentation entry for fmul type.
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index fbe432974f4179ec1225f3b14f7caf66496f94cc..7c61ca008e5b93fc85bd863ba56021864b099b31 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -1056,7 +1056,9 @@ fwprop (void)
       struct df_ref *use = DF_USES_GET (i);
       if (use)
 	if (DF_REF_TYPE (use) == DF_REF_REG_USE
-	    || DF_REF_BB (use)->loop_father == NULL)
+	    || DF_REF_BB (use)->loop_father == NULL
+	    /* The outer most loop is not really a loop.  */
+	    || loop_outer (DF_REF_BB (use)->loop_father) == NULL)
 	  forward_propagate_into (use);
     }
 
@@ -1099,7 +1101,9 @@ fwprop_addr (void)
       struct df_ref *use = DF_USES_GET (i);
       if (use)
 	if (DF_REF_TYPE (use) != DF_REF_REG_USE
-	    && DF_REF_BB (use)->loop_father != NULL)
+	    && DF_REF_BB (use)->loop_father != NULL
+	    /* The outer most loop is not really a loop.  */
+	    && loop_outer (DF_REF_BB (use)->loop_father) != NULL)
 	  forward_propagate_into (use);
     }