[Bug target/106910] roundss not vectorized

crazylht at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Sep 15 09:35:34 GMT 2022


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.


More information about the Gcc-bugs mailing list