Schedule reduction partition in the last.
If reduction partition's SCC is broken by runtime alias checks, force a negative post order to it so that it will be scheduled in the last. 2020-07-09 Bin Cheng <bin.cheng@linux.alibaba.com> gcc/ PR tree-optimization/95804 * tree-loop-distribution.c (break_alias_scc_partitions): Force negative post order to reduction partition. gcc/testsuite/ PR tree-optimization/95804 * gcc.dg/tree-ssa/pr95804.c: New test.
This commit is contained in:
parent
5acef69f9d
commit
dd21b03900
18
gcc/testsuite/gcc.dg/tree-ssa/pr95804.c
Normal file
18
gcc/testsuite/gcc.dg/tree-ssa/pr95804.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR tree-optimization/95804 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3" } */
|
||||
|
||||
int a, b, c, d, e, f;
|
||||
void g() {
|
||||
short *h = (short*)&d;
|
||||
char *i = (char*)&b;
|
||||
for (; e; e++) {
|
||||
for (; f; f++) {
|
||||
b = 3;
|
||||
if ((c = 8) >= *i)
|
||||
a = 5 ? *h : 0;
|
||||
h = (short*)g;
|
||||
}
|
||||
i = (char*)&c;
|
||||
}
|
||||
}
|
@ -2509,10 +2509,25 @@ loop_distribution::break_alias_scc_partitions (struct graph *rdg,
|
||||
}
|
||||
}
|
||||
/* Restore the postorder information if it's corrupted in finding SCC
|
||||
with alias dependence edges skipped. */
|
||||
with alias dependence edges skipped. If reduction partition's SCC is
|
||||
broken by runtime alias checks, we force a negative post order to it
|
||||
making sure it will be scheduled in the last. */
|
||||
if (num_sccs_no_alias > 0)
|
||||
for (i = 0; i < pg->n_vertices; ++i)
|
||||
pg->vertices[i].post = cbdata.vertices_post[i];
|
||||
{
|
||||
j = -1;
|
||||
for (i = 0; i < pg->n_vertices; ++i)
|
||||
{
|
||||
pg->vertices[i].post = cbdata.vertices_post[i];
|
||||
struct pg_vdata *data = (struct pg_vdata *)pg->vertices[i].data;
|
||||
if (data->partition && partition_reduction_p (data->partition))
|
||||
{
|
||||
gcc_assert (j == -1);
|
||||
j = i;
|
||||
}
|
||||
}
|
||||
if (j >= 0)
|
||||
pg->vertices[j].post = -1;
|
||||
}
|
||||
|
||||
free (cbdata.vertices_component);
|
||||
free (cbdata.vertices_post);
|
||||
|
Loading…
Reference in New Issue
Block a user