diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2019-04-01 19:32:24 +0300 |
---|---|---|
committer | Alexander Monakov <amonakov@gcc.gnu.org> | 2019-04-01 19:32:24 +0300 |
commit | 8bad0ced9fad845ef61bb3e27c38d004e0ab6d0f (patch) | |
tree | 79a64bb099de3cc7e50973fe262ceb4de2c694a4 | |
parent | 0d2a576a1417b8d4526d369fef1d87cee2c49f99 (diff) | |
download | gcc-8bad0ced9fad845ef61bb3e27c38d004e0ab6d0f.zip gcc-8bad0ced9fad845ef61bb3e27c38d004e0ab6d0f.tar.gz gcc-8bad0ced9fad845ef61bb3e27c38d004e0ab6d0f.tar.bz2 |
sel-sched: update liveness in redirect_edge_and_branch hooks (PR 86928)
2019-04-01 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/86928
* sel-sched-ir.c (sel_redirect_edge_and_branch_force): Invoke
compute_live if necessary.
(sel_redirect_edge_and_branch): Likewise.
* gcc.dg/pr86928.c: New test.
From-SVN: r270061
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/sel-sched-ir.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr86928.c | 25 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5016bd2..9afd09b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-04-01 Andrey Belevantsev <abel@ispras.ru> + + PR rtl-optimization/86928 + * sel-sched-ir.c (sel_redirect_edge_and_branch_force): Invoke + compute_live if necessary. + (sel_redirect_edge_and_branch): Likewise. + 2019-04-01 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/89865 diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index a658301..6dec1be 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -5637,6 +5637,8 @@ sel_redirect_edge_and_branch_force (edge e, basic_block to) recompute_dominator (CDI_DOMINATORS, to)); set_immediate_dominator (CDI_DOMINATORS, orig_dest, recompute_dominator (CDI_DOMINATORS, orig_dest)); + if (jump && sel_bb_head_p (jump)) + compute_live (jump); } /* A wrapper for redirect_edge_and_branch. Return TRUE if blocks connected by @@ -5697,6 +5699,8 @@ sel_redirect_edge_and_branch (edge e, basic_block to) set_immediate_dominator (CDI_DOMINATORS, orig_dest, recompute_dominator (CDI_DOMINATORS, orig_dest)); } + if (jump && sel_bb_head_p (jump)) + compute_live (jump); return recompute_toporder_p; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6fd17464..d194f4d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-04-01 Andrey Belevantsev <abel@ispras.ru> + PR rtl-optimization/86928 + * gcc.dg/pr86928.c: New test. + +2019-04-01 Andrey Belevantsev <abel@ispras.ru> + PR rtl-optimization/87273 * gcc.dg/pr87273.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr86928.c b/gcc/testsuite/gcc.dg/pr86928.c new file mode 100644 index 0000000..1586a36 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr86928.c @@ -0,0 +1,25 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fnon-call-exceptions -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fselective-scheduling -fno-if-conversion -fno-tree-dce -w" } */ +/* { dg-additional-options "-m32" { target powerpc*-*-* } } */ + +int kn; + +void +gd (short int sk) +{ + char *as; + + while (sk < 1) + { + char *ci; + + if (*ci == 0) + *as += ci; + + for (kn = 0; kn < 18; ++kn) + { + } + + ++sk; + } +} |