diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7e12f30159e28b6d19ecf77c025c8e99f4234612..6614b548b2a7460f9c14204854948692ebd1095c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-25  Zdenek Dvorak <dvorakz@suse.cz>
+
+	* loop-iv.c (iv_analysis_loop_init): Use df analysis in a more
+	efficient way.
+
 2006-01-24  DJ Delorie  <dj@redhat.com>
 
 	* expmed.c (store_bit_field): Don't arbitrarily deny using insv
diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c
index 0321faa58e81bcac87bac05889bbe306be504b25..e3ec78b7cfcb1412a4676abf500fee176a24bd18 100644
--- a/gcc/loop-iv.c
+++ b/gcc/loop-iv.c
@@ -250,11 +250,14 @@ iv_analysis_loop_init (struct loop *loop)
   current_loop = loop;
 
   /* Clear the information from the analysis of the previous loop.  */
-  if (!first_time)
-    iv_analysis_done ();
-  df = df_init (DF_HARD_REGS | DF_EQUIV_NOTES);
-  df_chain_add_problem (df, DF_UD_CHAIN);
-  bivs = htab_create (10, biv_hash, biv_eq, free);
+  if (first_time)
+    {
+      df = df_init (DF_HARD_REGS | DF_EQUIV_NOTES);
+      df_chain_add_problem (df, DF_UD_CHAIN);
+      bivs = htab_create (10, biv_hash, biv_eq, free);
+    }
+  else
+    clear_iv_info ();
 
   for (i = 0; i < loop->num_nodes; i++)
     {