https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96974
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> --- Still reproduces on trunk with -fdisable-tree-fre4. So the issue is that for the case of 'long int' and 'float' get_vectype_for_scalar_type when passed 8 as group_size returns V8DI and V4SF - where eventually V16SF does not exist. The vinfos vector mode is E_VNx4SFmode. We're rejecting that because it's 11122 && maybe_ge (TYPE_VECTOR_SUBPARTS (vectype), group_size)) and iterating with get_related_vectype_for_scalar_type arriving at v4sf. OTOH for long int we start with vector([2,2]) long int and iterate to v8di. I guess the assert is really misplaced and it should instead try to find a proper related type based on the nunits vectype? Or give up when we arrive at such incompatible choices for input/output vector types.