re PR tree-optimization/85615 (ICE at -O2 and above on valid code on x86_64-linux-gnu: in dfs_enumerate_from, at cfganal.c:1197)
2018-05-03 Richard Biener <rguenther@suse.de> PR tree-optimization/85615 * tree-ssa-threadupdate.c (thread_block_1): Only allow exits to loops not nested in BBs loop father to avoid creating multi-entry loops. * gcc.dg/torture/pr85615.c: New testcase. From-SVN: r259891
This commit is contained in:
parent
b7244ccba7
commit
a378f85c54
@ -1,3 +1,10 @@
|
||||
2018-05-03 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/85615
|
||||
* tree-ssa-threadupdate.c (thread_block_1): Only allow exits
|
||||
to loops not nested in BBs loop father to avoid creating multi-entry
|
||||
loops.
|
||||
|
||||
2018-05-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
PR tree-optimization/70291
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-05-03 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/85615
|
||||
* gcc.dg/torture/pr85615.c: New testcase.
|
||||
|
||||
2018-05-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
PR tree-optimization/70291
|
||||
|
28
gcc/testsuite/gcc.dg/torture/pr85615.c
Normal file
28
gcc/testsuite/gcc.dg/torture/pr85615.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
long a, d;
|
||||
int b, c;
|
||||
void fn1()
|
||||
{
|
||||
int e = -1L, f = 2, g = 8;
|
||||
for (;;)
|
||||
{
|
||||
for (; b; g++)
|
||||
;
|
||||
int i;
|
||||
for (; c;)
|
||||
{
|
||||
i = 5;
|
||||
for (; e >= 1; i--)
|
||||
;
|
||||
}
|
||||
d = f ?: a;
|
||||
if (d)
|
||||
{
|
||||
e = 0;
|
||||
for (; i;)
|
||||
for (; g < 3; f++)
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
@ -1309,7 +1309,9 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners)
|
||||
and thread this elsewhere, so just cancel the jump threading
|
||||
request by clearing the AUX field now. */
|
||||
if (bb->loop_father != e2->src->loop_father
|
||||
&& !loop_exit_edge_p (e2->src->loop_father, e2))
|
||||
&& (!loop_exit_edge_p (e2->src->loop_father, e2)
|
||||
|| flow_loop_nested_p (bb->loop_father,
|
||||
e2->dest->loop_father)))
|
||||
{
|
||||
/* Since this case is not handled by our special code
|
||||
to thread through a loop header, we must explicitly
|
||||
|
Loading…
Reference in New Issue
Block a user