]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-loop-distribution.c (distribute_loop): Fix issue with the cost model loop.
authorRichard Biener <rguenther@suse.de>
Tue, 5 Jul 2016 13:25:19 +0000 (13:25 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Jul 2016 13:25:19 +0000 (13:25 +0000)
2016-07-05  Richard Biener  <rguenther@suse.de>

* tree-loop-distribution.c (distribute_loop): Fix issue with
the cost model loop.

From-SVN: r238004

gcc/ChangeLog
gcc/tree-loop-distribution.c

index 93022ad89cbcedf5ba3b645d9a775230bdc2faa0..ff4534683c3176f692bb53ab048c133d228743de 100644 (file)
@@ -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.
index e4163b274ffde9b1dad255f12b552f08a014703c..9bca56a9b6f6682881a894052d1ba05c0e4bc16e 100644 (file)
@@ -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.  */