aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-07-05 13:25:19 +0000
committerRichard Biener <rguenther@suse.de>2016-07-05 13:25:19 +0000
commit16bba9b5d33a8b3c1240ff964eae9490615078e1 (patch)
tree242051bb452019038de6eb83b463e6dd9598172d
parentb88aa7dccc9a646459b1563972ffb0b6327b506b (diff)
2016-07-05 Richard Biener <rguenther@suse.de>
* tree-loop-distribution.c (distribute_loop): Fix issue with the cost model loop. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@238004 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-loop-distribution.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 93022ad89cb..ff4534683c3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-05 Richard Biener <rguenther@suse.de>
+
+ * tree-loop-distribution.c (distribute_loop): Fix issue with
+ the cost model loop.
+
2016-07-05 Christophe Lyon <christophe.lyon@linaro.org>
* config/arm/neon-testgen.ml: Delete.
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index e4163b274ff..9bca56a9b6f 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -1504,6 +1504,7 @@ distribute_loop (struct loop *loop, vec<gimple *> stmts,
memory accesses. */
for (i = 0; partitions.iterate (i, &into); ++i)
{
+ bool changed = false;
if (partition_builtin_p (into))
continue;
for (int j = i + 1;
@@ -1524,8 +1525,15 @@ distribute_loop (struct loop *loop, vec<gimple *> stmts,
partitions.unordered_remove (j);
partition_free (partition);
j--;
+ changed = true;
}
}
+ /* If we fused 0 1 2 in step 1 to 0,2 1 as 0 and 2 have similar
+ accesses when 1 and 2 have similar accesses but not 0 and 1
+ then in the next iteration we will fail to consider merging
+ 1 into 0,2. So try again if we did any merging into 0. */
+ if (changed)
+ i--;
}
/* Build the partition dependency graph. */