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)