https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112773
--- Comment #11 from Robin Dapp <rdapp at gcc dot gnu.org> --- When I define a vec_extract...bi pattern we don't enter the if (vec_extract) in expmed because e.g. bitsize = {1, 0} bitnum = {3, 4} and GET_MODE_BITSIZE (innermode) = {1, 0} with innermode = BImode. This fails multiple_p (bitnum, GET_MODE_BITSIZE (innermode), &pos). It is a multiple of course, but still dependent on the actual vector length. (So we would also need to extract a [3 4] from the vector). That would be the same as an extract_last with a CONST_M1 mask. Maybe that's an option? So if we have an extract_last and no loop len or mask fall back to an extract_last with a full mask? That would delegate the length calculation to the backend.