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.

	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.

From-SVN: r233787
This commit is contained in:
Jeff Law 2016-02-27 23:34:20 -07:00 committed by Jeff Law
parent 460006a230
commit bd54250843
5 changed files with 22 additions and 45 deletions

View File

@ -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

View File

@ -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. */

View File

@ -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

View File

@ -1,12 +0,0 @@
char a;
short b;
void fn1() {
if (b)
;
else {
int c[1] = {0};
l1:;
}
if (a)
goto l1;
}

View File

@ -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();
}
}