aboutsummaryrefslogtreecommitdiff
path: root/gcc/sel-sched-ir.c
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@gcc.gnu.org>2010-01-14 14:02:18 +0300
committerAndrey Belevantsev <abel@gcc.gnu.org>2010-01-14 14:02:18 +0300
commit762bffbac19855194ddcf644c332cee01be701be (patch)
tree165cee59cff3d4e82367f1cdae0dc08c4edabb65 /gcc/sel-sched-ir.c
parent14f30b877fe018475154a6e4d8979bc57528232d (diff)
downloadgcc-762bffbac19855194ddcf644c332cee01be701be.zip
gcc-762bffbac19855194ddcf644c332cee01be701be.tar.gz
gcc-762bffbac19855194ddcf644c332cee01be701be.tar.bz2
re PR rtl-optimization/42388 (ICE in move_bb_info with sel-sched and modulo-sched for 176.gcc)
PR rtl-optimization/42388 * sel-sched-ir.c (maybe_tidy_empty_bb): Do not delete empty blocks that have no predecessors nor successors. Do not call move_bb_info for empty blocks outside of current region. From-SVN: r155894
Diffstat (limited to 'gcc/sel-sched-ir.c')
-rw-r--r--gcc/sel-sched-ir.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index 218c04e..1353b4c 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -3540,12 +3540,15 @@ maybe_tidy_empty_bb (basic_block bb, bool recompute_toporder_p)
bool rescan_p;
/* Keep empty bb only if this block immediately precedes EXIT and
- has incoming non-fallthrough edge. Otherwise remove it. */
+ has incoming non-fallthrough edge, or it has no predecessors or
+ successors. Otherwise remove it. */
if (!sel_bb_empty_p (bb)
|| (single_succ_p (bb)
&& single_succ (bb) == EXIT_BLOCK_PTR
&& (!single_pred_p (bb)
- || !(single_pred_edge (bb)->flags & EDGE_FALLTHRU))))
+ || !(single_pred_edge (bb)->flags & EDGE_FALLTHRU)))
+ || EDGE_COUNT (bb->preds) == 0
+ || EDGE_COUNT (bb->succs) == 0)
return false;
/* Do not attempt to redirect complex edges. */
@@ -3595,7 +3598,8 @@ maybe_tidy_empty_bb (basic_block bb, bool recompute_toporder_p)
{
gcc_assert (pred_bb != NULL);
- move_bb_info (pred_bb, bb);
+ if (in_current_region_p (pred_bb))
+ move_bb_info (pred_bb, bb);
remove_empty_bb (bb, true);
}