https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106910
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On Thu, 15 Sep 2022, crazylht at gmail dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106910 > > --- Comment #4 from Hongtao.liu <crazylht at gmail dot com> --- > > > The vectorizer would go the direct internal fn way for those, querying the > > floor optab but the x86 backend only has scalar modes supported for the > > rounding optabs. > For CFN_BUILT_IN_ICEIL, the modifier is narrow, and currently > vectorizable_call > require op_in and op_out to be simple_integer_narrowing, which means it fails > to go the direct internal fn way. > > ---------cut from vectorizable_call----------- > tree_code convert_code = ERROR_MARK; > if (cfn != CFN_LAST > && (modifier == NONE > || (modifier == NARROW > && simple_integer_narrowing (vectype_out, vectype_in, > &convert_code)))) > ifn = vectorizable_internal_function (cfn, callee, vectype_out, > vectype_in); > -----------cut end---------------------- > > Similar for CFN_BUILT_IN_LCEIL under 32-bit target. > For 64-bit target CFN_BUILT_IN_LCEIL, CFN_BUILT_IN_LLCEIL will go the direct > internal fn way, add lceilmn2 expanders works. > > Not sure whether vectorizable_call should be extended or just leave > CFN_BUILT_IN_ICEIL/IFLOOR/IRINT/IROUND part in > ix86_builtin_vectorized_function. I think this is a known issue (we may even have a bugreport) so I'd leave handling of those cases in ix86_builtin_vectorized_function.