mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-05 10:50:51 +08:00
re PR tree-optimization/87402 (ICE in set_ssa_val_to, at tree-ssa-sccvn.c:3645)
2018-09-25 Richard Biener <rguenther@suse.de> PR tree-optimization/87402 * tree-ssa-sccvn.c (SSA_VISITED): Remove unused function. (visit_phi): Re-instantiate handling of supposed to be VARYING but non-VARYING backedge value. * gcc.dg/torture/pr87402.c: New testcase. From-SVN: r264566
This commit is contained in:
parent
5d6749d1f2
commit
a0d013bdc2
@ -1,3 +1,10 @@
|
||||
2018-09-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/87402
|
||||
* tree-ssa-sccvn.c (SSA_VISITED): Remove unused function.
|
||||
(visit_phi): Re-instantiate handling of supposed to be VARYING
|
||||
but non-VARYING backedge value.
|
||||
|
||||
2018-09-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/83941
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-09-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/87402
|
||||
* gcc.dg/torture/pr87402.c: New testcase.
|
||||
|
||||
2018-09-25 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR testsuite/70150
|
||||
|
33
gcc/testsuite/gcc.dg/torture/pr87402.c
Normal file
33
gcc/testsuite/gcc.dg/torture/pr87402.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
void
|
||||
xl (int co)
|
||||
{
|
||||
int ar = 0;
|
||||
|
||||
if (ar != 0)
|
||||
{
|
||||
int pp, ll = 0;
|
||||
int *zx;
|
||||
|
||||
if (co == 0)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
zx = &pp;
|
||||
|
||||
if (co < 0)
|
||||
while (co < 1)
|
||||
{
|
||||
to:
|
||||
while (ll < 1)
|
||||
++ll;
|
||||
}
|
||||
|
||||
*zx = (__INTPTR_TYPE__)&ar;
|
||||
}
|
||||
}
|
||||
|
||||
goto to;
|
||||
}
|
@ -464,15 +464,6 @@ SSA_VAL (tree x, bool *visited = NULL)
|
||||
return tem && tem->visited ? tem->valnum : x;
|
||||
}
|
||||
|
||||
/* Return whether X was visited. */
|
||||
|
||||
inline bool
|
||||
SSA_VISITED (tree x)
|
||||
{
|
||||
vn_ssa_aux_t tem = vn_ssa_aux_hash->find_with_hash (x, SSA_NAME_VERSION (x));
|
||||
return tem && tem->visited;
|
||||
}
|
||||
|
||||
/* Return the SSA value of the VUSE x, supporting released VDEFs
|
||||
during elimination which will value-number the VDEF to the
|
||||
associated VUSE (but not substitute in the whole lattice). */
|
||||
@ -4196,7 +4187,10 @@ visit_phi (gimple *phi, bool *inserted, bool backedges_varying_p)
|
||||
}
|
||||
}
|
||||
|
||||
/* If we value-number a virtual operand never value-number to the
|
||||
/* If the value we want to use is flowing over the backedge and we
|
||||
should take it as VARYING but it has a non-VARYING value drop to
|
||||
VARYING.
|
||||
If we value-number a virtual operand never value-number to the
|
||||
value from the backedge as that confuses the alias-walking code.
|
||||
See gcc.dg/torture/pr87176.c. If the value is the same on a
|
||||
non-backedge everything is OK though. */
|
||||
@ -4204,7 +4198,8 @@ visit_phi (gimple *phi, bool *inserted, bool backedges_varying_p)
|
||||
&& !seen_non_backedge
|
||||
&& TREE_CODE (backedge_val) == SSA_NAME
|
||||
&& sameval == backedge_val
|
||||
&& SSA_NAME_IS_VIRTUAL_OPERAND (backedge_val))
|
||||
&& (SSA_NAME_IS_VIRTUAL_OPERAND (backedge_val)
|
||||
|| SSA_VAL (backedge_val) != backedge_val))
|
||||
/* Note this just drops to VARYING without inserting the PHI into
|
||||
the hashes. */
|
||||
result = PHI_RESULT (phi);
|
||||
|
Loading…
x
Reference in New Issue
Block a user