diff options
author | Sebastian Pop <pop@cri.ensmp.fr> | 2006-03-26 22:48:05 +0200 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2006-03-26 20:48:05 +0000 |
commit | ba42e045f7da0362ac1ff19ce0a2210999f7f1f8 (patch) | |
tree | 99a886cf9eb5495a779c7221d1a028574d5e242d /gcc/tree-data-ref.h | |
parent | 0535d6d75b7dd27343da2f6fcea8af9725305721 (diff) | |
download | gcc-ba42e045f7da0362ac1ff19ce0a2210999f7f1f8.tar.gz |
tree-data-ref.c: Rename DDR_SIZE_VECT to DDR_NB_LOOPS.
* tree-data-ref.c: Rename DDR_SIZE_VECT to DDR_NB_LOOPS.
(subscript_dependence_tester_1): Declared.
(print_dir_vectors, print_dist_vectors): New.
(debug_data_dependence_relation): New.
(dump_data_dependence_relation): Print more details.
(initialize_data_dependence_relation): Initialize DDR_LOOP_NEST.
(analyze_subscript_affine_affine): Don't ICE when gcd_alpha_beta is 0.
(save_dist_v, save_dir_v, add_outer_distances,
build_classic_dist_vector_1): New.
(build_classic_dist_vector): Rewrite to work on DDR_LOOP_NEST.
Don't test for lambda_vector_lexico_pos.
(same_access_functions, add_multivariate_self_dist,
add_other_self_distances, dir_from_dist): New.
(build_classic_dir_vector): Replace implementation almost identical to
build_classic_dist_vector with a walk of DDR_DIST_VECTS with a call to
dir_from_dist.
(subscript_dependence_tester_1): New.
(subscript_dependence_tester): Handle the lexicographically negative
distance vectors by recomputing the dependence relation.
(compute_affine_dependence): Remove parameter loop_nest_depth.
(compute_self_dependence): Don't call compute_subscript_distance.
(compute_all_dependences): Remove parameters nb_loops, loop_nest_depth.
Add a parameter for the loop_nest.
(find_loop_nest_1, find_loop_nest): New.
(compute_data_dependences_for_loop): Compute the loop nest, and give
up if the nest is not well formed.
* tree-data-ref.h (loop_p): New.
(struct data_dependence_relation): Replace size_vect field with
loop_nest, a vec of loops.
(DDR_SIZE_VECT): Renamed DDR_NB_LOOPS.
(DDR_LOOP_NEST): New.
(print_dir_vectors, print_dist_vectors,
debug_data_dependence_relation): Declared.
(index_in_loop_nest): New.
* tree-vect-analyze.c (vect_analyze_data_ref_dependence): Use
DDR_LOOP_NEST and index_in_loop_nest to determine the dependence
distance.
From-SVN: r112399
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r-- | gcc/tree-data-ref.h | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index 2c246df0660..1f996f43097 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -186,6 +186,10 @@ struct subscript #define SUB_LAST_CONFLICT(SUB) SUB->last_conflict #define SUB_DISTANCE(SUB) SUB->distance +typedef struct loop *loop_p; +DEF_VEC_P(loop_p); +DEF_VEC_ALLOC_P (loop_p, heap); + /* A data_dependence_relation represents a relation between two data_references A and B. */ @@ -217,9 +221,8 @@ struct data_dependence_relation the data_dependence_relation. */ varray_type subscripts; - /* The size of the direction/distance vectors: the depth of the - analyzed loop nest. */ - int size_vect; + /* The analyzed loop nest. */ + VEC (loop_p, heap) *loop_nest; /* The classic direction vector. */ VEC(lambda_vector,heap) *dir_vects; @@ -241,7 +244,11 @@ DEF_VEC_ALLOC_P(ddr_p,heap); VARRAY_GENERIC_PTR_INIT (DDR_SUBSCRIPTS (DDR), N, "subscripts_vector"); #define DDR_SUBSCRIPT(DDR, I) VARRAY_GENERIC_PTR (DDR_SUBSCRIPTS (DDR), I) #define DDR_NUM_SUBSCRIPTS(DDR) VARRAY_ACTIVE_SIZE (DDR_SUBSCRIPTS (DDR)) -#define DDR_SIZE_VECT(DDR) DDR->size_vect + +#define DDR_LOOP_NEST(DDR) DDR->loop_nest +/* The size of the direction/distance vectors: the number of loops in + the loop nest. */ +#define DDR_NB_LOOPS(DDR) (VEC_length (loop_p, DDR_LOOP_NEST (DDR))) #define DDR_DIST_VECTS(DDR) ((DDR)->dist_vects) #define DDR_DIR_VECTS(DDR) ((DDR)->dir_vects) @@ -260,11 +267,14 @@ extern tree find_data_references_in_loop (struct loop *, varray_type *); extern void compute_data_dependences_for_loop (struct loop *, bool, varray_type *, varray_type *); extern void print_direction_vector (FILE *, lambda_vector, int); +extern void print_dir_vectors (FILE *, VEC (lambda_vector, heap) *, int); +extern void print_dist_vectors (FILE *, VEC (lambda_vector, heap) *, int); extern void dump_subscript (FILE *, struct subscript *); extern void dump_ddrs (FILE *, varray_type); extern void dump_dist_dir_vectors (FILE *, varray_type); extern void dump_data_reference (FILE *, struct data_reference *); extern void dump_data_references (FILE *, varray_type); +extern void debug_data_dependence_relation (struct data_dependence_relation *); extern void dump_data_dependence_relation (FILE *, struct data_dependence_relation *); extern void dump_data_dependence_relations (FILE *, varray_type); @@ -276,6 +286,22 @@ extern void free_data_refs (varray_type); extern struct data_reference *analyze_array (tree, tree, bool); extern void estimate_iters_using_array (tree, tree); +/* Return the index of the variable VAR in the LOOP_NEST array. */ + +static inline int +index_in_loop_nest (int var, VEC (loop_p, heap) *loop_nest) +{ + struct loop *loopi; + int var_index; + + for (var_index = 0; VEC_iterate (loop_p, loop_nest, var_index, loopi); + var_index++) + if (loopi->num == var) + break; + + return var_index; +} + #endif /* GCC_TREE_DATA_REF_H */ |