On Fri, Aug 4, 2023 at 9:16 AM Jan Hubicka via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Hi,
> this prevents useless loop distribiton produced in hmmer.  With FDO we now
> correctly work out that the loop created for last iteraiton is not going to
> iterate however loop distribution still produces a verioned loop that has no
> chance to survive loop vectorizer since we only keep distributed loops
> when loop vectorization suceeds and it requires number of (header) iterations
> to exceed the vectorization factor.
>
> Bootstrapped/regtested x86_64-linux, OK?

OK.

But why does optimize_loop_for_speed_p () return true when the loop
isn't expected to iterate?  Wouldn't that be a better place to fix this
and similar issues in other places then?

Thanks,
Richard.

> gcc/ChangeLog:
>
>         * tree-loop-distribution.cc (loop_distribution::execute): Disable
>         distribution for loops with estimated iterations 0.
>
> diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc
> index cf7c197aaf7..8ff2108f284 100644
> --- a/gcc/tree-loop-distribution.cc
> +++ b/gcc/tree-loop-distribution.cc
> @@ -3871,10 +3871,20 @@ loop_distribution::execute (function *fun)
>
>           bool destroy_p;
>           int nb_generated_loops, nb_generated_calls;
> +         bool only_patterns = !optimize_loop_for_speed_p (loop)
> +                              || !flag_tree_loop_distribution;
> +         /* do not try to distribute loops that are not expected to iterate. 
>  */
> +         if (!only_patterns)
> +           {
> +             HOST_WIDE_INT iterations = estimated_loop_iterations_int (loop);
> +             if (iterations < 0)
> +               iterations = likely_max_loop_iterations_int (loop);
> +             if (!iterations)
> +               only_patterns = true;
> +           }
>           nb_generated_loops
>             = distribute_loop (loop, work_list, cd, &nb_generated_calls,
> -                              &destroy_p, (!optimize_loop_for_speed_p (loop)
> -                                           || !flag_tree_loop_distribution));
> +                              &destroy_p, only_patterns);
>           if (destroy_p)
>             loops_to_be_destroyed.safe_push (loop);
>

Reply via email to