dce.c (fini_dce): Call df_analyze again just in case delete_unmarked_insns removed...
authorAlexey Makhalov <makhaloff@gmail.com>
Tue, 20 Aug 2013 15:14:49 +0000 (15:14 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 20 Aug 2013 15:14:49 +0000 (09:14 -0600)
       * dce.c (fini_dce): Call df_analyze again just in case
       delete_unmarked_insns removed anything.

From-SVN: r201886

gcc/ChangeLog
gcc/dce.c

index 208b291a9c6c66bc2c4705bc3e484abc0fafb692..516d951f80c4d80e351ede0e90924a33a471e6fd 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-20  Alexey Makhalov  <makhaloff@gmail.com>
+
+       * dce.c (fini_dce): Call df_analyze again just in case
+       delete_unmarked_insns removed anything.
+
 2013-08-20  Teresa Johnson  <tejohnson@google.com>
 
        PR rtl-optimizations/57451
index fa22316b5cc8f9e8bd8959cc3d8dadbf7b1fa0ff..c0dd87a2628902d83f74fa49a19fe4c4511bd5d3 100644 (file)
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -745,6 +745,17 @@ fini_dce (bool fast)
       bitmap_obstack_release (&dce_blocks_bitmap_obstack);
       bitmap_obstack_release (&dce_tmp_bitmap_obstack);
     }
+
+  /* If DCE removes the last reference to a hard register, we want
+     to recompute REGS_EVER_LIVE and the global life information.
+
+     Ideally we'd look at REGS_EVER_LIVE before and after and only
+     rerun DF analysis if something changed.  */
+  if (!df_in_progress)
+    {
+      df_compute_regs_ever_live (true);
+      df_analyze ();
+    }
 }