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.