https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- typedef unsigned char v16qi __attribute__((vector_size(16))); v16qi baz (int i0, int i1, int i2, int i3, int i10, int i11, int i12, int i13, int i20, int i21, int i22, int i23, int i30, int i31, int i32, int i33) { return (v16qi) { i0, i1, i2, i3, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33 }; } is even more "funny". I'm looking whether the vectorizer cost model for these vector constructors make sense. Currently the cost is case vec_construct: elements = TYPE_VECTOR_SUBPARTS (vectype); return ix86_cost->vec_stmt_cost * (elements / 2 + 1); which for v16qi and generic would be 9 vector stmts. The assembly for the above contains 47 instructions. Not sure where elements / 2 + 1 comes from.