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.