From 724d06dd030aaa271e1583dfc9c6ecc541ddba48 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 22 Mar 2018 11:01:15 +0000 Subject: [PATCH] backport "[tail-merge] Don't merge bbs with bb_has_abnormal_pred" 2018-03-22 Tom de Vries backport from trunk: 2018-03-22 Tom de Vries 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 | 9 +++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr84956.c | 27 +++++++++++++++++++++++++++ gcc/tree-ssa-tail-merge.c | 4 ++-- 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr84956.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3ece77472e4..c9cc508e7fe4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-03-22 Tom de Vries + + backport from trunk: + 2018-03-22 Tom de Vries + + 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 Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 00b07d5f53e9..6f2176bfada8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-03-22 Tom de Vries + + backport from trunk: + 2018-03-22 Tom de Vries + + PR tree-optimization/84956 + * gcc.dg/pr84956.c: New test. + 2018-03-20 Steven G. Kargl ChangeLog entry for r258698 diff --git a/gcc/testsuite/gcc.dg/pr84956.c b/gcc/testsuite/gcc.dg/pr84956.c new file mode 100644 index 000000000000..055a749d6356 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84956.c @@ -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 (); }); +} + diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index 53bdd423fb36..a51b1b81740d 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -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)) -- 2.47.2