aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Makhalov <makhaloff@gmail.com>2013-08-20 15:14:49 +0000
committerJeff Law <law@gcc.gnu.org>2013-08-20 09:14:49 -0600
commita046136a50df8d31ec75e1dd2b1279d028431d51 (patch)
tree31ae97c38102764614a92faf7fac92a4df0b319e
parentbf7a6c1cb1535d89520daac4c9080dfc3ad02797 (diff)
downloadgcc-a046136a50df8d31ec75e1dd2b1279d028431d51.zip
gcc-a046136a50df8d31ec75e1dd2b1279d028431d51.tar.gz
gcc-a046136a50df8d31ec75e1dd2b1279d028431d51.tar.bz2
dce.c (fini_dce): Call df_analyze again just in case delete_unmarked_insns removed anything.
* dce.c (fini_dce): Call df_analyze again just in case delete_unmarked_insns removed anything. From-SVN: r201886
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/dce.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 208b291..516d951 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/dce.c b/gcc/dce.c
index fa22316b..c0dd87a 100644
--- 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 ();
+ }
}