OSDN Git Service

Backport from mainline
authorabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Oct 2012 08:25:16 +0000 (08:25 +0000)
committerabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Oct 2012 08:25:16 +0000 (08:25 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@192979 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/sel-sched-ir.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr48374.c [new file with mode: 0644]

index f2f24fc..12f2243 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 5516da9..13af1b5 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 b1b9400..bc1b206 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 ();
+    }
+}
+