tree-optimization/96491 - avoid store commoning across abnormal edges
This avoids store commoning across abnormal edges since that easily can disrupt abnormal coalescing because it might create overlapping lifetime of variables. 2020-08-06 Richard Biener <rguenther@suse.de> PR tree-optimization/96491 * tree-ssa-sink.c (sink_common_stores_to_bb): Avoid sinking across abnormal edges. * gcc.dg/torture/pr96491.c: New testcase.
This commit is contained in:
parent
1f4c8afa1b
commit
89b84cd794
2 changed files with 31 additions and 1 deletions
29
gcc/testsuite/gcc.dg/torture/pr96491.c
Normal file
29
gcc/testsuite/gcc.dg/torture/pr96491.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int rj;
|
||||
|
||||
void __attribute__ ((returns_twice))
|
||||
da (void)
|
||||
{
|
||||
rj = 1;
|
||||
}
|
||||
|
||||
void
|
||||
c5 (void)
|
||||
{
|
||||
for (;;)
|
||||
++rj;
|
||||
}
|
||||
|
||||
void
|
||||
ls (int kz)
|
||||
{
|
||||
if (kz == 0)
|
||||
{
|
||||
rj = 0;
|
||||
c5 ();
|
||||
}
|
||||
|
||||
da ();
|
||||
c5 ();
|
||||
}
|
|
@ -503,7 +503,8 @@ sink_common_stores_to_bb (basic_block bb)
|
|||
tree arg = gimple_phi_arg_def (phi, i);
|
||||
gimple *def = SSA_NAME_DEF_STMT (arg);
|
||||
if (! is_gimple_assign (def)
|
||||
|| stmt_can_throw_internal (cfun, def))
|
||||
|| stmt_can_throw_internal (cfun, def)
|
||||
|| (gimple_phi_arg_edge (phi, i)->flags & EDGE_ABNORMAL))
|
||||
{
|
||||
/* ??? We could handle some cascading with the def being
|
||||
another PHI. We'd have to insert multiple PHIs for
|
||||
|
|
Loading…
Add table
Reference in a new issue