diff options
author | abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-14 07:56:47 +0000 |
---|---|---|
committer | abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-14 07:56:47 +0000 |
commit | f1ec9c64a812649f29586e2d481d9bf28caf92c4 (patch) | |
tree | 213677380c72865d80aaf935571da2537753eb95 /gcc/sel-sched-ir.c | |
parent | 0424f393145c966d073c3329a694ba3526c734dc (diff) | |
download | gcc-f1ec9c64a812649f29586e2d481d9bf28caf92c4.tar.gz |
PR rtl-optimization/45570
* sel-sched-ir.c (cfg_preds_1): When walking out of the region, assert
that we are pipelining outer loops. Allow returning zero predecessors.
* gcc.dg/pr45570.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165454 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sel-sched-ir.c')
-rw-r--r-- | gcc/sel-sched-ir.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 34d5f51c272..f29f7116efc 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -4578,8 +4578,12 @@ cfg_preds_1 (basic_block bb, insn_t **preds, int *n, int *size) basic_block pred_bb = e->src; insn_t bb_end = BB_END (pred_bb); - /* ??? This code is not supposed to walk out of a region. */ - gcc_assert (in_current_region_p (pred_bb)); + if (!in_current_region_p (pred_bb)) + { + gcc_assert (flag_sel_sched_pipelining_outer_loops + && current_loop_nest); + continue; + } if (sel_bb_empty_p (pred_bb)) cfg_preds_1 (pred_bb, preds, n, size); @@ -4592,7 +4596,9 @@ cfg_preds_1 (basic_block bb, insn_t **preds, int *n, int *size) } } - gcc_assert (*n != 0); + gcc_assert (*n != 0 + || (flag_sel_sched_pipelining_outer_loops + && current_loop_nest)); } /* Find all predecessors of BB and record them in PREDS and their number |