Personally I prefer to remove --param=riscv-autovec-preference=none and only allow mrvv-vector-bits, to avoid tricky(maybe) sematic of none preference. However, let’s wait for a while in case there are some comments from others.
Pan From: Kito Cheng <kito.ch...@gmail.com> Sent: Wednesday, February 28, 2024 10:55 PM To: 钟居哲 <juzhe.zh...@rivai.ai> Cc: Li, Pan2 <pan2...@intel.com>; gcc-patches <gcc-patches@gcc.gnu.org>; Wang, Yanzhang <yanzhang.w...@intel.com>; rdapp.gcc <rdapp....@gmail.com>; Jeff Law <jeffreya...@gmail.com> Subject: Re: Re: [PATCH v3] RISC-V: Introduce gcc option mrvv-vector-bits for RVV Hmm, maybe only keep --param=riscv-autovec-preference=none and remove other two if we think that might still useful? But anyway I have no strong opinion to keep that, I mean I am ok to remove whole --param=riscv-autovec-preference. 钟居哲 <juzhe.zh...@rivai.ai<mailto:juzhe.zh...@rivai.ai>> 於 2024年2月28日 週三 21:59 寫道: I think it makes more sense to remove --param=riscv-autovec-preference and add -mrvv-vector-bits.... ________________________________ juzhe.zh...@rivai.ai<mailto:juzhe.zh...@rivai.ai> From: Kito Cheng<mailto:kito.ch...@gmail.com> Date: 2024-02-28 20:56 To: pan2.li<mailto:pan2...@intel.com> CC: gcc-patches<mailto:gcc-patches@gcc.gnu.org>; juzhe.zhong<mailto:juzhe.zh...@rivai.ai>; yanzhang.wang<mailto:yanzhang.w...@intel.com>; rdapp.gcc<mailto:rdapp....@gmail.com>; jeffreyalaw<mailto:jeffreya...@gmail.com> Subject: Re: [PATCH v3] RISC-V: Introduce gcc option mrvv-vector-bits for RVV Take one more look, I think this option should work and integrate with --param=riscv-autovec-preference= since they have similar jobs but slightly different. We have 3 value for --param=riscv-autovec-preference=: none, scalable and fixed-vlmax -mrvv-vector-bits=scalable is work like --param=riscv-autovec-preference=scalable and -mrvv-vector-bits=zvl is work like --param=riscv-autovec-preference=fixed-vlmax. So I think...we need to do some conflict check, like: -mrvv-vector-bits=zvl can't work with --param=riscv-autovec-preference=scalable -mrvv-vector-bits=scalable can't work with --param=riscv-autovec-preference=fixed-vlmax but it may not just alias since there is some useful combinations like: -mrvv-vector-bits=zvl with --param=riscv-autovec-preference=none: NO auto vectorization but intrinsic code still could benefit from the -mrvv-vector-bits=zvl option. -mrvv-vector-bits=scalable with --param=riscv-autovec-preference=none Should still work for VLS code gen, but just disable auto vectorization per the option semantic. However here is something we need some fix, since --param=riscv-autovec-preference=none still disable VLS code gen for now, you can see some example here: https://godbolt.org/z/fMTr3eW7K But I think it's really the right behavior here, this part might need to be fixed in vls_mode_valid_p and some other places. Anyway I think we need to check all use sites with RVV_FIXED_VLMAX and RVV_SCALABLE, and need to make sure all use site of RVV_FIXED_VLMAX also checked with RVV_VECTOR_BITS_ZVL. > -/* Return the VLEN value associated with -march. > +static int > +riscv_convert_vector_bits (int min_vlen) Not sure if we really need this function, it seems it always returns min_vlen? > +{ > + int rvv_bits = 0; > + > + switch (rvv_vector_bits) > + { > + case RVV_VECTOR_BITS_ZVL: > + case RVV_VECTOR_BITS_SCALABLE: > + rvv_bits = min_vlen; > + break; > + default: > + gcc_unreachable (); > + } > + > + return rvv_bits; > +} > + > +/* Return the VLEN value associated with -march and -mwrvv-vector-bits.