https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123755
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |ASSIGNED
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
It seems that there's no IFN_COND_LEN_FMA? There's
DEF_INTERNAL_COND_FN (FMA, ECF_CONST, fma, ternary)
but
internal_fn
get_len_internal_fn (internal_fn fn)
{
switch (fn)
{
#define DEF_INTERNAL_COND_FN(NAME, ...)
\
case IFN_COND_##NAME:
\
return IFN_COND_LEN_##NAME;
#define DEF_INTERNAL_SIGNED_COND_FN(NAME, ...)
\
case IFN_COND_##NAME:
\
return IFN_COND_LEN_##NAME;
#include "internal-fn.def"
default:
so it seems get_len_internal_fn expects a conditional internal function
argument(?) vectorizable_call passes it the 'ifn' which is IFN_FMA in
this case.
I met a similar oddity in get_conditional_internal_fn which returns
IFN_LAST for IFN_COND_FMA.
With this fixed we ICE here:
3888 vargs[len_opno] = len;
3889 vargs[len_opno + 1] = bias;
because internal_fn_len_index of IFN_COND_LEN_FMA is 5. We fail to count
the mask.
I have a fix for all of this ...