https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120830
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This looks wrong:
else if (CONST_VECTOR_P (op))
{
rtx first = XVECEXP (op, 0, 0);
for (int i = 1; i < nunits; ++i)
{
rtx tmp = XVECEXP (op, 0, i);
/* Vector duplicate value. */
if (!rtx_equal_p (tmp, first))
return nullptr;
}
*scalar_mode_p = GET_MODE (first);
*insn_p = nullptr;
return first;
}
A const_vector can full of const_int which have a mode of VOIDmode. So the
scalar mode should be the inner mode of the op rather than the mode of the
first element of the const_vector.
But I am not sure this is the problem.