tree-optimization/106249 - unroll-and-jam and LC SSA upate

When I delayed the LC SSA update in unroll-and-jam this exposed
an issue that tree_transform_and_unroll_loop does a full function
LC SSA verification when new_loop is NULL (when it doesn't need to
do versioning).  That wasn't intended.  I also took the chance
to make the versioning in tree_transform_and_unroll_loop use
TODO_update_ssa_nophi for the loop versioning SSA update which
I somehow missed earlier.

	PR tree-optimization/106249
	* tree-ssa-loop-manip.cc (tree_transform_and_unroll_loop):
	Only verify LC SSA of the new_loop if we created it.
	Use TODO_update_ssa_nophi for the SSA update after versioning
	the loop.

	* gcc.dg/pr106249.c: New testcase.
This commit is contained in:
Richard Biener 2022-07-13 08:27:57 +02:00
parent 43997608a0
commit c479c40f8c
2 changed files with 19 additions and 2 deletions

View File

@ -0,0 +1,16 @@
/* { dg-do compile } */
/* { dg-options "-O -floop-unroll-and-jam --param unroll-jam-min-percent=0" } */
void
foo (double *arr)
{
int i, j;
for (i = 0; i < 4; ++i)
for (j = 0; j < 4; ++j)
arr[j] = 0;
for (i = 1; i < 4; ++i)
for (j = 0; j < 4; ++j)
arr[j] = 1.0 / (i + 1);
}

View File

@ -1208,7 +1208,7 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
profile_probability::guessed_always (),
true);
gcc_assert (new_loop != NULL);
update_ssa (TODO_update_ssa);
update_ssa (TODO_update_ssa_no_phi);
/* Prepare the cfg and update the phi nodes. Move the loop exit to the
loop latch (and make its condition dummy, for the moment). */
@ -1428,7 +1428,8 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
checking_verify_flow_info ();
checking_verify_loop_structure ();
checking_verify_loop_closed_ssa (true, loop);
checking_verify_loop_closed_ssa (true, new_loop);
if (new_loop)
checking_verify_loop_closed_ssa (true, new_loop);
}
/* Wrapper over tree_transform_and_unroll_loop for case we do not