On Tue, 8 Jul 2025, Tamar Christina wrote:

> This patch adds support for niters ranges for partial
> vector loops.
> 
> Due to the last iteration being partial the bounds should
> be at least 1 but niters // vf as the max.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu,
> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
> -m32, -m64 and no issues.
> 
> Tested testcase on riscv64-unknown-linux-gnu. Should use
> the same testcase as patch 1.
> 
> Ok for master?

OK.

Richard.

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       PR tree-optimization/120922
>       * tree-vect-loop-manip.cc (vect_gen_vector_loop_niters): Support range
>       for partial vectors.
> 
> ---
> diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
> index 
> 9c58a6a01d7c9c3d97a2f8595b1ea6cff2d653f6..2d01a4b0ed1c8431510ad5e6e2175dbe89371618
>  100644
> --- a/gcc/tree-vect-loop-manip.cc
> +++ b/gcc/tree-vect-loop-manip.cc
> @@ -2857,11 +2857,21 @@ vect_gen_vector_loop_niters (loop_vec_info 
> loop_vinfo, tree niters,
>        we set range information to make niters analyzer's life easier.
>        Note the number of latch iteration value can be TYPE_MAX_VALUE so
>        we have to represent the vector niter TYPE_MAX_VALUE + 1 / vf.  */
> -      if (stmts != NULL
> -       && const_vf > 0
> -       && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo))
> +      if (stmts != NULL && const_vf > 0)
>       {
> -       if (niters_no_overflow)
> +       if (niters_no_overflow
> +           && LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo))
> +         {
> +           int_range<1> vr (type,
> +                            wi::one (TYPE_PRECISION (type)),
> +                            wi::div_ceil (wi::max_value
> +                                                     (TYPE_PRECISION (type),
> +                                                      TYPE_SIGN (type)),
> +                                          const_vf,
> +                                          TYPE_SIGN (type)));
> +           set_range_info (niters_vector, vr);
> +         }
> +       else if (niters_no_overflow)
>           {
>             int_range<1> vr (type,
>                              wi::one (TYPE_PRECISION (type)),
> 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to