diff options
author | Jeff Law <law@gcc.gnu.org> | 2016-01-21 15:58:29 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2016-01-21 15:58:29 -0700 |
commit | 38a516638d2ea1fd4dade9bd68ec720ff6fe52f0 (patch) | |
tree | 42264c67bcd24264dc9f2bd7ffa1da30ddf7b370 /gcc | |
parent | 7f370a2b0c2e613f1dcd47909f82e32033ae2381 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/modulo-sched.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr69252.c | 28 |
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; +} + |