re PR tree-optimization/82217 (ICE on valid code at -O1 and above: in visit_phi, at tree-ssa-sccvn.c:3908)

2017-09-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82217
	* tree-ssa-sccvn.c (visit_phi): Properly handle all VN_TOP
	but not undefined case.

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

From-SVN: r252796
This commit is contained in:
Richard Biener 2017-09-15 09:19:36 +00:00 committed by Richard Biener
parent 854dde43ae
commit 897da3034c
4 changed files with 46 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2017-09-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/82217
* tree-ssa-sccvn.c (visit_phi): Properly handle all VN_TOP
but not undefined case.
2017-09-15 Jakub Jelinek <jakub@redhat.com>
PR target/82145

View File

@ -1,3 +1,8 @@
2017-09-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/82217
* gcc.dg/torture/pr82217.c: New testcase.
2017-09-15 Jakub Jelinek <jakub@redhat.com>
PR target/82145

View File

@ -0,0 +1,32 @@
/* { dg-do compile } */
int a, b, c;
void fn1 ()
{
while (1)
{
if (c)
goto L2;
break;
}
if (c)
{
L1:
{
int g[1];
if (b)
goto L1;
goto L1;
L2:
for (a = 0; a;)
goto L1;
}
}
}
int main ()
{
fn1 ();
return 0;
}

View File

@ -3901,13 +3901,10 @@ visit_phi (gimple *phi)
if only a single edge is exectuable use its value. */
if (n_executable <= 1)
result = seen_undef ? seen_undef : sameval;
/* If we saw only undefined values create a new undef SSA name to
avoid false equivalences. */
/* If we saw only undefined values and VN_TOP use one of the
undefined values. */
else if (sameval == VN_TOP)
{
gcc_assert (seen_undef);
result = seen_undef;
}
result = seen_undef ? seen_undef : sameval;
/* First see if it is equivalent to a phi node in this block. We prefer
this as it allows IV elimination - see PRs 66502 and 67167. */
else if ((result = vn_phi_lookup (phi)))