Test the profitability of interchange on the perfect nest.
authorSebastian Pop <sebastian.pop@amd.com>
Tue, 25 Jan 2011 06:45:04 +0000 (06:45 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Tue, 25 Jan 2011 06:45:04 +0000 (06:45 +0000)
2011-01-25  Sebastian Pop  <sebastian.pop@amd.com>

* graphite-interchange.c (lst_interchange_profitable_p): Takes a loop
nest and two loop depths as parameters.
(lst_try_interchange_loops): Call lst_interchange_profitable_p after
lst_perfect_nestify.

From-SVN: r169201

gcc/ChangeLog
gcc/ChangeLog.graphite
gcc/graphite-interchange.c

index 233f1b6d3c6d196c88f24d128c6b89d9f7ba0ade..8d13d2ce072b9798d678a024c59b8a7fb6505293 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-25  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * graphite-interchange.c (lst_interchange_profitable_p): Takes a loop
+       nest and two loop depths as parameters.
+       (lst_try_interchange_loops): Call lst_interchange_profitable_p after
+       lst_perfect_nestify.
+
 2011-01-25  Sebastian Pop  <sebastian.pop@amd.com>
 
        * graphite-dependences.c (print_pddr): Call
index 2dd40cc06494e5eca7f1e2b2e522d04ae9cae8ac..2363df6869727fb7edd9899bd80cd560a924dbae 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-15  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * graphite-interchange.c (lst_interchange_profitable_p): Takes a loop
+       nest and two loop depths as parameters.
+       (lst_try_interchange_loops): Call lst_interchange_profitable_p after
+       lst_perfect_nestify.
+
 2011-01-15  Sebastian Pop  <sebastian.pop@amd.com>
 
        * graphite-dependences.c (print_pddr): Call
index b90c4e77c2257a0aadd0b207b9dae1e02cc0a7d5..934839aace082ade6803d09e510ac15f28156f8b 100644 (file)
@@ -446,20 +446,18 @@ memory_strides_in_loop (lst_p loop, graphite_dim_t depth, mpz_t strides)
    profitable to interchange the loops at DEPTH1 and DEPTH2.  */
 
 static bool
-lst_interchange_profitable_p (lst_p loop1, lst_p loop2)
+lst_interchange_profitable_p (lst_p nest, int depth1, int depth2)
 {
   mpz_t d1, d2;
   bool res;
 
-  gcc_assert (loop1 && loop2
-             && LST_LOOP_P (loop1) && LST_LOOP_P (loop2)
-             && lst_depth (loop1) < lst_depth (loop2));
+  gcc_assert (depth1 < depth2);
 
   mpz_init (d1);
   mpz_init (d2);
 
-  memory_strides_in_loop (loop1, lst_depth (loop1), d1);
-  memory_strides_in_loop (loop2, lst_depth (loop2), d2);
+  memory_strides_in_loop (nest, depth1, d1);
+  memory_strides_in_loop (nest, depth2, d2);
 
   res = mpz_cmp (d1, d2) < 0;
 
@@ -592,12 +590,12 @@ lst_try_interchange_loops (scop_p scop, lst_p loop1, lst_p loop2)
 
   lst_p before = NULL, nest = NULL, after = NULL;
 
-  if (!lst_interchange_profitable_p (loop1, loop2))
-    return false;
-
   if (!lst_perfectly_nested_p (loop1, loop2))
     lst_perfect_nestify (loop1, loop2, &before, &nest, &after);
 
+  if (!lst_interchange_profitable_p (loop2, depth1, depth2))
+    return false;
+
   lst_apply_interchange (loop2, depth1, depth2);
 
   /* Sync the transformed LST information and the PBB scatterings