]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/39453 (ICE : in init_seqno, at sel-sched.c:6433)
authorAlexander Monakov <amonakov@ispras.ru>
Thu, 14 Jan 2010 10:40:19 +0000 (13:40 +0300)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Thu, 14 Jan 2010 10:40:19 +0000 (13:40 +0300)
2010-01-14  Alexander Monakov  <amonakov@ispras.ru>

PR rtl-optimization/39453
PR rtl-optimization/42246
* sel-sched-ir.c (considered_for_pipelining_p): Do not test
for pipelining_p.
(sel_add_loop_preheaders): Add preheader to last_added_blocks.

* gcc.dg/pr39453.c: New.
* gcc.dg/pr42246.c: New.

From-SVN: r155892

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

index fda47c6414388bd3991075c53cad79f07e49a268..768e12598cc5fe8f55e305e0f55bbd0a1c63217f 100644 (file)
@@ -1,3 +1,11 @@
+2010-01-14  Alexander Monakov  <amonakov@ispras.ru>
+
+       PR rtl-optimization/39453
+       PR rtl-optimization/42246
+       * sel-sched-ir.c (considered_for_pipelining_p): Do not test
+       for pipelining_p.
+       (sel_add_loop_preheaders): Add preheader to last_added_blocks.
+
 2010-01-14  Andrey Belevantsev  <abel@ispras.ru>
            Alexander Monakov  <amonakov@ispras.ru>
 
index ad1dcb212de9757e68787d045e9bd2895a6cd526..218c04e5bf197817e7e7abf5bfd1236c9f0ea3db 100644 (file)
@@ -5883,7 +5883,7 @@ considered_for_pipelining_p (struct loop *loop)
      latch.  We can't use header here, because this header could be
      just removed preheader and it will give us the wrong region number.
      Latch can't be used because it could be in the inner loop too.  */
-  if (LOOP_MARKED_FOR_PIPELINING_P (loop) && pipelining_p)
+  if (LOOP_MARKED_FOR_PIPELINING_P (loop))
     {
       int rgn = CONTAINING_RGN (loop->latch->index);
 
@@ -6032,7 +6032,10 @@ sel_add_loop_preheaders (void)
   for (i = 0;
        VEC_iterate (basic_block, preheader_blocks, i, bb);
        i++)
+    {
+      VEC_safe_push (basic_block, heap, last_added_blocks, bb);
       sel_add_bb (bb);
+    }
 
   VEC_free (basic_block, heap, preheader_blocks);
 }
index 855b25673f87bde6a0fa9a0d88a4e1874a44278c..af31ac36ba27c19337725b8126065ef93c3aaab8 100644 (file)
@@ -1,3 +1,10 @@
+2010-01-14  Alexander Monakov <amonakov@ispras.ru>
+
+       PR rtl-optimization/39453
+       PR rtl-optimization/42246
+       * gcc.dg/pr39453.c: New.
+       * gcc.dg/pr42246.c: New.
+
 2010-01-14  Alexander Monakov <amonakov@ispras.ru>
 
        PR middle-end/42245
diff --git a/gcc/testsuite/gcc.dg/pr39453.c b/gcc/testsuite/gcc.dg/pr39453.c
new file mode 100644 (file)
index 0000000..66ecc3f
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops" } */
+
+int foo(int k, int n)
+{
+  int i;
+  for (i = 0; i < n; i += 8) {
+    int j;
+    for (j = 0; j < n; j += 8) {
+      while (k < n) {
+        k += 8;
+      }
+    }
+  }
+  return k;
+}
+
+
diff --git a/gcc/testsuite/gcc.dg/pr42246.c b/gcc/testsuite/gcc.dg/pr42246.c
new file mode 100644 (file)
index 0000000..ee17a21
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fselective-scheduling -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops" } */
+
+typedef enum
+{
+  empty = 0, pawn = 1, knight = 2, king = 3, bishop = 5, rook = 6, queen = 7
+}
+PIECE;
+extern int p_values[15];
+extern int *last[65];
+int
+Quiesce (int alpha, int beta, int wtm, int ply)
+{
+  register int initial_alpha, value, delta;
+  register int *goodmv, *movep, moves = 0, *sortv, temp;
+  for (movep = last[ply - 1]; movep < last[ply]; movep++)
+    if (p_values[(((*movep) >> 15) & 7) + 7] +
+        p_values[(((*movep) >> 18) & 7) + 7] >= delta)
+      {
+        register int done;
+        register int *end = last[ply - 1] + moves - 1;
+        do
+          {
+            done = 1;
+            movep = last[ply - 1];
+            for (; movep < end; movep++, sortv++)
+              if (*sortv < *(sortv + 1))
+                {
+                  *(movep + 1) = temp;
+                  done = 0;
+                }
+          }
+        while (!done);
+      }
+}
+