aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2019-04-01 19:32:24 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2019-04-01 19:32:24 +0300
commit8bad0ced9fad845ef61bb3e27c38d004e0ab6d0f (patch)
tree79a64bb099de3cc7e50973fe262ceb4de2c694a4
parent0d2a576a1417b8d4526d369fef1d87cee2c49f99 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/sel-sched-ir.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr86928.c25
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;
+ }
+}