aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.c
diff options
context:
space:
mode:
authorSebastian Pop <pop@cri.ensmp.fr>2005-06-04 01:27:03 +0200
committerDaniel Berlin <dberlin@gcc.gnu.org>2005-06-03 23:27:03 +0000
commit789246d71aa4607e71ce1a87c2e044b5944e22ac (patch)
treee8668484a32fe653ef2fa654205db61ca3a6e327 /gcc/tree-data-ref.c
parentdad732fa41f3ef745ee9dfcde49e6c5387dcef30 (diff)
downloadgcc-789246d71aa4607e71ce1a87c2e044b5944e22ac.zip
gcc-789246d71aa4607e71ce1a87c2e044b5944e22ac.tar.gz
gcc-789246d71aa4607e71ce1a87c2e044b5944e22ac.tar.bz2
tree-data-ref.c (compute_self_dependence): New function.
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
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r--gcc/tree-data-ref.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index c1fdb8f..50b805b 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -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