]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-data-ref.c (compute_self_dependence): New function.
authorSebastian Pop <pop@cri.ensmp.fr>
Fri, 3 Jun 2005 23:27:03 +0000 (01:27 +0200)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Fri, 3 Jun 2005 23:27:03 +0000 (23:27 +0000)
2005-06-03  Sebastian Pop  <pop@cri.ensmp.fr>

* tree-data-ref.c (compute_self_dependence): New function.
(compute_all_dependences): Use it.

From-SVN: r100565

gcc/ChangeLog
gcc/tree-data-ref.c

index 70c64b6eed0e7a68ee6638643473caedc2824975..fbdd7b1875b5d945072f64992c198be64d9d3672 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-03  Sebastian Pop  <pop@cri.ensmp.fr>
+       
+       * tree-data-ref.c (compute_self_dependence): New function.
+       (compute_all_dependences): Use it.
+
 2005-06-03  Geoffrey Keating  <geoffk@apple.com>
 
        * config/darwin.h (LINK_SPEC): Pass -syslibroot to linker
index c1fdb8ff53a56063ba21fe77348b7692a52ceb98..50b805b876c22f5d7ed9f710f4fa481455135d59 100644 (file)
@@ -2177,6 +2177,25 @@ compute_affine_dependence (struct data_dependence_relation *ddr)
     fprintf (dump_file, ")\n");
 }
 
+/* This computes the dependence relation for the same data
+   reference into DDR.  */
+
+static void
+compute_self_dependence (struct data_dependence_relation *ddr)
+{
+  unsigned int i;
+
+  for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
+    {
+      struct subscript *subscript = DDR_SUBSCRIPT (ddr, i);
+      
+      /* The accessed index overlaps for each iteration.  */
+      SUB_CONFLICTS_IN_A (subscript) = integer_zero_node;
+      SUB_CONFLICTS_IN_B (subscript) = integer_zero_node;
+      SUB_LAST_CONFLICT (subscript) = chrec_dont_know;
+    }
+}
+
 
 typedef struct data_dependence_relation *ddr_p;
 DEF_VEC_P(ddr_p);
@@ -2196,8 +2215,11 @@ compute_all_dependences (varray_type datarefs,
 
   N = VARRAY_ACTIVE_SIZE (datarefs);
 
+  /* Note that we specifically skip i == j because it's a self dependence, and
+     use compute_self_dependence below.  */
+
   for (i = 0; i < N; i++)
-    for (j = i; j < N; j++)
+    for (j = i + 1; j < N; j++)
       {
        struct data_reference *a, *b;
        struct data_dependence_relation *ddr;
@@ -2210,6 +2232,22 @@ compute_all_dependences (varray_type datarefs,
        compute_affine_dependence (ddr);
        compute_subscript_distance (ddr);
       }
+
+  /* Compute self dependence relation of each dataref to itself.  */
+
+  for (i = 0; i < N; i++)
+    {
+      struct data_reference *a, *b;
+      struct data_dependence_relation *ddr;
+
+      a = VARRAY_GENERIC_PTR (datarefs, i);
+      b = VARRAY_GENERIC_PTR (datarefs, i);
+      ddr = initialize_data_dependence_relation (a, b);
+
+      VEC_safe_push (ddr_p, heap, *dependence_relations, ddr);
+      compute_self_dependence (ddr);
+      compute_subscript_distance (ddr);
+    }
 }
 
 /* Search the data references in LOOP, and record the information into