From 159d51479ca1df65e90b4b45ddfb19e160abdaf3 Mon Sep 17 00:00:00 2001 From: Andrey Belevantsev Date: Tue, 30 Oct 2012 12:25:16 +0400 Subject: [PATCH] backport: re PR rtl-optimization/48374 (ICE: in single_succ_edge, at basic-block.h:562 with -fselective-scheduling2 and __builtin_unreachable()) Backport from mainline 2012-01-25 Andrey Belevantsev PR rtl-optimization/48374 * sel-sched-ir.h (get_all_loop_exits): Check for zero successors. * gcc.dg/pr48374.c: New test. From-SVN: r192979 --- gcc/ChangeLog | 8 ++++++++ gcc/sel-sched-ir.h | 3 ++- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr48374.c | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr48374.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f2f24fcaa9ae..12f22438fab1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-10-30 Andrey Belevantsev + + Backport from mainline + 2012-01-25 Andrey Belevantsev + + PR rtl-optimization/48374 + * sel-sched-ir.h (get_all_loop_exits): Check for zero successors. + 2012-10-22 Andrey Belevantsev Backport from mainline diff --git a/gcc/sel-sched-ir.h b/gcc/sel-sched-ir.h index 5516da9391f1..13af1b56d2e1 100644 --- a/gcc/sel-sched-ir.h +++ b/gcc/sel-sched-ir.h @@ -1119,7 +1119,8 @@ get_all_loop_exits (basic_block bb) /* If bb is empty, and we're skipping to loop exits, then consider bb as a possible gate to the inner loop now. */ while (sel_bb_empty_or_nop_p (bb) - && in_current_region_p (bb)) + && in_current_region_p (bb) + && EDGE_COUNT (bb->succs) > 0) { bb = single_succ (bb); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b1b94006dac2..bc1b206f4731 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-10-30 Andrey Belevantsev + + Backport from mainline + 2012-01-25 Andrey Belevantsev + + PR rtl-optimization/48374 + * gcc.dg/pr48374.c: New test. + 2012-10-22 Andrey Belevantsev Backport from mainline diff --git a/gcc/testsuite/gcc.dg/pr48374.c b/gcc/testsuite/gcc.dg/pr48374.c new file mode 100644 index 000000000000..24826d5f885e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48374.c @@ -0,0 +1,17 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ +/* { dg-options "-O -fschedule-insns2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fselective-scheduling2 --param max-sched-extend-regions-iters=2" } */ + +void foo (int y) +{ + switch (y) + { + case 3: + case 5: + case 7: + case 11: + break; + default: + __builtin_unreachable (); + } +} + -- 2.47.2