Patchwork [03/10] Test the profitability of interchange on the perfect nest.

login
register
mail settings
Submitter Sebastian Pop
Date Jan. 15, 2011, 9:05 a.m.
Message ID <1295082315-32242-4-git-send-email-sebpop@gmail.com>
Download mbox | patch
Permalink /patch/79035/
State New
Headers show

Comments

Sebastian Pop - Jan. 15, 2011, 9:05 a.m.
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.
---
 gcc/ChangeLog.graphite     |    7 +++++++
 gcc/graphite-interchange.c |   16 +++++++---------
 2 files changed, 14 insertions(+), 9 deletions(-)

Patch

diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index d3bb503..4324a6e 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,5 +1,12 @@ 
 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
 	ppl_io_fprint_Pointset_Powerset_C_Polyhedron.
 
diff --git a/gcc/graphite-interchange.c b/gcc/graphite-interchange.c
index b90c4e7..934839a 100644
--- a/gcc/graphite-interchange.c
+++ b/gcc/graphite-interchange.c
@@ -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