https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72517
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Does
Index: gcc/expmed.c
===================================================================
--- gcc/expmed.c (revision 238743)
+++ gcc/expmed.c (working copy)
@@ -1581,6 +1581,7 @@ extract_bit_field_1 (rtx str_rtx, unsign
for (; new_mode != VOIDmode ; new_mode = GET_MODE_WIDER_MODE (new_mode))
if (GET_MODE_SIZE (new_mode) == GET_MODE_SIZE (GET_MODE (op0))
+ && GET_MODE_UNIT_SIZE (new_mode) == GET_MODE_SIZE (tmode)
&& targetm.vector_mode_supported_p (new_mode))
break;
if (new_mode != VOIDmode)
help? The loop was obviously written when targets didn't support multiple
vector sizes.