modulo-sched: fix branch rescheduling issue (PR92591)
PR rtl-optimization/92591 * modulo-sched.c (ps_add_node_check_conflicts): Improve checking for history > 0 case. testsuite: PR rtl-optimization/92591 * gcc.dg/pr92951-1.c: New test. * gcc.dg/pr92951-2.c: New test. From-SVN: r279377
This commit is contained in:
parent
c420be8b3c
commit
faab8a70f2
5 changed files with 53 additions and 15 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-12-13 Roman Zhuykov <zhroma@ispras.ru>
|
||||
|
||||
PR rtl-optimization/92591
|
||||
* modulo-sched.c (ps_add_node_check_conflicts): Improve checking
|
||||
for history > 0 case.
|
||||
|
||||
2019-12-13 Roman Zhuykov <zhroma@ispras.ru>
|
||||
|
||||
* modulo-sched.c (sms_schedule): Use param_sms_max_ii_factor
|
||||
|
@ -8,6 +14,7 @@
|
|||
|
||||
2019-12-13 Roman Zhuykov <zhroma@ispras.ru>
|
||||
|
||||
PR rtl-optimization/90001
|
||||
* ddg.c (create_ddg): Init max_dist array for each node.
|
||||
(free_ddg): Free max_dist array.
|
||||
(create_ddg_edge): Use bool field instead of aux union.
|
||||
|
|
|
@ -3197,7 +3197,7 @@ ps_add_node_check_conflicts (partial_schedule_ptr ps, int n,
|
|||
int c, sbitmap must_precede,
|
||||
sbitmap must_follow)
|
||||
{
|
||||
int has_conflicts = 0;
|
||||
int i, first, amount, has_conflicts = 0;
|
||||
ps_insn_ptr ps_i;
|
||||
|
||||
/* First add the node to the PS, if this succeeds check for
|
||||
|
@ -3205,23 +3205,32 @@ ps_add_node_check_conflicts (partial_schedule_ptr ps, int n,
|
|||
if (! (ps_i = add_node_to_ps (ps, n, c, must_precede, must_follow)))
|
||||
return NULL; /* Failed to insert the node at the given cycle. */
|
||||
|
||||
has_conflicts = ps_has_conflicts (ps, c, c)
|
||||
|| (ps->history > 0
|
||||
&& ps_has_conflicts (ps,
|
||||
c - ps->history,
|
||||
c + ps->history));
|
||||
|
||||
/* Try different issue slots to find one that the given node can be
|
||||
scheduled in without conflicts. */
|
||||
while (has_conflicts)
|
||||
while (1)
|
||||
{
|
||||
has_conflicts = ps_has_conflicts (ps, c, c);
|
||||
if (ps->history > 0 && !has_conflicts)
|
||||
{
|
||||
/* Check all 2h+1 intervals, starting from c-2h..c up to c..2h,
|
||||
but not more than ii intervals. */
|
||||
first = c - ps->history;
|
||||
amount = 2 * ps->history + 1;
|
||||
if (amount > ps->ii)
|
||||
amount = ps->ii;
|
||||
for (i = first; i < first + amount; i++)
|
||||
{
|
||||
has_conflicts = ps_has_conflicts (ps,
|
||||
i - ps->history,
|
||||
i + ps->history);
|
||||
if (has_conflicts)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!has_conflicts)
|
||||
break;
|
||||
/* Try different issue slots to find one that the given node can be
|
||||
scheduled in without conflicts. */
|
||||
if (! ps_insn_advance_column (ps, ps_i, must_follow))
|
||||
break;
|
||||
has_conflicts = ps_has_conflicts (ps, c, c)
|
||||
|| (ps->history > 0
|
||||
&& ps_has_conflicts (ps,
|
||||
c - ps->history,
|
||||
c + ps->history));
|
||||
}
|
||||
|
||||
if (has_conflicts)
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2019-12-13 Roman Zhuykov <zhroma@ispras.ru>
|
||||
|
||||
PR rtl-optimization/92591
|
||||
* gcc.dg/pr92951-1.c: New test.
|
||||
* gcc.dg/pr92951-2.c: New test.
|
||||
|
||||
2019-12-13 Dennis Zhang <dennis.zhang@arm.com>
|
||||
|
||||
* gcc.target/aarch64/pragma_cpp_predefs_2.c: Add tests for i8mm
|
||||
|
|
11
gcc/testsuite/gcc.dg/pr92951-1.c
Normal file
11
gcc/testsuite/gcc.dg/pr92951-1.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* PR rtl-optimization/92591 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fmodulo-sched -fweb -fno-dce -fno-ivopts -fno-sched-pressure -fno-tree-loop-distribute-patterns --param sms-dfa-history=1" } */
|
||||
/* { dg-additional-options "-mcpu=e500mc" { target { powerpc-*-* } } } */
|
||||
|
||||
void
|
||||
wf (char *mr, int tc)
|
||||
{
|
||||
while (tc-- > 0)
|
||||
*mr++ = 0;
|
||||
}
|
5
gcc/testsuite/gcc.dg/pr92951-2.c
Normal file
5
gcc/testsuite/gcc.dg/pr92951-2.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* PR rtl-optimization/92591 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os -fmodulo-sched -fmodulo-sched-allow-regmoves --param sms-dfa-history=8" } */
|
||||
|
||||
#include "../gcc.c-torture/execute/pr61682.c"
|
Loading…
Add table
Reference in a new issue