aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>2016-01-21 15:58:29 -0700
committerJeff Law <law@gcc.gnu.org>2016-01-21 15:58:29 -0700
commit38a516638d2ea1fd4dade9bd68ec720ff6fe52f0 (patch)
tree42264c67bcd24264dc9f2bd7ffa1da30ddf7b370 /gcc
parent7f370a2b0c2e613f1dcd47909f82e32033ae2381 (diff)
downloadgcc-38a516638d2ea1fd4dade9bd68ec720ff6fe52f0.zip
gcc-38a516638d2ea1fd4dade9bd68ec720ff6fe52f0.tar.gz
gcc-38a516638d2ea1fd4dade9bd68ec720ff6fe52f0.tar.bz2
re PR target/69252 (gcc.dg/vect/vect-iv-9.c FAILs with -Os -fmodulo-sched -fmodulo-sched-allow-regmoves -fsched-pressure)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/modulo-sched.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr69252.c28
4 files changed, 45 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c3908ea..113d841 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 3b6930f..5dde66c 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -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);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dad2c35..540e289 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..23334a9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr69252.c
@@ -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;
+}
+