On Wed, 12 Jan 2022, Andre Vieira (lists) wrote: > > On 12/01/2022 11:59, Richard Biener wrote: > > On Wed, 12 Jan 2022, Andre Vieira (lists) wrote: > > > >> On 12/01/2022 11:44, Richard Sandiford wrote: > >>> Another alternative would be to push autodetected_vector_mode when the > >>> length is 1 and keep 1 as the starting point. > >>> > >>> Richard > >> I'm guessing we would still want to skip epilogue vectorization if > >> !VECTOR_MODE_P (autodetected_vector_mode) in that case? > > Practically we currently only support fixed width word_mode there, > > but eventually one could end up with 64bit DImode for the main loop > > and 32bit V4QImode in the epilogue ... so not sure if it's worth > > special-casing. But I don't mind adding that skip. > > > > Richard. > > I left out the skip, it shouldn't break anything as it would try that same > mode before anyway. > Just to clarify what I meant though was to skip if autodetected_vector_mode > wasn't a vector AND the target didn't define autovectorize_vector_modes, so in > that scenario it wouldn't ever try V4QImode for the epilogue if the mainloop > was autodetected DImode, I think... > Either way, this is less code, less complicated and doesn't analyze more than > it did before the original patch, so I'm happy with that too. > > Is this what you had in mind?
- mode_i = 1; + if (vector_modes.length () == 1) + { + /* If we only had VOIDmode then use AUTODETECTED_VECTOR_MODE to see if + an epilogue can be created with that mode. */ + vector_modes[0] = autodetected_vector_mode; + mode_i = 0; + } + else + mode_i = 1; + I would have left out the condition and unconditionally do vector_modes[0] = autodetected_vector_mode; mode_i = 0; but OK if you think it makes sense to special case length == 1. Richard.