]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/48374 (ICE: in single_succ_edge, at basic-block...
authorAndrey Belevantsev <abel@ispras.ru>
Tue, 30 Oct 2012 08:25:16 +0000 (12:25 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Tue, 30 Oct 2012 08:25:16 +0000 (12:25 +0400)
        Backport from mainline
        2012-01-25 Andrey Belevantsev <abel@ispras.ru>

        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
gcc/sel-sched-ir.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr48374.c [new file with mode: 0644]

index f2f24fcaa9ae945d98244df1a1709a44d609c671..12f22438fab1e2a9abf9494d91a42a1bcd0d362a 100644 (file)
@@ -1,3 +1,11 @@
+2012-10-30  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-01-25 Andrey Belevantsev <abel@ispras.ru>
+       
+       PR rtl-optimization/48374
+       * sel-sched-ir.h (get_all_loop_exits): Check for zero successors.       
+
 2012-10-22  Andrey Belevantsev  <abel@ispras.ru>
 
        Backport from mainline
index 5516da9391f1555052ef9e865b7264c8289e27d3..13af1b56d2e19f4de70902387d8e9557a398f624 100644 (file)
@@ -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);
 
index b1b94006dac2792b07119047572dd7538f732e93..bc1b206f4731b2340d58d4b5c38b6092e3941905 100644 (file)
@@ -1,3 +1,11 @@
+2012-10-30  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-01-25 Andrey Belevantsev <abel@ispras.ru>
+
+       PR rtl-optimization/48374
+       * gcc.dg/pr48374.c: New test.
+
 2012-10-22  Andrey Belevantsev  <abel@ispras.ru>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/pr48374.c b/gcc/testsuite/gcc.dg/pr48374.c
new file mode 100644 (file)
index 0000000..24826d5
--- /dev/null
@@ -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 ();
+    }
+}
+