aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2017-07-03 07:23:01 +0000
committerTom de Vries <vries@gcc.gnu.org>2017-07-03 07:23:01 +0000
commitbe086ff50c79270411f14eec2d8f02c2b5bdb322 (patch)
treef038f1c503a53f4a60143e9abf2edddf027f23d9 /gcc
parent4752be4637d8250516dc0d8171b797de2b413d81 (diff)
downloadgcc-be086ff50c79270411f14eec2d8f02c2b5bdb322.zip
gcc-be086ff50c79270411f14eec2d8f02c2b5bdb322.tar.gz
gcc-be086ff50c79270411f14eec2d8f02c2b5bdb322.tar.bz2
Ignore EDGE_{DFS_BACK,EXECUTABLE} in tail-merge
2017-07-03 Tom de Vries <tom@codesourcery.com> PR tree-optimization/69468 * tree-ssa-tail-merge.c (ignore_edge_flags): New constant. (find_same_succ_bb): Handle ignore_edge_flags. * gcc.dg/pr81192.c: Update. From-SVN: r249895
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr81192.c2
-rw-r--r--gcc/tree-ssa-tail-merge.c4
4 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 18f23c0..c95a82f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2017-07-03 Tom de Vries <tom@codesourcery.com>
+ PR tree-optimization/69468
+ * tree-ssa-tail-merge.c (ignore_edge_flags): New constant.
+ (find_same_succ_bb): Handle ignore_edge_flags.
+
+2017-07-03 Tom de Vries <tom@codesourcery.com>
+
PR tree-optimization/81192
* tree-ssa-tail-merge.c (same_succ_hash): Use bb->loop_father->num in
hash.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 12d441e..c52c7a8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-07-03 Tom de Vries <tom@codesourcery.com>
+ PR tree-optimization/69468
+ * gcc.dg/pr81192.c: Update.
+
+2017-07-03 Tom de Vries <tom@codesourcery.com>
+
PR tree-optimization/81192
* gcc.dg/pr81192.c: Update.
diff --git a/gcc/testsuite/gcc.dg/pr81192.c b/gcc/testsuite/gcc.dg/pr81192.c
index 8b3a77a..57eb478 100644
--- a/gcc/testsuite/gcc.dg/pr81192.c
+++ b/gcc/testsuite/gcc.dg/pr81192.c
@@ -19,4 +19,4 @@ fn2 (void)
;
}
-/* { dg-final { scan-tree-dump-not "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" "pre" } } */
+/* { dg-final { scan-tree-dump-times "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" 1 "pre" } } */
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index 6fa4e5b..b11911b 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -207,6 +207,8 @@ along with GCC; see the file COPYING3. If not see
#include "tree-eh.h"
#include "tree-cfgcleanup.h"
+const int ignore_edge_flags = EDGE_DFS_BACK | EDGE_EXECUTABLE;
+
/* Describes a group of bbs with the same successors. The successor bbs are
cached in succs, and the successor edge flags are cached in succ_flags.
If a bb has the EDGE_TRUE/FALSE_VALUE flags swapped compared to succ_flags,
@@ -707,7 +709,7 @@ find_same_succ_bb (basic_block bb, same_succ **same_p)
{
int index = e->dest->index;
bitmap_set_bit (same->succs, index);
- same_succ_edge_flags[index] = e->flags;
+ same_succ_edge_flags[index] = (e->flags & ~ignore_edge_flags);
}
EXECUTE_IF_SET_IN_BITMAP (same->succs, 0, j, bj)
same->succ_flags.safe_push (same_succ_edge_flags[j]);