re PR tree-optimization/68906 (ICE at -O3 on x86_64-linux-gnu: verify_ssa failed)
gcc/ 2015-12-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/68906 * tree-ssa-loop-unswitch.c (tree_unswitch_outer_loop): Add check that an exit block belongs to LOOP. gcc/testsuite/ 2015-12-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/68906 * gcc.dg/torture/pr68906.c: New test. From-SVN: r231812
This commit is contained in:
parent
b3d51f238b
commit
5c846df71f
|
@ -1,3 +1,9 @@
|
||||||
|
2015-12-18 Yuri Rumyantsev <ysrumyan@gmail.com>
|
||||||
|
|
||||||
|
PR tree-optimization/68906
|
||||||
|
* tree-ssa-loop-unswitch.c (tree_unswitch_outer_loop): Add check
|
||||||
|
that an exit block belongs to LOOP.
|
||||||
|
|
||||||
2015-12-18 Ilya Enkovich <enkovich.gnu@gmail.com>
|
2015-12-18 Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||||
|
|
||||||
PR tree-optimization/68956
|
PR tree-optimization/68956
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-12-18 Yuri Rumyantsev <ysrumyan@gmail.com>
|
||||||
|
|
||||||
|
PR tree-optimization/68906
|
||||||
|
* gcc.dg/torture/pr68906.c: New test.
|
||||||
|
|
||||||
2015-12-18 Ilya Enkovich <enkovich.gnu@gmail.com>
|
2015-12-18 Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||||
|
|
||||||
PR tree-optimization/68956
|
PR tree-optimization/68956
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O3" } */
|
||||||
|
|
||||||
|
int a;
|
||||||
|
volatile int b;
|
||||||
|
short c, d;
|
||||||
|
int
|
||||||
|
fn1 ()
|
||||||
|
{
|
||||||
|
int e;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
a = 3;
|
||||||
|
if (c)
|
||||||
|
continue;
|
||||||
|
e = 0;
|
||||||
|
for (; e > -30; e--)
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
int f = e;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -429,9 +429,9 @@ tree_unswitch_outer_loop (struct loop *loop)
|
||||||
gcc_assert (loop->inner);
|
gcc_assert (loop->inner);
|
||||||
if (loop->inner->next)
|
if (loop->inner->next)
|
||||||
return false;
|
return false;
|
||||||
/* Accept loops with single exit only. */
|
/* Accept loops with single exit only which is not from inner loop. */
|
||||||
exit = single_exit (loop);
|
exit = single_exit (loop);
|
||||||
if (!exit)
|
if (!exit || exit->src->loop_father != loop)
|
||||||
return false;
|
return false;
|
||||||
/* Check that phi argument of exit edge is not defined inside loop. */
|
/* Check that phi argument of exit edge is not defined inside loop. */
|
||||||
if (!check_exit_phi (loop))
|
if (!check_exit_phi (loop))
|
||||||
|
|
Loading…
Reference in New Issue