On 12/01/2022 12:57, Richard Biener wrote:
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.

Tested without the special casing, all good, only have performance regressions left (which I'm working on), will commit this to fix the ICEs.

Thanks,
Andre

Reply via email to