summaryrefslogtreecommitdiffstats
path: root/gcc/tree-ssa-loop-niter.c
diff options
context:
space:
mode:
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-13 03:48:03 +0000
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-13 03:48:03 +0000
commitbc3c8ad48535b3f1293af0409175cf75cc80d0c1 (patch)
tree1226bd75bfb69754520d53c7eb3bfc5d227899fa /gcc/tree-ssa-loop-niter.c
parent5cdb644a6a7f2c9d7e0d5bbe0544a80027d54dcd (diff)
downloadppe42-gcc-bc3c8ad48535b3f1293af0409175cf75cc80d0c1.tar.gz
ppe42-gcc-bc3c8ad48535b3f1293af0409175cf75cc80d0c1.zip
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-ssa-loop-niter.c')
-rw-r--r--gcc/tree-ssa-loop-niter.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 6eb44e15ea1..0e2b8706776 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -36,6 +36,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "ggc.h"
#include "tree-chrec.h"
#include "tree-scalar-evolution.h"
+#include "tree-data-ref.h"
#include "params.h"
#include "flags.h"
#include "tree-inline.h"
@@ -943,24 +944,10 @@ find_loop_niter_by_eval (struct loop *loop, edge *exit)
*/
-/* The structure describing a bound on number of iterations of a loop. */
-
-struct nb_iter_bound
-{
- tree bound; /* The expression whose value is an upper bound on the
- number of executions of anything after ... */
- tree at_stmt; /* ... this statement during one execution of loop. */
- tree additional; /* A conjunction of conditions the operands of BOUND
- satisfy. The additional information about the value
- of the bound may be derived from it. */
- struct nb_iter_bound *next;
- /* The next bound in a list. */
-};
-
/* Records that AT_STMT is executed at most BOUND times in LOOP. The
additional condition ADDITIONAL is recorded with the bound. */
-static void
+void
record_estimate (struct loop *loop, tree bound, tree additional, tree at_stmt)
{
struct nb_iter_bound *elt = xmalloc (sizeof (struct nb_iter_bound));
@@ -1010,8 +997,14 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
}
free (exits);
- /* TODO Here we could use other possibilities, like bounds of arrays accessed
- in the loop. */
+ /* Analyzes the bounds of arrays accessed in the loop. */
+ if (loop->estimated_nb_iterations == NULL_TREE)
+ {
+ varray_type datarefs;
+ VARRAY_GENERIC_PTR_INIT (datarefs, 3, "datarefs");
+ find_data_references_in_loop (loop, &datarefs);
+ free_data_refs (datarefs);
+ }
}
/* Records estimates on numbers of iterations of LOOPS. */
OpenPOWER on IntegriCloud