+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
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 "
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,
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);
}
--- /dev/null
+/* 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;
+}
+