re PR tree-optimization/46107 (-ftree-loop-distribute-patterns caused verify_loop_structure problem)

PR tree-optimization/46107
	* cfgloopmanip.c (loop_version): Set irred_flag back into entry->flags
	if cfg_hook_duplicate_loop_to_header_edge failed.

	* gcc.c-torture/compile/pr46107.c: New test.

From-SVN: r166234
This commit is contained in:
Jakub Jelinek 2010-11-03 10:49:16 +01:00 committed by Jakub Jelinek
parent 48215350c2
commit 71056fef3b
4 changed files with 31 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2010-11-03 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/46107
* cfgloopmanip.c (loop_version): Set irred_flag back into entry->flags
if cfg_hook_duplicate_loop_to_header_edge failed.
2010-11-03 Ian Lance Taylor <iant@google.com>
PR lto/46273

View File

@ -1,6 +1,6 @@
/* Loop manipulation code for GNU compiler.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software
Foundation, Inc.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GCC.
@ -1538,7 +1538,10 @@ loop_version (struct loop *loop,
/* Duplicate loop. */
if (!cfg_hook_duplicate_loop_to_header_edge (loop, entry, 1,
NULL, NULL, NULL, 0))
return NULL;
{
entry->flags |= irred_flag;
return NULL;
}
/* After duplication entry edge now points to new loop head block.
Note down new head as second_head. */

View File

@ -1,5 +1,8 @@
2010-11-03 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/46107
* gcc.c-torture/compile/pr46107.c: New test.
PR debug/46252
* gcc.dg/pr46252.c: New test.

View File

@ -0,0 +1,16 @@
/* PR tree-optimization/46107 */
int foo (void) __attribute__ ((noreturn));
void
bar (int x, int *y, int z)
{
static void *j[] = { &&l1, &&l2 };
l1:
if (*y)
goto *j[z];
foo ();
l2:
*y ^= (x & 1) ? -1 : 0;
goto *j[x];
}