diff options
author | Roman Zhuykov <zhroma@gcc.gnu.org> | 2019-04-23 12:53:43 +0000 |
---|---|---|
committer | Roman Zhuykov <zhroma@gcc.gnu.org> | 2019-04-23 12:53:43 +0000 |
commit | 8d64622fceaac7f27b6e7c35fca9f91236f34b8d (patch) | |
tree | 77aa4a640f4fda00d53364b6d16c115d179a6734 /gcc | |
parent | 038bc9bfd6dfd94336e0bebf416f1bbc3ed3272e (diff) | |
download | gcc-8d64622fceaac7f27b6e7c35fca9f91236f34b8d.zip gcc-8d64622fceaac7f27b6e7c35fca9f91236f34b8d.tar.gz gcc-8d64622fceaac7f27b6e7c35fca9f91236f34b8d.tar.bz2 |
modulo-sched: fix branch scheduling issue (PR84032)
PR rtl-optimization/84032
* modulo-sched.c (ps_insn_find_column): Change condition so that
branch will always be the last insn in a row inside partial
schedule.
testsuite:
PR rtl-optimization/84032
* gcc.dg/pr84032.c: New test.
From-SVN: r270511
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/modulo-sched.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr84032.c | 23 |
4 files changed, 38 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0823ca9..f710946 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-04-23 Roman Zhuykov <zhroma@ispras.ru> + + PR rtl-optimization/84032 + * modulo-sched.c (ps_insn_find_column): Change condition so that + branch will always be the last insn in a row inside partial + schedule. + 2019-04-23 Richard Biener <rguenther@suse.de> PR debug/90131 diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 7ead258..44014a0 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -2996,9 +2996,7 @@ ps_insn_find_column (partial_schedule_ptr ps, ps_insn_ptr ps_i, last_must_precede = next_ps_i; } /* The closing branch must be the last in the row. */ - if (must_precede - && bitmap_bit_p (must_precede, next_ps_i->id) - && JUMP_P (ps_rtl_insn (ps, next_ps_i->id))) + if (JUMP_P (ps_rtl_insn (ps, next_ps_i->id))) return false; last_in_row = next_ps_i; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c65641..029bad5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,12 +1,17 @@ +2019-04-23 Roman Zhuykov <zhroma@ispras.ru> + + PR rtl-optimization/84032 + * gcc.dg/pr84032.c: New test. + 2018-04-23 Bin Cheng <bin.cheng@linux.alibaba.com> PR tree-optimization/90078 - * gcc/testsuite/g++.dg/tree-ssa/pr90078.C: New test. + * g++.dg/tree-ssa/pr90078.C: New test. 2018-04-23 Bin Cheng <bin.cheng@linux.alibaba.com> PR tree-optimization/90021 - * gcc/testsuite/gfortran.dg/pr90021.f90: New test. + * gfortran.dg/pr90021.f90: New test. 2019-04-22 Steven G. Kargl <kargl@gcc.gnu.org> diff --git a/gcc/testsuite/gcc.dg/pr84032.c b/gcc/testsuite/gcc.dg/pr84032.c new file mode 100644 index 0000000..c295d9a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84032.c @@ -0,0 +1,23 @@ +/* PR rtl-optimization/84032 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fmodulo-sched" } */ +/* { dg-additional-options "-mcpu=power6" { target { powerpc-*-* } } } */ + +void +yr (int cm) +{ + int ka = cm; + + for (;;) + { + short int m0; + + for (m0 = 0; m0 < 6; ++m0) + { + ka &= 1; + cm *= 2; + } + + ka = (ka == 0) ? cm : 0; + } +} |