On Tue, 8 Jul 2025, Tamar Christina wrote:

> Before the change in g:309dbcea2cabb31bde1a65cdfd30bb7f87b170a2 we would never
> set a range for constant VF and requires partial vector loops.
> 
> I think a range could be set, since I think the number of latch executions is 
> a
> ceiling division of TYPE_MAX_VALUE / vf. To account for the partial iteration.
> 
> This would also then deal with the ICE cause in the PR where the chosen VF was
> much higher than TYPE_MAX_VALUE and that a mask is relied upon to make it 
> safe.
> 
> Since the patch was supposed to not change behavior I've added an additional
> partial vector check on the const_vf > 0 check to make it explicit that we 
> only
> set it on non-partial vectors (alternative would have been to swap the order 
> of
> the vf.constant(&const_vf)) check, but that would have hidden the requirement
> sneakily.
> 
> The second patch adds support for ranges for partial masks.
> 
> 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. Waiting for a question on
> effective targets on RVV to attach patch.
> 
> Ok for master for testcase?

OK.

Thanks,
Richard.

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       PR tree-optimization/120922
>       * tree-vect-loop-manip.cc (vect_gen_vector_loop_niters): Don't set range
>       for partial vectors.
> 
> ---
> diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
> index 
> 469694377499d7502e894b3a77e798d4de7fa685..9c58a6a01d7c9c3d97a2f8595b1ea6cff2d653f6
>  100644
> --- a/gcc/tree-vect-loop-manip.cc
> +++ b/gcc/tree-vect-loop-manip.cc
> @@ -2857,7 +2857,9 @@ 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)
> +      if (stmts != NULL
> +       && const_vf > 0
> +       && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo))
>       {
>         if (niters_no_overflow)
>           {
> 
> 
> 

-- 
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