middle-end: Fix phi-ssa assertion triggers. [PR106519]
For the diamond PHI form in tree_ssa_phiopt_worker we need to extract edge e2 sooner. This changes it so we extract it at the same time we determine we have a diamond shape. gcc/ChangeLog: PR middle-end/106519 * tree-ssa-phiopt.cc (tree_ssa_phiopt_worker): Check final phi edge for diamond shapes. gcc/testsuite/ChangeLog: PR middle-end/106519 * gcc.dg/pr106519.c: New test.
This commit is contained in:
parent
39579ba8de
commit
c832ec4c3e
2 changed files with 15 additions and 2 deletions
11
gcc/testsuite/gcc.dg/pr106519.c
Normal file
11
gcc/testsuite/gcc.dg/pr106519.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int bytestart, bytemem_0_0, modlookup_l_p;
|
||||
|
||||
void
|
||||
modlookup_l() {
|
||||
long j;
|
||||
while (modlookup_l_p)
|
||||
while (bytestart && j && bytemem_0_0)
|
||||
j = j + 1;
|
||||
}
|
|
@ -269,7 +269,10 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool do_hoist_loads, bool early_p)
|
|||
}
|
||||
else if (EDGE_SUCC (bb1, 0)->dest == EDGE_SUCC (bb2, 0)->dest
|
||||
&& !empty_block_p (bb1))
|
||||
diamond_p = true;
|
||||
{
|
||||
diamond_p = true;
|
||||
e2 = EDGE_SUCC (bb2, 0);
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
|
@ -324,7 +327,6 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool do_hoist_loads, bool early_p)
|
|||
if (!candorest)
|
||||
continue;
|
||||
|
||||
e2 = diamond_p ? EDGE_SUCC (bb2, 0) : e2;
|
||||
phi = single_non_singleton_phi_for_edges (phis, e1, e2);
|
||||
if (!phi)
|
||||
continue;
|
||||
|
|
Loading…
Add table
Reference in a new issue