re PR tree-optimization/84111 (Compile time hog w/ -O2)

PR tree-optimization/84111
	* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Skip
	inner loops added during recursion, as they don't have up-to-date
	SSA form.

	* gcc.c-torture/compile/pr84111.c: New test.

From-SVN: r257188
This commit is contained in:
Jakub Jelinek 2018-01-30 16:58:22 +01:00
parent 9efd61f83b
commit a59b07c1e1
4 changed files with 53 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2018-01-30 Richard Biener <rguenther@suse.de>
Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/84111
* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Skip
inner loops added during recursion, as they don't have up-to-date
SSA form.
2018-01-30 Jan Hubicka <hubicka@ucw.cz>
PR ipa/81360

View file

@ -1,3 +1,8 @@
2018-01-30 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/84111
* gcc.c-torture/compile/pr84111.c: New test.
2018-01-30 Jan Hubicka <hubicka@ucw.cz>
PR ipa/83179

View file

@ -0,0 +1,31 @@
/* PR tree-optimization/84111 */
void
foo (int x, int y, int z)
{
int a = 0;
int *b = &x;
while (a < 1)
{
int c = y;
*b = x;
lab:
for (a = 0; a < 36; ++a)
{
*b = 0;
if (x != 0)
y = 0;
while (c < 1)
;
}
}
if (z < 33)
{
b = (int *) 0;
++y;
++z;
if (x / *b != 0)
goto lab;
}
}

View file

@ -1373,13 +1373,17 @@ tree_unroll_loops_completely_1 (bool may_increase_size, bool unroll_outer,
bool changed = false;
struct loop *inner;
enum unroll_level ul;
unsigned num = number_of_loops (cfun);
/* Process inner loops first. */
/* Process inner loops first. Don't walk loops added by the recursive
calls because SSA form is not up-to-date. They can be handled in the
next iteration. */
for (inner = loop->inner; inner != NULL; inner = inner->next)
changed |= tree_unroll_loops_completely_1 (may_increase_size,
unroll_outer, father_bbs,
inner);
if ((unsigned) inner->num < num)
changed |= tree_unroll_loops_completely_1 (may_increase_size,
unroll_outer, father_bbs,
inner);
/* If we changed an inner loop we cannot process outer loops in this
iteration because SSA form is not up-to-date. Continue with
siblings of outer loops instead. */