aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/cfghooks.c15
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69740-1.c12
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69740-2.c19
5 files changed, 22 insertions, 45 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 57a81f3..85c6301 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2016-02-27 Jeff Law <law@redhat.com>
+
+ Revert
+ 2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * cfghooks.c (remove_edge): Request loop fixups if we delete
+ an edge that might turn an irreducible loop into a natural
+ loop.
+
2016-02-27 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/69896
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index 06c05d1..bbb1017 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -408,20 +408,7 @@ void
remove_edge (edge e)
{
if (current_loops != NULL)
- {
- rescan_loop_exit (e, false, true);
-
- /* Removal of an edge inside an irreducible region or which leads
- to an irreducible region can turn the region into a natural loop.
- In that case, ask for the loop structure fixups.
-
- FIXME: Note that LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS is not always
- set, so always ask for fixups when removing an edge in that case. */
- if (!loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
- || (e->flags & EDGE_IRREDUCIBLE_LOOP)
- || (e->dest->flags & BB_IRREDUCIBLE_LOOP))
- loops_state_set (LOOPS_NEED_FIXUP);
- }
+ rescan_loop_exit (e, false, true);
/* This is probably not needed, but it doesn't hurt. */
/* FIXME: This should be called via a remove_edge hook. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2c2102e..c809e2c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2016-02-27 Jeff Law <law@redhat.com>
+
+ Revert
+ 2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * gcc.c-torture/compile/pr69740-1.c: New test.
+ * gcc.c-torture/compile/pr69740-2.c: New test.
+
2016-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/69910
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c b/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c
deleted file mode 100644
index ac867d8..0000000
--- a/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c
+++ /dev/null
@@ -1,12 +0,0 @@
-char a;
-short b;
-void fn1() {
- if (b)
- ;
- else {
- int c[1] = {0};
- l1:;
- }
- if (a)
- goto l1;
-}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c b/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c
deleted file mode 100644
index a89c9a0..0000000
--- a/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c
+++ /dev/null
@@ -1,19 +0,0 @@
-inline int foo(int *p1, int p2) {
- int z = *p1;
- while (z > p2)
- p2 = 2;
- return z;
-}
-int main() {
- int i;
- for (;;) {
- int j, k;
- i = foo(&k, 7);
- if (k)
- j = i;
- else
- k = j;
- if (2 != j)
- __builtin_abort();
- }
-}