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.