summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-niter.c
diff options
context:
space:
mode:
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-08 08:47:05 +0000
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-08 08:47:05 +0000
commitaff6b8e2844233bb221f10575b29eaa2841d033a (patch)
tree89eb4489161f999fd07683ec4d1f769eb37fce8b /gcc/tree-ssa-loop-niter.c
parentfd51758ca975916545d94fd14941239b2b88e1e7 (diff)
downloadgcc-aff6b8e2844233bb221f10575b29eaa2841d033a.tar.gz
* tree-data-ref.c (compute_estimated_nb_iterations,
analyze_array_indexes, compute_overlap_steps_for_affine_1_2, analyze_subscript_affine_affine, find_data_references_in_loop): Fixed to use chrec_contains_undetermined to test the values of loop->estimated_nb_iterations. * tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Compute the estimation only when loop->estimated_nb_iterations has not yet been initialized. (convert_step_widening, scev_probably_wraps_p): Add a call to estimate_numbers_of_iterations_loop. * tree-vrp.c (execute_vrp): Don't call estimate_numbers_of_iterations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100749 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r--gcc/tree-ssa-loop-niter.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 40f8e4525aa..73424ee098a 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -1348,6 +1348,15 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
unsigned i, n_exits;
struct tree_niter_desc niter_desc;
+ /* Give up if we already have tried to compute an estimation. */
+ if (loop->estimated_nb_iterations == chrec_dont_know
+ /* Or when we already have an estimation. */
+ || (loop->estimated_nb_iterations != NULL_TREE
+ && TREE_CODE (loop->estimated_nb_iterations) == INTEGER_CST))
+ return;
+ else
+ loop->estimated_nb_iterations = chrec_dont_know;
+
exits = get_loop_exit_edges (loop, &n_exits);
for (i = 0; i < n_exits; i++)
{
@@ -1368,7 +1377,7 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
free (exits);
/* Analyzes the bounds of arrays accessed in the loop. */
- if (loop->estimated_nb_iterations == NULL_TREE)
+ if (chrec_contains_undetermined (loop->estimated_nb_iterations))
{
varray_type datarefs;
VARRAY_GENERIC_PTR_INIT (datarefs, 3, "datarefs");
@@ -1581,6 +1590,7 @@ convert_step_widening (struct loop *loop, tree new_type, tree base, tree step,
valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type,
delta, step_abs);
+ estimate_numbers_of_iterations_loop (loop);
for (bound = loop->bounds; bound; bound = bound->next)
if (proved_non_wrapping_p (at_stmt, bound, new_type, valid_niter))
return step_in_new_type;
@@ -1649,6 +1659,7 @@ scev_probably_wraps_p (tree type, tree base, tree step,
step_abs = fold_convert (unsigned_type, step_abs);
valid_niter = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step_abs);
+ estimate_numbers_of_iterations_loop (loop);
for (bound = loop->bounds; bound; bound = bound->next)
if (proved_non_wrapping_p (at_stmt, bound, type, valid_niter))
return false;