tree-optimization/106533 - loop distribution of inner loop of nest
Loop distribution currently gives up if the outer loop of a loop nest it analyzes contains a stmt with side-effects instead of continuing to analyze the innermost loop. The following fixes that by continuing anyway. PR tree-optimization/106533 * tree-loop-distribution.cc (loop_distribution::execute): Continue analyzing the inner loops when find_seed_stmts_for_distribution fails. * gcc.dg/tree-ssa/ldist-39.c: New testcase.
This commit is contained in:
parent
4574dad43f
commit
36bc2a8f24
|
@ -0,0 +1,16 @@
|
|||
/* PR/106533 */
|
||||
/* { dg-options "-O2 -fdump-tree-ldist-optimized" } */
|
||||
|
||||
void bar (int *a, int * __restrict b)
|
||||
{
|
||||
for (int k = 0; k < 10; k++)
|
||||
{
|
||||
for (int j = 0; j < 100000; ++j)
|
||||
a[j] = b[j];
|
||||
__builtin_printf ("Foo!");
|
||||
}
|
||||
}
|
||||
|
||||
/* The stmt with side-effects in the outer loop should not prevent
|
||||
distribution of the inner loop of the loop nest. */
|
||||
/* { dg-final { scan-tree-dump "optimized: Loop . distributed: split to 0 loops and 1 library calls" "ldist" } } */
|
|
@ -3829,7 +3829,7 @@ loop_distribution::execute (function *fun)
|
|||
{
|
||||
auto_vec<gimple *> work_list;
|
||||
if (!find_seed_stmts_for_distribution (loop, &work_list))
|
||||
break;
|
||||
continue;
|
||||
|
||||
const char *str = loop->inner ? " nest" : "";
|
||||
dump_user_location_t loc = find_loop_location (loop);
|
||||
|
|
Loading…
Reference in New Issue