https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98849
--- Comment #6 from Christophe Lyon <clyon at gcc dot gnu.org> --- I'm not familiar with iwmmxt, but the testcase in comment #2 is vectorized with: * -mcpu=cortex-a9 -mfpu=auto -mfloat-abi=hard (uses Neon FPU) * -mcpu=cortex-m55 -mfpu=auto -mfloat-abi=hard (uses MVE/Helium FPU) in both cases -mfloat-abi=hard is required. Using -mcpu=iwmmxt -mfpu=auto -mfloat-abi=hard fails because: cc1: error: '-mfloat-abi=hard': selected processor lacks an FPU so to answer your question arm does have vector shift by scalar. But the Neon/MVE patterns use a const_vector constraint (see mve_vshlq_<supf><mode> and vashl<mode>3 in vec-common.md and ashl<mode>3_iwmmxt in iwmmxt.md)