https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126200

--- Comment #2 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
(define_insn "lsx_vshuf4i_<lsxfmt_f>"
  [(set (match_operand:LSX_WHB_W 0 "register_operand" "=f")
        (vec_select:LSX_WHB_W
          (match_operand:LSX_WHB_W 1 "register_operand" "f")
          (match_operand 2 "par_const_vector_shf_set_operand" "")))]

Note that operand 2 has no mode so par_const_vector_shf_set_operand is called
with VOIDmode.  But then it returns true regardless of the selector due to

  int nunits = GET_MODE_NUNITS (mode);
  int nsets = nunits / 4;
  for (j = 0; j < nsets; j++, set = 4 * j)
    ... ...
  return true; 

as GET_MODE_NUNITS (mode) == 0.  I'm really surprised this didn't blow up much
earlier.

Reply via email to