https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126160
Hongtao Liu <liuhongt at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Target| |x86_64-*-* i?86-*-*
--- Comment #1 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
Looks like vectorizer hard requirement
Element count (vectorizable_call, gcc/tree-vect-stmts.cc:3574):
nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out);
if (nunits_in * 2 == nunits_out) modifier = NARROW;
else if (nunits_out == nunits_in) modifier = NONE;
else if (nunits_out * 2 == nunits_in) modifier = WIDEN;
else return false;
The internal function is only tried for NONE or NARROW (:3604). So the
vectorizer needs the same number of lanes (or a 2× narrowing). Same element
count: required.
But here it's WIDEN.