]> gcc.gnu.org Git - gcc.git/commitdiff
graphite-dependences.c (new_poly_dr_pair): Renamed new_poly_ddr.
authorSebastian Pop <sebastian.pop@amd.com>
Fri, 28 Aug 2009 20:27:56 +0000 (20:27 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Fri, 28 Aug 2009 20:27:56 +0000 (20:27 +0000)
2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>

* graphite-dependences.c (new_poly_dr_pair): Renamed new_poly_ddr.
(eq_poly_dr_pair_p): Renamed eq_poly_ddr_p.
(hash_poly_dr_pair_p): Renamed hash_poly_ddr_p.
(free_poly_ddr): New.
(pddr_is_empty): New.
(dependence_polyhedron_1): Now returns a poly_ddr_p.
(dependence_polyhedron): Same.  Remove useless gcc_assert.
Remove fprintfs.
(graphite_legal_transform_dr): Call pddr_is_empty and free_poly_ddr.
(graphite_carried_dependence_level_k): Call pddr_is_empty.
* graphite-dependences.h (enum poly_dependence_kind): New.
(poly_dr_pair): Renamed poly_ddr.  Added a field kind.
(PDRP_SOURCE): Renamed PDDR_SOURCE.
(PDRP_SINK): Renamed PDDR_SINK.
(PDRP_DDP): Renamed PDDR_DDP.
(PDDR_KIND): New.
(free_poly_ddr): Declared.
* graphite-poly.c (new_scop): Use the new hash function names.
* graphite-poly.h (struct scop): Renamed field original_pdr_pairs
into original_pddrs.
(SCOP_ORIGINAL_PDR_PAIRS): Renamed SCOP_ORIGINAL_PDDRS.

From-SVN: r151181

gcc/ChangeLog
gcc/ChangeLog.graphite
gcc/graphite-dependences.c
gcc/graphite-dependences.h
gcc/graphite-poly.c
gcc/graphite-poly.h

index 0105250838e10c7b913e2f0e9cb2a06704ad0b18..09a8259678cf192625fe14d8eb8a061e6f20a90b 100644 (file)
@@ -1,3 +1,27 @@
+2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * graphite-dependences.c (new_poly_dr_pair): Renamed new_poly_ddr.
+       (eq_poly_dr_pair_p): Renamed eq_poly_ddr_p.
+       (hash_poly_dr_pair_p): Renamed hash_poly_ddr_p.
+       (free_poly_ddr): New.
+       (pddr_is_empty): New.
+       (dependence_polyhedron_1): Now returns a poly_ddr_p.
+       (dependence_polyhedron): Same.  Remove useless gcc_assert.
+       Remove fprintfs.
+       (graphite_legal_transform_dr): Call pddr_is_empty and free_poly_ddr.
+       (graphite_carried_dependence_level_k): Call pddr_is_empty.
+       * graphite-dependences.h (enum poly_dependence_kind): New.
+       (poly_dr_pair): Renamed poly_ddr.  Added a field kind.
+       (PDRP_SOURCE): Renamed PDDR_SOURCE.
+       (PDRP_SINK): Renamed PDDR_SINK.
+       (PDRP_DDP): Renamed PDDR_DDP.
+       (PDDR_KIND): New.
+       (free_poly_ddr): Declared.
+       * graphite-poly.c (new_scop): Use the new hash function names.
+       * graphite-poly.h (struct scop): Renamed field original_pdr_pairs
+       into original_pddrs.
+       (SCOP_ORIGINAL_PDR_PAIRS): Renamed SCOP_ORIGINAL_PDDRS.
+
 2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>
 
        * cfgloopmanip.c (create_empty_loop_on_edge): Generate upper
index d7d1a6a56f31b03af5162f2c71542df72d5055de..f67bb3507ba9450309a4dfe65c4cc995569a8fe1 100644 (file)
@@ -1,3 +1,31 @@
+2009-08-21  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * graphite-dependences.c (new_poly_dr_pair): Renamed new_poly_ddr.
+       (eq_poly_dr_pair_p): Renamed eq_poly_ddr_p.
+       (hash_poly_dr_pair_p): Renamed hash_poly_ddr_p.
+       (free_poly_ddr): New.
+       (pddr_is_empty): New.
+       (dependence_polyhedron_1): Now returns a poly_ddr_p.
+       (dependence_polyhedron): Same.  Remove useless gcc_assert.
+       Remove fprintfs.
+       (graphite_legal_transform_dr): Call pddr_is_empty and free_poly_ddr.
+       (graphite_carried_dependence_level_k): Call pddr_is_empty.
+       * graphite-dependences.h (enum poly_dependence_kind): New.
+       (poly_dr_pair): Renamed poly_ddr.  Added a field kind.
+       (PDRP_SOURCE): Renamed PDDR_SOURCE.
+       (PDRP_SINK): Renamed PDDR_SINK.
+       (PDRP_DDP): Renamed PDDR_DDP.
+       (PDDR_KIND): New.
+       (free_poly_ddr): Declared.
+       * graphite-poly.c (new_scop): Use the new hash function names.
+       * graphite-poly.h (struct scop): Renamed field original_pdr_pairs
+       into original_pddrs.
+       (SCOP_ORIGINAL_PDR_PAIRS): Renamed SCOP_ORIGINAL_PDDRS.
+
+2009-08-21  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * Merge from mainline (150764:150992).
+
 2009-08-18  Sebastian Pop  <sebastian.pop@amd.com>
 
        * cfgloopmanip.c (create_empty_loop_on_edge): Generate upper
index ccb32d696674933ac4dc79b5091fc2174e3ab17c..5d7b50b7c510c8ef242b1917f8e829247a831681 100644 (file)
@@ -50,47 +50,73 @@ along with GCC; see the file COPYING3.  If not see
 #include "graphite-poly.h"
 #include "graphite-dependences.h"
 
-/* Creates a new polyhedral data reference pair and
-   returns it.  Parameter SOURCE denotes a source data reference
-   while parameter SINK denotes a sink data reference.  Both
-   SOURCE and SINK define a pair of references, thus they
-   define an edge in DDG (Data Dependence Graph).  */
-
-static poly_dr_pair_p
-new_poly_dr_pair (poly_dr_p source,
-                  poly_dr_p sink,
-                  ppl_Pointset_Powerset_C_Polyhedron_t ddp)
+/* Returns a new polyhedral Data Dependence Relation (DDR).  SOURCE is
+   the source data reference, SINK is the sink data reference.  SOURCE
+   and SINK define an edge in the Data Dependence Graph (DDG).  */
+
+static poly_ddr_p
+new_poly_ddr (poly_dr_p source, poly_dr_p sink,
+             ppl_Pointset_Powerset_C_Polyhedron_t ddp)
 {
-  poly_dr_pair_p pdrpp;
+  poly_ddr_p pddr;
+
+  pddr = XNEW (struct poly_ddr);
+  PDDR_SOURCE (pddr) = source;
+  PDDR_SINK (pddr) = sink;
+  PDDR_DDP (pddr) = ddp;
+  PDDR_KIND (pddr) = unknown_dependence;
+
+  return pddr;
+}
 
-  pdrpp = XNEW (struct poly_dr_pair);
-  pdrpp->source = source;
-  pdrpp->sink = sink;
-  pdrpp->ddp = ddp;
+/* Free the poly_ddr_p P.  */
 
-  return pdrpp;
+void
+free_poly_ddr (void *p)
+{
+  poly_ddr_p pddr = (poly_ddr_p) p;
+  ppl_delete_Pointset_Powerset_C_Polyhedron (PDDR_DDP (pddr));
+  free (pddr);
 }
 
-/* Comparison function for poly_dr_pair hash table.  */
+/* Comparison function for poly_ddr hash table.  */
 
 int
-eq_poly_dr_pair_p (const void *pdrpp1, const void *pdrpp2)
+eq_poly_ddr_p (const void *pddr1, const void *pddr2)
 {
-  const struct poly_dr_pair *p1 = (const struct poly_dr_pair *) pdrpp1;
-  const struct poly_dr_pair *p2 = (const struct poly_dr_pair *) pdrpp2;
+  const struct poly_ddr *p1 = (const struct poly_ddr *) pddr1;
+  const struct poly_ddr *p2 = (const struct poly_ddr *) pddr2;
 
-  return (p1->source == p2->source
-          && p1->sink == p2->sink);
+  return (PDDR_SOURCE (p1) == PDDR_SOURCE (p2)
+          && PDDR_SINK (p1) == PDDR_SINK (p2));
 }
 
-/* Hash function for poly_dr_pair hashtable.  */
+/* Hash function for poly_ddr hashtable.  */
 
 hashval_t
-hash_poly_dr_pair_p (const void *pdrpp)
+hash_poly_ddr_p (const void *pddr)
 {
-  const struct poly_dr_pair *p = (const struct poly_dr_pair *) pdrpp;
+  const struct poly_ddr *p = (const struct poly_ddr *) pddr;
+
+  return (hashval_t) ((long) PDDR_SOURCE (p) + (long) PDDR_SINK (p));
+}
+
+/* Returns true when PDDR has no dependence.  */
 
-  return (hashval_t) ((long) p->source + (long) p->sink);
+static bool
+pddr_is_empty (poly_ddr_p pddr)
+{
+  if (PDDR_KIND (pddr) != unknown_dependence)
+    return PDDR_KIND (pddr) == no_dependence ? true : false;
+
+  if (ppl_Pointset_Powerset_C_Polyhedron_is_empty (PDDR_DDP (pddr)))
+    {
+      PDDR_KIND (pddr) = no_dependence;
+      return true;
+    }
+
+  PDDR_KIND (pddr) = has_dependence;
+  return false;
 }
 
 /* Returns a polyhedron of dimension DIM.
@@ -364,7 +390,7 @@ build_lexicographically_gt_constraint (ppl_Pointset_Powerset_C_Polyhedron_t *res
 
 /* Build the dependence polyhedron for data references PDR1 and PDR2.  */
 
-static ppl_Pointset_Powerset_C_Polyhedron_t
+static poly_ddr_p
 dependence_polyhedron_1 (poly_bb_p pbb1, poly_bb_p pbb2,
                         ppl_Pointset_Powerset_C_Polyhedron_t d1,
                         ppl_Pointset_Powerset_C_Polyhedron_t d2,
@@ -427,13 +453,14 @@ dependence_polyhedron_1 (poly_bb_p pbb1, poly_bb_p pbb2,
   if (!ppl_Pointset_Powerset_C_Polyhedron_is_empty (res))
     build_lexicographically_gt_constraint (&res, dim, MIN (tdim1, tdim2),
                                           tdim1 + ddim1, direction);
-  return res;
+
+  return new_poly_ddr (pdr1, pdr2, res);
 }
 
 /* Build the dependence polyhedron for data references PDR1 and PDR2.
    If possible use already cached information.  */
 
-static ppl_Pointset_Powerset_C_Polyhedron_t
+static poly_ddr_p
 dependence_polyhedron (poly_bb_p pbb1, poly_bb_p pbb2,
                       ppl_Pointset_Powerset_C_Polyhedron_t d1,
                       ppl_Pointset_Powerset_C_Polyhedron_t d2,
@@ -442,38 +469,27 @@ dependence_polyhedron (poly_bb_p pbb1, poly_bb_p pbb2,
                       bool direction,
                       bool original_scattering_p)
 {
-  poly_dr_pair tmp;
   PTR *x = NULL;
-  ppl_Pointset_Powerset_C_Polyhedron_t res;
+  poly_ddr_p res;
 
   if (original_scattering_p)
     {
+      struct poly_ddr tmp;
+
       tmp.source = pdr1;
       tmp.sink = pdr2;
-      x = htab_find_slot (SCOP_ORIGINAL_PDR_PAIRS (PBB_SCOP (pbb1)),
+      x = htab_find_slot (SCOP_ORIGINAL_PDDRS (PBB_SCOP (pbb1)),
                           &tmp, INSERT);
 
       if (x && *x)
-        {
-          if (dump_file && (dump_flags & TDF_DETAILS))
-            fprintf (dump_file, "\nddp cache: hit.\n");
-          return ((poly_dr_pair *)*x)->ddp;
-        }
-      else if (dump_file && (dump_flags & TDF_DETAILS))
-        fprintf (dump_file, "\nddp cache: miss.\n");
+       return (poly_ddr_p) *x;
     }
 
   res = dependence_polyhedron_1 (pbb1, pbb2, d1, d2, pdr1, pdr2,
                                  s1, s2, direction, original_scattering_p);
 
   if (original_scattering_p)
-    {
-      gcc_assert (x && *x == NULL);
-      *x = new_poly_dr_pair (pdr1, pdr2, res);
-
-      if (dump_file && (dump_flags & TDF_DETAILS))
-        fprintf (dump_file, "\nddp cache: add element.\n");
-    }
+    *x = res;
 
   return res;
 }
@@ -487,12 +503,12 @@ graphite_legal_transform_dr (poly_bb_p pbb1, poly_bb_p pbb2,
                             poly_dr_p pdr1, poly_dr_p pdr2)
 {
   ppl_Polyhedron_t st1, st2;
-  ppl_Pointset_Powerset_C_Polyhedron_t pt;
+  ppl_Pointset_Powerset_C_Polyhedron_t po, pt;
   graphite_dim_t ddim1, otdim1, otdim2, ttdim1, ttdim2;
   ppl_Pointset_Powerset_C_Polyhedron_t temp;
   ppl_dimension_type pdim;
   bool is_empty_p;
-  ppl_Pointset_Powerset_C_Polyhedron_t po;
+  poly_ddr_p pddr;
 
   ppl_Pointset_Powerset_C_Polyhedron_t d1 = PBB_DOMAIN (pbb1);
   ppl_Pointset_Powerset_C_Polyhedron_t d2 = PBB_DOMAIN (pbb2);
@@ -504,12 +520,13 @@ graphite_legal_transform_dr (poly_bb_p pbb1, poly_bb_p pbb2,
   if (sdim1 != sdim2)
     return true;
 
-  po = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, so1, so2,
-                             true, true);
-
-  if (ppl_Pointset_Powerset_C_Polyhedron_is_empty (po))
+  pddr = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, so1, so2,
+                               true, true);
+  if (pddr_is_empty (pddr))
     return true;
 
+  po = PDDR_DDP (pddr);
+
   if (dump_file && (dump_flags & TDF_DETAILS))
     fprintf (dump_file, "\nloop carries dependency.\n");
 
@@ -528,8 +545,9 @@ graphite_legal_transform_dr (poly_bb_p pbb1, poly_bb_p pbb2,
   ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension (&temp, pdim, 0);
   ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (temp, po);
 
-  pt = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, st1, st2,
-                             false, false);
+  pddr = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, st1, st2,
+                               false, false);
+  pt = PDDR_DDP (pddr);
 
   /* Extend PO and PT to have the same dimensions.  */
   ppl_insert_dimensions_pointset (temp, otdim1, ttdim1);
@@ -541,7 +559,8 @@ graphite_legal_transform_dr (poly_bb_p pbb1, poly_bb_p pbb2,
   is_empty_p = ppl_Pointset_Powerset_C_Polyhedron_is_empty (temp);
 
   ppl_delete_Pointset_Powerset_C_Polyhedron (temp);
-  ppl_delete_Pointset_Powerset_C_Polyhedron (pt);
+  free_poly_ddr (pddr);
+
   return is_empty_p;
 }
 
@@ -646,8 +665,7 @@ poly_drs_may_alias_p (poly_dr_p pdr1, poly_dr_p pdr2)
 }
 
 /* Returns TRUE when the dependence polyhedron between PDR1 and
-   PDR2 represents a loop carried dependence at level LEVEL. Otherwise
-   return FALSE.  */
+   PDR2 represents a loop carried dependence at level LEVEL.  */
 
 static bool
 graphite_carried_dependence_level_k (poly_dr_p pdr1, poly_dr_p pdr2,
@@ -667,6 +685,7 @@ graphite_carried_dependence_level_k (poly_dr_p pdr1, poly_dr_p pdr2,
   graphite_dim_t ddim1 = pbb_dim_iter_domain (pbb1);
   ppl_dimension_type dim;
   bool empty_p;
+  poly_ddr_p pddr;
 
   if ((PDR_TYPE (pdr1) == PDR_READ && PDR_TYPE (pdr2) == PDR_READ)
       || !poly_drs_may_alias_p (pdr1, pdr2))
@@ -675,14 +694,17 @@ graphite_carried_dependence_level_k (poly_dr_p pdr1, poly_dr_p pdr2,
   if (sdim1 != sdim2)
     return true;
 
-  po = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, so1, so2,
-                             true, false);
-  if (ppl_Pointset_Powerset_C_Polyhedron_is_empty (po))
+  pddr = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, so1, so2,
+                               true, false);
+
+  if (pddr_is_empty (pddr))
     {
       ppl_delete_Pointset_Powerset_C_Polyhedron (po);
       return false;
     }
 
+  po = PDDR_DDP (pddr);
+
   ppl_Pointset_Powerset_C_Polyhedron_space_dimension (po, &dim);
   eqpp = build_pairwise_scheduling_inequality (dim, level, tdim1 + ddim1, 1);
 
index ccf0b971b2376133edfa0687be4b062a578d1c50..267d80ba9dd554aecdde5b8eaac16801e6986885 100644 (file)
@@ -24,27 +24,31 @@ along with GCC; see the file COPYING3.  If not see
 extern bool graphite_legal_transform (scop_p);
 extern bool dependency_between_pbbs_p (poly_bb_p, poly_bb_p, int);
 
-typedef struct poly_dr_pair *poly_dr_pair_p;
+enum poly_dependence_kind {
+  unknown_dependence,
+  no_dependence,
+  has_dependence
+};
 
-typedef struct poly_dr_pair
+typedef struct poly_ddr
 {
-  /* Source polyhedral data reference of the dependence.  */
-  poly_dr_p source;
+  /* Source and sink data references of the dependence.  */
+  poly_dr_p source, sink;
 
-  /* Sink data reference of the dependence.  */
-  poly_dr_p sink;
-
-  /* Data dependence polyhedron descibing dependence
-     between SOURCE and SINK data references.  */
+  /* Data dependence polyhedron.  */
   ppl_Pointset_Powerset_C_Polyhedron_t ddp;
-}poly_dr_pair;
 
+  enum poly_dependence_kind kind;
+
+} *poly_ddr_p;
 
-#define PDRP_SOURCE(PDRP) (PDR->source)
-#define PDRP_SINK(PDRP) (PDR->sink)
-#define PDRP_DDP(PDRP) (PDR->ddp)
+#define PDDR_SOURCE(PDDR) (PDDR->source)
+#define PDDR_SINK(PDDR) (PDDR->sink)
+#define PDDR_DDP(PDDR) (PDDR->ddp)
+#define PDDR_KIND(PDDR) (PDDR->kind)
 
-extern int eq_poly_dr_pair_p (const void *, const void *);
-extern hashval_t hash_poly_dr_pair_p (const void *);
+extern int eq_poly_ddr_p (const void *, const void *);
+extern hashval_t hash_poly_ddr_p (const void *);
+extern void free_poly_ddr (void *);
 
 #endif
index a5da8421eac6dca39d5b95e24aafa3e96139affc..3bc50d48e7b6891e2f5d014e1d4ecaea3fe2b912 100644 (file)
@@ -410,8 +410,8 @@ new_scop (void *region)
   SCOP_CONTEXT (scop) = NULL;
   scop_set_region (scop, region);
   SCOP_BBS (scop) = VEC_alloc (poly_bb_p, heap, 3);
-  SCOP_ORIGINAL_PDR_PAIRS (scop) = htab_create (10, hash_poly_dr_pair_p,
-                                                eq_poly_dr_pair_p, free);
+  SCOP_ORIGINAL_PDDRS (scop) = htab_create (10, hash_poly_ddr_p,
+                                           eq_poly_ddr_p, free_poly_ddr);
   return scop;
 }
 
@@ -431,7 +431,7 @@ free_scop (scop_p scop)
   if (SCOP_CONTEXT (scop))
     ppl_delete_Pointset_Powerset_C_Polyhedron (SCOP_CONTEXT (scop));
 
-  htab_delete (SCOP_ORIGINAL_PDR_PAIRS (scop));
+  htab_delete (SCOP_ORIGINAL_PDDRS (scop));
   XDELETE (scop);
 }
 
index 4459315b8a2c18742317015cc6865075b1acfb47..793c36225ed7ec2c900692c99276fe0fbebec8c2 100644 (file)
@@ -525,17 +525,16 @@ struct scop
      c = 2a + b  */
   ppl_Pointset_Powerset_C_Polyhedron_t context;
 
-  /* A hashtable of the original pairs of dependent data references.
-     For each pair of dependent data references, the dependence
-     polyhedron is stored also.  */
-  htab_t original_pdr_pairs;
+  /* A hashtable of the data dependence relations for the original
+     scattering.  */
+  htab_t original_pddrs;
 };
 
 #define SCOP_BBS(S) (S->bbs)
 #define SCOP_REGION(S) ((sese) S->region)
 #define SCOP_DEP_GRAPH(S) (S->dep_graph)
 #define SCOP_CONTEXT(S) (S->context)
-#define SCOP_ORIGINAL_PDR_PAIRS(S) (S->original_pdr_pairs)
+#define SCOP_ORIGINAL_PDDRS(S) (S->original_pddrs)
 
 extern scop_p new_scop (void *);
 extern void free_scop (scop_p);
This page took 0.124249 seconds and 5 git commands to generate.