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:
parent
82ac9e4164
commit
2a58c80212
4 changed files with 49 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
34
gcc/testsuite/gcc.dg/torture/pr64357.c
Normal file
34
gcc/testsuite/gcc.dg/torture/pr64357.c
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue