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

Reply via email to