From f3a6a26f15ac52c88f80552cbd085791f395472d Mon Sep 17 00:00:00 2001 From: law Date: Thu, 21 Jan 2016 22:58:29 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232712 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/modulo-sched.c | 7 ++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/powerpc/pr69252.c | 28 ++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr69252.c 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 + + PR target/69252 + * modulo-sched.c (optimize_sc): Allow branch-scheduling to add a new + first stage. + 2016-01-21 Jeff Law 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 + + PR target/69252 + * gcc.target/powerpc/pr69252.c: New test. + 2016-01-21 Jerry DeLisle 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; +} + -- 2.7.4