aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2016-01-19 13:02:17 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2016-01-19 13:02:17 +0000
commitd20c47fc8613b26cd7d2c28996474bf910d865c5 (patch)
treebc66ac8bb00e285b27407568dcf8fa8a4e0d4f46 /gcc/ira.c
parente47294194f2f60fb7934c8203c4b5d59552919fb (diff)
downloadgcc-d20c47fc8613b26cd7d2c28996474bf910d865c5.zip
gcc-d20c47fc8613b26cd7d2c28996474bf910d865c5.tar.gz
gcc-d20c47fc8613b26cd7d2c28996474bf910d865c5.tar.bz2
* ira.c (ira): Update regstat data if we deleted insns.
From-SVN: r232556
Diffstat (limited to 'gcc/ira.c')
-rw-r--r--gcc/ira.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ira.c b/gcc/ira.c
index 7ac6a54..5259617 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -5185,19 +5185,27 @@ ira (FILE *f)
setup_reg_equiv ();
setup_reg_equiv_init ();
+ bool update_regstat = false;
+
if (optimize && rebuild_p)
{
timevar_push (TV_JUMP);
rebuild_jump_labels (get_insns ());
if (purge_all_dead_edges ())
- delete_unreachable_blocks ();
+ {
+ delete_unreachable_blocks ();
+ update_regstat = true;
+ }
timevar_pop (TV_JUMP);
}
allocated_reg_info_size = max_reg_num ();
if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
- df_analyze ();
+ {
+ df_analyze ();
+ update_regstat = true;
+ }
/* It is not worth to do such improvement when we use a simple
allocation because of -O0 usage or because the function is too
@@ -5308,7 +5316,7 @@ ira (FILE *f)
check_allocation ();
#endif
- if (max_regno != max_regno_before_ira)
+ if (update_regstat || max_regno != max_regno_before_ira)
{
regstat_free_n_sets_and_refs ();
regstat_free_ri ();