]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/69252 (gcc.dg/vect/vect-iv-9.c FAILs with -Os -fmodulo-sched -fmodulo...
authorJeff Law <law@gcc.gnu.org>
Thu, 21 Jan 2016 22:58:29 +0000 (15:58 -0700)
committerJeff Law <law@gcc.gnu.org>
Thu, 21 Jan 2016 22:58:29 +0000 (15:58 -0700)
PR target/69252
* modulo-sched.c (optimize_sc): Allow branch-scheduling to add a new
first stage.

PR target/69252
* gcc.target/powerpc/pr69252.c: New test.

From-SVN: r232712

gcc/ChangeLog
gcc/modulo-sched.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr69252.c [new file with mode: 0644]

index c3908eac71d2ecd5b426da6ea9446ca2df218452..113d8416768dbaa61c546dd11be36f6aafd57a57 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-21  Roman Zhuykov  <zhroma@ispras.ru>
+
+       PR target/69252
+       * modulo-sched.c (optimize_sc): Allow branch-scheduling to add a new
+       first stage.
+
 2016-01-21  Jeff Law  <law@redhat.com>
 
        PR middle-end/69347
index 3b6930f965cbc2298716a3750f75675bc92fde6a..5dde66c09d38fc14a2286dfe40bfc1b5c8af269c 100644 (file)
@@ -985,7 +985,7 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g)
       int row = SMODULO (branch_cycle, ps->ii);
       int num_splits = 0;
       sbitmap must_precede, must_follow, tmp_precede, tmp_follow;
-      int c;
+      int min_cycle, c;
 
       if (dump_file)
        fprintf (dump_file, "\nTrying to schedule node %d "
@@ -1040,6 +1040,7 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g)
        if (next_ps_i->id == g->closing_branch->cuid)
          break;
 
+      min_cycle = PS_MIN_CYCLE (ps) - SMODULO (PS_MIN_CYCLE (ps), ps->ii);
       remove_node_from_ps (ps, next_ps_i);
       success =
        try_scheduling_node_in_cycle (ps, g->closing_branch->cuid, c,
@@ -1079,6 +1080,10 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g)
          ok = true;
        }
 
+      /* This might have been added to a new first stage.  */
+      if (PS_MIN_CYCLE (ps) < min_cycle)
+       reset_sched_times (ps, 0);
+
       free (must_precede);
       free (must_follow);
     }
index dad2c35bc411af95454330ffb2cad1ad0798ec83..540e28960ee1ee03df3314675f6644170b1cd1f1 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-21  Martin Sebor  <msebor@redhat.com>
+
+       PR target/69252
+       * gcc.target/powerpc/pr69252.c: New test.
+
 2016-01-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/65996
diff --git a/gcc/testsuite/gcc.target/powerpc/pr69252.c b/gcc/testsuite/gcc.target/powerpc/pr69252.c
new file mode 100644 (file)
index 0000000..23334a9
--- /dev/null
@@ -0,0 +1,28 @@
+/* PR target/69252 - [4.9/5/6 Regression] gcc.dg/vect/vect-iv-9.c FAILs
+   with -Os -fmodulo-sched -fmodulo-sched-allow-regmoves -fsched-pressure  */
+/* { dg-do run } */
+/* { dg-options "-Os -fmodulo-sched -fmodulo-sched-allow-regmoves -fsched-pressure " } */
+#define N 26
+int a[N];
+__attribute__ ((noinline, noclone))
+     int main1 (int X)
+{
+  int s = X;
+  int i;
+  for (i = 0; i < N; i++)
+    s += (i + a[i]);
+  return s;
+}
+
+int
+main (void)
+{
+  int s, i;
+  for (i = 0; i < N; i++)
+    a[i] = 2 * i;
+  s = main1 (3);
+  if (s != 978)
+    __builtin_abort ();
+  return 0;
+}
+