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).