]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport "[tail-merge] Don't merge bbs with bb_has_abnormal_pred"
authorTom de Vries <tom@codesourcery.com>
Thu, 22 Mar 2018 11:01:15 +0000 (11:01 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 22 Mar 2018 11:01:15 +0000 (11:01 +0000)
2018-03-22  Tom de Vries  <tom@codesourcery.com>

backport from trunk:
2018-03-22  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/84956
* tree-ssa-tail-merge.c (find_clusters_1): Skip bbs with
bb_has_abnormal_pred.

* gcc.dg/pr84956.c: New test.

From-SVN: r258762

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr84956.c [new file with mode: 0644]
gcc/tree-ssa-tail-merge.c

index e3ece77472e4dd1c845ce7c99c96b253922da7c9..c9cc508e7fe4fe6187827405b20800d3aae5f770 100644 (file)
@@ -1,3 +1,12 @@
+2018-03-22  Tom de Vries  <tom@codesourcery.com>
+
+       backport from trunk:
+       2018-03-22  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/84956
+       * tree-ssa-tail-merge.c (find_clusters_1): Skip bbs with
+       bb_has_abnormal_pred.
+
 2018-03-18  John David Anglin  <danglin@gcc.gnu.org>
 
        Backport from mainline
index 00b07d5f53e9b5efd6eadb1a475a808d64cfc80d..6f2176bfada8e1d830befe46f734ec0b63d67832 100644 (file)
@@ -1,3 +1,11 @@
+2018-03-22  Tom de Vries  <tom@codesourcery.com>
+
+       backport from trunk:
+       2018-03-22  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/84956
+       * gcc.dg/pr84956.c: New test.
+
 2018-03-20  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        ChangeLog entry for r258698
diff --git a/gcc/testsuite/gcc.dg/pr84956.c b/gcc/testsuite/gcc.dg/pr84956.c
new file mode 100644 (file)
index 0000000..055a749
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-options "-O2 -ftree-tail-merge" } */
+
+char a;
+int c;
+unsigned b ();
+
+unsigned
+setjmp ()
+{
+}
+
+static void
+d ()
+{
+  if (b ())
+    c = 3;
+}
+
+void
+e ()
+{
+  d ();
+  a && ({ setjmp (); });
+  a && ({ setjmp (); });
+  a && ({ setjmp (); });
+}
+
index 53bdd423fb363c18d47d7fd8c7cf02827b37a4db..a51b1b81740d018d05a4a77fc11f69b6b94efe92 100644 (file)
@@ -1436,7 +1436,7 @@ find_clusters_1 (same_succ *same_succ)
       /* TODO: handle blocks with phi-nodes.  We'll have to find corresponding
         phi-nodes in bb1 and bb2, with the same alternatives for the same
         preds.  */
-      if (bb_has_non_vop_phi (bb1))
+      if (bb_has_non_vop_phi (bb1) || bb_has_abnormal_pred (bb1))
        continue;
 
       nr_comparisons = 0;
@@ -1444,7 +1444,7 @@ find_clusters_1 (same_succ *same_succ)
        {
          bb2 = BASIC_BLOCK_FOR_FN (cfun, j);
 
-         if (bb_has_non_vop_phi (bb2))
+         if (bb_has_non_vop_phi (bb2) || bb_has_abnormal_pred (bb2))
            continue;
 
          if (BB_CLUSTER (bb1) != NULL && BB_CLUSTER (bb1) == BB_CLUSTER (bb2))