On Wed, Feb 22, 2023 at 5:42 PM Michael Collison <colli...@rivosinc.com> wrote: > > Richard how would I check for a full masked main vector loop?
It's LOOP_VINFO_FULLY_MASKED_P I think. For the odd prologue peeling you see you might want to check why vect_use_loop_mask_for_alignment_p isn't true (possibly because exactly LOOP_VINFO_FULLY_MASKED_P is not true ...) > On 2/22/23 03:20, Richard Biener wrote: > > On Wed, Feb 22, 2023 at 12:03 AM Michael Collison <colli...@rivosinc.com> > > wrote: > >> While working on autovectorizing for the RISCV port I encountered an > >> issue where vect_do_peeling assumes that the vectorization factor is a > >> compile-time constant. The vectorization is not a compile-time constant > >> on RISCV. > >> > >> Tested on RISCV and x86_64-linux-gnu. Okay? > > I wonder how you arrive at prologue peeling with a non-constant VF? > > In any case it would probably be better to use constant_lower_bound (vf) > > here? Also it looks wrong to apply this limit in case we are using > > a fully masked main vector loop. But as said, the specific case of > > non-constant VF and prologue peeling probably wasn't supposed to happen, > > instead the prologue usually is applied via an offset to a fully masked > > loop? > > > > Richard? > > > > Thanks, > > Richard. > > > >> Michael > >> > >> gcc/ > >> > >> * tree-vect-loop-manip.cc (vect_do_peeling): Verify > >> that vectorization factor is a compile-time constant. > >> > >> --- > >> gcc/tree-vect-loop-manip.cc | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc > >> index 6aa3d2ed0bf..1ad1961c788 100644 > >> --- a/gcc/tree-vect-loop-manip.cc > >> +++ b/gcc/tree-vect-loop-manip.cc > >> @@ -2930,7 +2930,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree > >> niters, tree nitersm1, > >> niters = vect_build_loop_niters (loop_vinfo, &new_var_p); > >> /* It's guaranteed that vector loop bound before vectorization is > >> at > >> least VF, so set range information for newly generated var. */ > >> - if (new_var_p) > >> + if (new_var_p && vf.is_constant ()) > >> { > >> value_range vr (type, > >> wi::to_wide (build_int_cst (type, vf)), > >> -- > >> 2.34.1 > >>