aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr94125.c41
-rw-r--r--gcc/tree-loop-distribution.c13
4 files changed, 58 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6718f71..53c9622 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2020-03-16 Bin Cheng <bin.cheng@linux.alibaba.com>
+
+ PR tree-optimization/94125
+ * tree-loop-distribution.c
+ (loop_distribution::break_alias_scc_partitions): Update post order
+ number for merged scc.
+
2020-03-15 H.J. Lu <hongjiu.lu@intel.com>
PR target/89229
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f79f1c7..ab04066 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-03-16 Bin Cheng <bin.cheng@linux.alibaba.com>
+
+ PR tree-optimization/94125
+ * gcc.dg/tree-ssa/pr94125.c: New test.
+
2020-03-15 H.J. Lu <hongjiu.lu@intel.com>
PR target/89229
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr94125.c b/gcc/testsuite/gcc.dg/tree-ssa/pr94125.c
new file mode 100644
index 0000000..c339e51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr94125.c
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+
+unsigned char b, f;
+short d[1][8][1], *g = &d[0][3][0];
+
+void __attribute__((noinline)) foo ()
+{
+ int k[256] = { 0, 0, 0, 4, 0, 0 };
+ for (int c = 252; c >= 0; c--)
+ {
+ b = f;
+ *g = k[c + 3];
+ k[c + 1] = 0;
+ }
+ for (int i = 0; i < 8; i++)
+ if (d[0][i][0] != 0)
+ __builtin_abort ();
+}
+
+void __attribute__((noinline)) bar ()
+{
+ int k[256] = { 0, 0, 0, 4, 0, 0 };
+ k[255] = 4;
+ for (int c = 0; c <=252; c++)
+ {
+ b = f;
+ *g = k[c + 3];
+ k[c + 1] = 0;
+ }
+ for (int i = 0; i < 8; i++)
+ if ((i == 3 && d[0][i][0] != 4) || (i != 3 && d[0][i][0] != 0))
+ __builtin_abort ();
+}
+
+int main ()
+{
+ foo ();
+ bar ();
+ return 0;
+}
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 35d3821..4442321 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -2489,14 +2489,11 @@ loop_distribution::break_alias_scc_partitions (struct graph *rdg,
if (cbdata.vertices_component[k] != i)
continue;
- /* Update postorder number so that merged reduction partition is
- sorted after other partitions. */
- if (!partition_reduction_p (first)
- && partition_reduction_p (partition))
- {
- gcc_assert (pg->vertices[k].post < pg->vertices[j].post);
- pg->vertices[j].post = pg->vertices[k].post;
- }
+ /* Update to the minimal postordeer number of vertices in scc so
+ that merged partition is sorted correctly against others. */
+ if (pg->vertices[j].post > pg->vertices[k].post)
+ pg->vertices[j].post = pg->vertices[k].post;
+
partition_merge_into (NULL, first, partition, FUSE_SAME_SCC);
(*partitions)[k] = NULL;
partition_free (partition);