diff options
author | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-13 03:48:03 +0000 |
---|---|---|
committer | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-13 03:48:03 +0000 |
commit | bc3c8ad48535b3f1293af0409175cf75cc80d0c1 (patch) | |
tree | 1226bd75bfb69754520d53c7eb3bfc5d227899fa /gcc/tree-data-ref.h | |
parent | 5cdb644a6a7f2c9d7e0d5bbe0544a80027d54dcd (diff) | |
download | gcc-bc3c8ad48535b3f1293af0409175cf75cc80d0c1.tar.gz |
2004-10-11 Sebastian Pop <pop@cri.ensmp.fr>
* Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h.
* cfgloop.c (initialize_loops_parallel_p): New.
(flow_loops_find): Initialize the parallel_p field to true for all
the loops.
* tree-ssa-loop-niter.c: Include "tree-data-ref.h".
(estimate_numbers_of_iterations_loop): Infers the loop bounds from
the size of the data accessed in the loop.
(struct nb_iter_bound): Moved...
* cfgloop.h (struct nb_iter_bound): ... here.
(estimated_nb_iterations, parallel_p): New fields in struct loop.
(record_estimate): Declare extern here.
* tree-chrec.c: Fix comments.
(nb_vars_in_chrec): New function.
* tree-chrec.h (nb_vars_in_chrec): Declared here.
* tree-data-ref.c: Don't include lambda.h, that is already included
in tree-data-ref.h.
(tree_fold_divides_p): Don't check for integer_onep.
(tree_fold_bezout): Removed.
(gcd): New static duplicated function.
(int_divides_p, dump_subscript): New.
(dump_data_dependence_relation): Use dump_subscript.
(dump_dist_dir_vectors, dump_ddrs, compute_estimated_nb_iterations,
estimate_niter_from_size_of_data): New.
(analyze_array_indexes, analyze_array): Call
estimate_niter_from_size_of_data during the detection of array
references. Pass in a pointer to the statement that contains the
array reference.
(all_chrecs_equal_p): New.
(compute_distance_vector): Renamed compute_subscript_distance.
Deal with multivariate conflict functions.
(initialize_data_dependence_relation): Initialize DDR_AFFINE_P,
DDR_SIZE_VECT, DDR_DIST_VECT, and DDR_DIR_VECT.
(non_affine_dependence_relation): New.
(analyze_ziv_subscript, analyze_siv_subscript_cst_affine,
analyze_siv_subscript, analyze_miv_subscript,
analyze_overlapping_iterations, subscript_dependence_tester):
Initialize and return last_conflicts function.
(initialize_matrix_A, FLOOR, compute_overlap_steps_for_affine_univar,
compute_overlap_steps_for_affine_1_2): New.
(analyze_siv_subscript_affine_cst): Removed.
(analyze_subscript_affine_affine): Disprove dependences based on the
iteration domains. Solve the univariate dependence case as before,
but use lambda_matrix_right_hermite instead of tree_fold_bezout.
Implement the multivariate case of 2 versus 1 variables.
(build_classic_dist_vector, build_classic_dir_vector): Implement some
unhandled cases.
(find_data_references_in_loop): Compute and initialize
loop->estimated_nb_iterations and loop->parallel_p.
(analyze_all_data_dependences): Modify the debug dump order.
* tree-data-ref.h (SUB_LAST_CONFLICT_IN_A, SUB_LAST_CONFLICT_IN_B,
subscript->last_conflict_in_a, subscript->last_conflict_in_b): Removed.
(SUB_LAST_CONFLICT, subscript->last_conflict,
data_dependence_relation->affine_p, data_dependence_relation->size_vect,
DDR_AFFINE_P, DDR_SIZE_VECT): New.
(find_data_references_in_loop, initialize_data_dependence_relation,
dump_subscript, dump_ddrs, dump_dist_dir_vectors): Declared here.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r-- | gcc/tree-data-ref.h | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index 8caafa43ffd..ea3bb7ddd30 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -79,10 +79,9 @@ struct subscript tree conflicting_iterations_in_a; tree conflicting_iterations_in_b; - /* These fields store the information about the iteration domain + /* This field stores the information about the iteration domain validity of the dependence relation. */ - tree last_conflict_in_a; - tree last_conflict_in_b; + tree last_conflict; /* Distance from the iteration that access a conflicting element in A to the iteration that access this same conflicting element in @@ -93,8 +92,7 @@ struct subscript #define SUB_CONFLICTS_IN_A(SUB) SUB->conflicting_iterations_in_a #define SUB_CONFLICTS_IN_B(SUB) SUB->conflicting_iterations_in_b -#define SUB_LAST_CONFLICT_IN_A(SUB) SUB->last_conflict_in_a -#define SUB_LAST_CONFLICT_IN_B(SUB) SUB->last_conflict_in_b +#define SUB_LAST_CONFLICT(SUB) SUB->last_conflict #define SUB_DISTANCE(SUB) SUB->distance /* A data_dependence_relation represents a relation between two @@ -106,6 +104,10 @@ struct data_dependence_relation struct data_reference *a; struct data_reference *b; + /* When the dependence relation is affine, it can be represented by + a distance vector. */ + bool affine_p; + /* A "yes/no/maybe" field for the dependence relation: - when "ARE_DEPENDENT == NULL_TREE", there exist a dependence @@ -124,6 +126,9 @@ struct data_dependence_relation the data_dependence_relation. */ varray_type subscripts; + /* The size of the direction/distance vectors. */ + int size_vect; + /* The classic direction vector. */ lambda_vector dir_vect; @@ -133,26 +138,32 @@ struct data_dependence_relation #define DDR_A(DDR) DDR->a #define DDR_B(DDR) DDR->b +#define DDR_AFFINE_P(DDR) DDR->affine_p #define DDR_ARE_DEPENDENT(DDR) DDR->are_dependent #define DDR_SUBSCRIPTS(DDR) DDR->subscripts #define DDR_SUBSCRIPTS_VECTOR_INIT(DDR, N) \ 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_DIR_VECT(DDR) DDR->dir_vect #define DDR_DIST_VECT(DDR) DDR->dist_vect -struct data_dependence_relation *initialize_data_dependence_relation +extern tree find_data_references_in_loop (struct loop *, varray_type *); +extern struct data_dependence_relation *initialize_data_dependence_relation (struct data_reference *, struct data_reference *); -void compute_affine_dependence (struct data_dependence_relation *); +extern void compute_affine_dependence (struct data_dependence_relation *); extern void analyze_all_data_dependences (struct loops *); extern void compute_data_dependences_for_loop (unsigned, struct loop *, varray_type *, varray_type *); extern struct data_reference * init_data_ref (tree, tree, tree, tree, bool); extern struct data_reference *analyze_array (tree, tree, bool); +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 dump_data_dependence_relation (FILE *, @@ -161,11 +172,12 @@ extern void dump_data_dependence_relations (FILE *, varray_type); extern void dump_data_dependence_direction (FILE *, enum data_dependence_direction); extern bool array_base_name_differ_p (struct data_reference *, - struct data_reference *, bool *p); + struct data_reference *, bool *); extern void free_dependence_relation (struct data_dependence_relation *); extern void free_dependence_relations (varray_type); extern void free_data_refs (varray_type); + #endif /* GCC_TREE_DATA_REF_H */ |