https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94301
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- OK, so the ICE is the vectorizers fault in generating BLKmode vectors. What remains is the missed optimization on __VEC_PERM: typedef double v2df __attribute__((vector_size(16))); typedef double v4df __attribute__((vector_size(32))); typedef long long v4di __attribute__((vector_size(32))); v4df __GIMPLE(ssa) foo (v2df x, v2df z) { v4df y; __BB(2): y_2 = _Literal (v4df) { x_1(D), _Literal (v2df) { 0.0, 0.0 } }; y_3 = _Literal (v4df) { z_4(D), _Literal (v2df) { 0.0, 0.0 } }; y_5 = __VEC_PERM (y_2, y_3, _Literal (v4di) { 0l, 1l, 4l, 5l }); return y_5; } remains y_2 = {x_1(D), { 0.0, 0.0 }}; y_3 = {z_4(D), { 0.0, 0.0 }}; y_5 = VEC_PERM_EXPR <y_2, y_3, { 0, 1, 4, 5 }>; but should become just y_5 = {x_1(D), z_4(D)}; forwprop in simplify_permutation resorts to fold_ternary of VEC_PERM_EXPR <{x_1(D), { 0.0, 0.0 }}, {z_4(D), { 0.0, 0.0 }}, { 0, 1, 4, 5 }> which eventually ends up in fold_vec_perm which fails because vec_cst_ctor_to_array cannot handle the vector typed component x_1(D).