aboutsummaryrefslogtreecommitdiff
path: root/gcc/sel-sched.c
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2011-04-08 15:53:25 +0400
committerAlexander Monakov <amonakov@gcc.gnu.org>2011-04-08 15:53:25 +0400
commitea4d630fef8a13e6fa4a1db99b1d1057a0bd7a72 (patch)
tree586c2008cb2ba82b8fde6b577fb903af06659acd /gcc/sel-sched.c
parent07643d76c74845e250bdedca6b7148ebccff780b (diff)
downloadgcc-ea4d630fef8a13e6fa4a1db99b1d1057a0bd7a72.zip
gcc-ea4d630fef8a13e6fa4a1db99b1d1057a0bd7a72.tar.gz
gcc-ea4d630fef8a13e6fa4a1db99b1d1057a0bd7a72.tar.bz2
re PR rtl-optimization/48302 (ICE: SIGSEGV in reposition_prologue_and_epilogue_notes (function.c:5662) with -fcrossjumping -fselective-scheduling2)
PR rtl-optimization/48302 * sel-sched-ir.h (sel_add_loop_preheaders): Update prototype. * sel-sched-ir.c (sel_add_loop_preheaders): Add 'bbs' argument. Use it to record added preheader blocks. * sel-sched.c (setup_current_loop_nest): Add 'bbs' argument. Pass it on to sel_add_loop_preheaders. (sel_region_init): Move call to setup_current_loop_nest after sel_init_bbs. testsuite: * g++.dg/opt/pr48302.C: New. From-SVN: r172176
Diffstat (limited to 'gcc/sel-sched.c')
-rw-r--r--gcc/sel-sched.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index fb1a026..48fb2e0 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -6801,7 +6801,7 @@ current_region_empty_p (void)
/* Prepare and verify loop nest for pipelining. */
static void
-setup_current_loop_nest (int rgn)
+setup_current_loop_nest (int rgn, bb_vec_t *bbs)
{
current_loop_nest = get_loop_nest_for_rgn (rgn);
@@ -6810,7 +6810,7 @@ setup_current_loop_nest (int rgn)
/* If this loop has any saved loop preheaders from nested loops,
add these basic blocks to the current region. */
- sel_add_loop_preheaders ();
+ sel_add_loop_preheaders (bbs);
/* Check that we're starting with a valid information. */
gcc_assert (loop_latch_edge (current_loop_nest));
@@ -6849,9 +6849,6 @@ sel_region_init (int rgn)
if (current_region_empty_p ())
return true;
- if (flag_sel_sched_pipelining)
- setup_current_loop_nest (rgn);
-
sel_setup_region_sched_flags ();
bbs = VEC_alloc (basic_block, heap, current_nr_blocks);
@@ -6861,6 +6858,9 @@ sel_region_init (int rgn)
sel_init_bbs (bbs, NULL);
+ if (flag_sel_sched_pipelining)
+ setup_current_loop_nest (rgn, &bbs);
+
/* Initialize luids and dependence analysis which both sel-sched and haifa
need. */
sched_init_luids (bbs, NULL, NULL, NULL);