]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/45570 (ICE: in cfg_preds_1, at sel-sched-ir.c:4584)
authorAndrey Belevantsev <abel@ispras.ru>
Thu, 7 Apr 2011 06:50:08 +0000 (10:50 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Thu, 7 Apr 2011 06:50:08 +0000 (10:50 +0400)
        Backport from mainline
        2010-10-14  Andrey Belevantsev  <abel@ispras.ru>

        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.

From-SVN: r172077

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

index 60c7ad8d947cc1aa92383f547e140ea320e354e7..78d9d95ed447d9dfe7a32c1a71d66269fe1d3a81 100644 (file)
@@ -1,3 +1,13 @@
+2011-04-07  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2010-10-14  Andrey Belevantsev  <abel@ispras.ru>
+
+       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.
+
 2011-04-06  Joseph Myers  <joseph@codesourcery.com>
 
        * gcov-io.c: Use GCC Runtime Library Exception.
index 47dcf7397bad6659bb69ddb4f76b2fdc2305ce58..9ebfa76d6ebb88485aebe9021ee2c1075523ecbd 100644 (file)
@@ -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
index 7fef765c0cb409d4e31ef50b36511ae983d542ad..3d489c45e85becb5c1af2a5516079d183aac640f 100644 (file)
@@ -1,3 +1,10 @@
+2011-04-07  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2010-10-14  Andrey Belevantsev  <abel@ispras.ru>
+       PR rtl-optimization/45570
+       * gcc.dg/pr45570.c: New test.
+
 2011-03-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR target/16292
diff --git a/gcc/testsuite/gcc.dg/pr45570.c b/gcc/testsuite/gcc.dg/pr45570.c
new file mode 100644 (file)
index 0000000..8a25951
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O3 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -ftracer" } */
+void
+parser_get_next_char (char c, int qm, char *p)
+{
+  int quote_mode = 0;
+  for (; *p; p++)
+    {
+      if (qm)
+       {
+         if (quote_mode == 0 && *p == '"' && *(p - 1))
+           {
+             quote_mode = 1;
+             continue;
+           }
+         if (quote_mode && *p == '"' && *(p - 1))
+           quote_mode = 0;
+       }
+      if (quote_mode == 0 && *p == c && *(p - 1))
+       break;
+    }
+}
+
+void
+parser_get_next_parameter (char *p)
+{
+  parser_get_next_char (':', 1, p);
+}