[committed] sel-sched: update liveness in redirect_edge_and_branch hooks (PR 86928)

Alexander Monakov amonakov@ispras.ru
Mon Apr 1 16:32:00 GMT 2019


Hi,

This patch by Andrey fixes PR 86928 by avoiding leaving basic blocks without
computed liveness info.

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.

diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index e8e508ef692..2f76e56ca8e 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -5642,6 +5642,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
@@ -5702,6 +5704,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/gcc.dg/pr86928.c b/gcc/testsuite/gcc.dg/pr86928.c
new file mode 100644
index 00000000000..1586a36f945
--- /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;
+    }
+}



More information about the Gcc-patches mailing list