diff options
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index d59278c..01bb71b 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -2556,33 +2556,23 @@ static bool estimated_loop_iterations (struct loop *loop, bool conservative, double_int *nit) { - tree numiter = number_of_exit_cond_executions (loop); - - /* If we have an exact value, use it. */ - if (TREE_CODE (numiter) == INTEGER_CST) + estimate_numbers_of_iterations_loop (loop); + if (conservative) { - *nit = tree_to_double_int (numiter); - return true; - } + if (!loop->any_upper_bound) + return false; - /* If we have a measured profile and we do not ask for a conservative bound, - use it. */ - if (!conservative && loop->header->count != 0) - { - *nit = uhwi_to_double_int (expected_loop_iterations (loop) + 1); - return true; + *nit = loop->nb_iterations_upper_bound; } - - /* Finally, try using a reliable estimate on number of iterations according - to the size of the accessed data, if available. */ - estimate_numbers_of_iterations_loop (loop); - if (loop->estimate_state == EST_AVAILABLE) + else { - *nit = loop->estimated_nb_iterations; - return true; + if (!loop->any_estimate) + return false; + + *nit = loop->nb_iterations_estimate; } - return false; + return true; } /* Similar to estimated_loop_iterations, but returns the estimate only |