re PR tree-optimization/60891 (ICE: SIGSEGV (Invalid write/read) in pre_and_rev_post_order_compute_fn with -O -fno-tree-ch -fno-tree-cselim -fno-tree-dominator-opts)
2014-04-23 Richard Biener <rguenther@suse.de> PR middle-end/60891 * loop-init.c (loop_optimizer_init): Make sure to apply LOOPS_MAY_HAVE_MULTIPLE_LATCHES before fixing up loops. * gcc.dg/torture/pr60891.c: New testcase. From-SVN: r209673
This commit is contained in:
parent
1c33c9b70c
commit
92562f8869
4 changed files with 44 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-04-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/60891
|
||||
* loop-init.c (loop_optimizer_init): Make sure to apply
|
||||
LOOPS_MAY_HAVE_MULTIPLE_LATCHES before fixing up loops.
|
||||
|
||||
2014-04-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/60275
|
||||
|
|
|
@ -94,20 +94,15 @@ loop_optimizer_init (unsigned flags)
|
|||
else
|
||||
{
|
||||
bool recorded_exits = loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS);
|
||||
bool needs_fixup = loops_state_satisfies_p (LOOPS_NEED_FIXUP);
|
||||
|
||||
gcc_assert (cfun->curr_properties & PROP_loops);
|
||||
|
||||
/* Ensure that the dominators are computed, like flow_loops_find does. */
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
|
||||
if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
|
||||
{
|
||||
loops_state_clear (~0U);
|
||||
fix_loop_structure (NULL);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_CHECKING
|
||||
else
|
||||
if (!needs_fixup)
|
||||
verify_loop_structure ();
|
||||
#endif
|
||||
|
||||
|
@ -115,6 +110,14 @@ loop_optimizer_init (unsigned flags)
|
|||
if (recorded_exits)
|
||||
release_recorded_exits ();
|
||||
loops_state_clear (~0U);
|
||||
|
||||
if (needs_fixup)
|
||||
{
|
||||
/* Apply LOOPS_MAY_HAVE_MULTIPLE_LATCHES early as fix_loop_structure
|
||||
re-applies flags. */
|
||||
loops_state_set (flags & LOOPS_MAY_HAVE_MULTIPLE_LATCHES);
|
||||
fix_loop_structure (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Apply flags to loops. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-04-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/60891
|
||||
* gcc.dg/torture/pr60891.c: New testcase.
|
||||
|
||||
2014-04-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/60275
|
||||
|
|
23
gcc/testsuite/gcc.dg/torture/pr60891.c
Normal file
23
gcc/testsuite/gcc.dg/torture/pr60891.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fno-tree-ch -fno-tree-cselim -fno-tree-dominator-opts" } */
|
||||
|
||||
int a, b, c, d, e, f;
|
||||
|
||||
void foo (int x)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
int g = c;
|
||||
if (x)
|
||||
{
|
||||
if (e)
|
||||
while (a)
|
||||
--f;
|
||||
}
|
||||
for (b = 5; b; b--)
|
||||
{
|
||||
}
|
||||
if (!g)
|
||||
x = 0;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue