re PR tree-optimization/64357 (ICE at -Os on x86_64-linux-gnu in check_loop_closed_ssa_use, at tree-ssa-loop-manip.c:579)

2015-01-12  Richard Biener  <rguenther@suse.de>

	PR middle-end/64357
	* tree-cfg.c (gimple_can_merge_blocks_p): Protect simple
	latches properly.

	* gcc.dg/torture/pr64357.c: New testcase.

From-SVN: r219473
This commit is contained in:
Richard Biener 2015-01-12 15:34:37 +00:00 committed by Richard Biener
parent 82ac9e4164
commit 2a58c80212
4 changed files with 49 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2015-01-12 Richard Biener <rguenther@suse.de>
PR middle-end/64357
* tree-cfg.c (gimple_can_merge_blocks_p): Protect simple
latches properly.
2015-01-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm.c (arm_cortex_a12_tune): Update entries to match

View File

@ -1,3 +1,8 @@
2015-01-12 Richard Biener <rguenther@suse.de>
PR middle-end/64357
* gcc.dg/torture/pr64357.c: New testcase.
2015-01-12 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/nop-mcount.c: Properly place {} in target

View File

@ -0,0 +1,34 @@
/* { dg-do compile } */
int a, b, c, d, e, f;
long long
fn1 (int p)
{
return p ? p : 1;
}
static int
fn2 ()
{
lbl:
for (; f;)
return 0;
for (;;)
{
for (b = 0; b; ++b)
if (d)
goto lbl;
c = e;
}
}
void
fn3 ()
{
for (; a; a = fn1 (a))
{
fn2 ();
e = 0;
}
}

View File

@ -1723,11 +1723,13 @@ gimple_can_merge_blocks_p (basic_block a, basic_block b)
}
/* Protect simple loop latches. We only want to avoid merging
the latch with the loop header in this case. */
the latch with the loop header or with a block in another
loop in this case. */
if (current_loops
&& b->loop_father->latch == b
&& loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES)
&& b->loop_father->header == a)
&& (b->loop_father->header == a
|| b->loop_father != a->loop_father))
return false;
/* It must be possible to eliminate all phi nodes in B. If ssa form