From 6dc29d3adcadf6f138898a3f43663f806c1a41ce Mon Sep 17 00:00:00 2001 From: Bin Cheng Date: Thu, 12 Oct 2017 14:25:36 +0000 Subject: [PATCH] tree-loop-distribution.c (break_alias_scc_partitions): Add comment and set PTYPE_SEQUENTIAL for merged partition. * tree-loop-distribution.c (break_alias_scc_partitions): Add comment and set PTYPE_SEQUENTIAL for merged partition. From-SVN: r253678 --- gcc/ChangeLog | 5 +++++ gcc/tree-loop-distribution.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cba344bc301..d0eb1670720 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-10-12 Bin Cheng + + * tree-loop-distribution.c (break_alias_scc_partitions): Add comment + and set PTYPE_SEQUENTIAL for merged partition. + 2017-10-12 Richard Biener PR tree-optimization/69728 diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 98ad50e5e7a..8e8ac7ed531 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -2066,7 +2066,7 @@ break_alias_scc_partitions (struct graph *rdg, auto_vec scc_types; struct partition *partition, *first; - /* If all paritions in a SCC has the same type, we can simply merge the + /* If all partitions in a SCC have the same type, we can simply merge the SCC. This loop finds out such SCCS and record them in bitmap. */ bitmap_set_range (sccs_to_merge, 0, (unsigned) num_sccs); for (i = 0; i < num_sccs; ++i) @@ -2079,6 +2079,10 @@ break_alias_scc_partitions (struct graph *rdg, if (pg->vertices[j].component != i) continue; + /* Note we Merge partitions of parallel type on purpose, though + the result partition is sequential. The reason is vectorizer + can do more accurate runtime alias check in this case. Also + it results in more conservative distribution. */ if (first->type != partition->type) { bitmap_clear_bit (sccs_to_merge, i); @@ -2100,7 +2104,7 @@ break_alias_scc_partitions (struct graph *rdg, if (bitmap_count_bits (sccs_to_merge) != (unsigned) num_sccs) { /* Run SCC finding algorithm again, with alias dependence edges - skipped. This is to topologically sort paritions according to + skipped. This is to topologically sort partitions according to compilation time known dependence. Note the topological order is stored in the form of pg's post order number. */ num_sccs_no_alias = graphds_scc (pg, NULL, pg_skip_alias_edge); @@ -2143,6 +2147,8 @@ break_alias_scc_partitions (struct graph *rdg, data = (struct pg_vdata *)pg->vertices[k].data; gcc_assert (data->id == k); data->partition = NULL; + /* The result partition of merged SCC must be sequential. */ + first->type = PTYPE_SEQUENTIAL; } } } -- 2.30.2