From a046136a50df8d31ec75e1dd2b1279d028431d51 Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Tue, 20 Aug 2013 15:14:49 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/dce.c | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 208b291a9c6..516d951f80c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-08-20 Alexey Makhalov + + * dce.c (fini_dce): Call df_analyze again just in case + delete_unmarked_insns removed anything. + 2013-08-20 Teresa Johnson PR rtl-optimizations/57451 diff --git a/gcc/dce.c b/gcc/dce.c index fa22316b5cc..c0dd87a2628 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 (); + } } -- 2.30.2