diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 80297cff20d81c76090d5c506fde0c59862808ba..96b16ce85e74c31e67a3a237f2b1b56170f22643 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,7 @@
 2004-01-02  Andrew Pinski  <pinskia@physics.uc.edu>
 
+	* loop.c (loop_optimize): Free all loops_info's mems.
+
 	* c-typeck.c (finish_init): Free spelling_base before 
 	setting it again.
 	
diff --git a/gcc/loop.c b/gcc/loop.c
index 4ee83447a6998eaac83c4599e73cf58f325d443d..0169dd05976c09040ba5d558c8266ad349e9b2bf 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -1,6 +1,6 @@
 /* Perform various loop optimizations, including strength reduction.
    Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -540,6 +540,9 @@ loop_optimize (rtx f, FILE *dumpfile, int flags)
   end_alias_analysis ();
 
   /* Clean up.  */
+  for (i = 0; i < (int) loops->num; i++)
+    free (loops_info[i].mems);
+  
   free (uid_luid);
   free (uid_loop);
   free (loops_info);