Commit 6dc29d3a by Bin Cheng Committed by Bin Cheng

tree-loop-distribution.c (break_alias_scc_partitions): Add comment and set…

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
parent f0c216e1
2017-10-12 Bin Cheng <bin.cheng@arm.com>
* tree-loop-distribution.c (break_alias_scc_partitions): Add comment
and set PTYPE_SEQUENTIAL for merged partition.
2017-10-12 Richard Biener <rguenther@suse.de> 2017-10-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69728 PR tree-optimization/69728
...@@ -2066,7 +2066,7 @@ break_alias_scc_partitions (struct graph *rdg, ...@@ -2066,7 +2066,7 @@ break_alias_scc_partitions (struct graph *rdg,
auto_vec<enum partition_type> scc_types; auto_vec<enum partition_type> scc_types;
struct partition *partition, *first; 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. */ SCC. This loop finds out such SCCS and record them in bitmap. */
bitmap_set_range (sccs_to_merge, 0, (unsigned) num_sccs); bitmap_set_range (sccs_to_merge, 0, (unsigned) num_sccs);
for (i = 0; i < num_sccs; ++i) for (i = 0; i < num_sccs; ++i)
...@@ -2079,6 +2079,10 @@ break_alias_scc_partitions (struct graph *rdg, ...@@ -2079,6 +2079,10 @@ break_alias_scc_partitions (struct graph *rdg,
if (pg->vertices[j].component != i) if (pg->vertices[j].component != i)
continue; 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) if (first->type != partition->type)
{ {
bitmap_clear_bit (sccs_to_merge, i); bitmap_clear_bit (sccs_to_merge, i);
...@@ -2100,7 +2104,7 @@ break_alias_scc_partitions (struct graph *rdg, ...@@ -2100,7 +2104,7 @@ break_alias_scc_partitions (struct graph *rdg,
if (bitmap_count_bits (sccs_to_merge) != (unsigned) num_sccs) if (bitmap_count_bits (sccs_to_merge) != (unsigned) num_sccs)
{ {
/* Run SCC finding algorithm again, with alias dependence edges /* 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 compilation time known dependence. Note the topological order
is stored in the form of pg's post order number. */ is stored in the form of pg's post order number. */
num_sccs_no_alias = graphds_scc (pg, NULL, pg_skip_alias_edge); num_sccs_no_alias = graphds_scc (pg, NULL, pg_skip_alias_edge);
...@@ -2143,6 +2147,8 @@ break_alias_scc_partitions (struct graph *rdg, ...@@ -2143,6 +2147,8 @@ break_alias_scc_partitions (struct graph *rdg,
data = (struct pg_vdata *)pg->vertices[k].data; data = (struct pg_vdata *)pg->vertices[k].data;
gcc_assert (data->id == k); gcc_assert (data->id == k);
data->partition = NULL; data->partition = NULL;
/* The result partition of merged SCC must be sequential. */
first->type = PTYPE_SEQUENTIAL;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment