aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2014-02-18 09:41:29 +0400
committerAndrey Belevantsev <abel@gcc.gnu.org>2014-02-18 09:41:29 +0400
commitc4cd7435e4ace8e90561b659b810dd5a5841f77a (patch)
tree1bed52a7e0c474f02696375301f02d1025258742 /gcc/sched-rgn.c
parent877ae087f4ec1ca3505b0008f26ca92e2ef906e8 (diff)
downloadgcc-c4cd7435e4ace8e90561b659b810dd5a5841f77a.zip
gcc-c4cd7435e4ace8e90561b659b810dd5a5841f77a.tar.gz
gcc-c4cd7435e4ace8e90561b659b810dd5a5841f77a.tar.bz2
re PR rtl-optimization/58960 (ICE in bmp_iter_set_init)
PR rtl-optimization/58960 * haifa-sched.c (alloc_global_sched_pressure_data): New, factored out from ... (sched_init): ... here. (free_global_sched_pressure_data): New, factored out from ... (sched_finish): ... here. * sched-int.h (free_global_sched_pressure_data): Declare. * sched-rgn.c (nr_regions_initial): New static global. (haifa_find_rgns): Initialize it. (schedule_region): Disable sched-pressure for the newly generated regions. From-SVN: r207832
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r--gcc/sched-rgn.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 406dc1f..0573b6a 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -79,6 +79,9 @@ static int is_cfg_nonregular (void);
/* Number of regions in the procedure. */
int nr_regions = 0;
+/* Same as above before adding any new regions. */
+static int nr_regions_initial = 0;
+
/* Table of region descriptions. */
region *rgn_table = NULL;
@@ -1064,6 +1067,7 @@ haifa_find_rgns (void)
BLOCK_TO_BB (bb->index) = 0;
}
+ nr_regions_initial = nr_regions;
free (max_hdr);
free (degree);
free (stack);
@@ -2991,6 +2995,15 @@ schedule_region (int rgn)
rgn_n_insns = 0;
+ /* Do not support register pressure sensitive scheduling for the new regions
+ as we don't update the liveness info for them. */
+ if (rgn >= nr_regions_initial)
+ {
+ if (sched_pressure != SCHED_PRESSURE_NONE)
+ free_global_sched_pressure_data ();
+ sched_pressure = SCHED_PRESSURE_NONE;
+ }
+
rgn_setup_region (rgn);
/* Don't schedule region that is marked by