https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106231

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Roger Sayle <sa...@gcc.gnu.org>:

https://gcc.gnu.org/g:2907bfc3412dd8aef6c6acc17f2152a4e0ac4979

commit r13-1726-g2907bfc3412dd8aef6c6acc17f2152a4e0ac4979
Author: Roger Sayle <ro...@nextmovesoftware.com>
Date:   Mon Jul 18 07:44:38 2022 +0100

    PR target/106231: Optimize (any_extend:DI (ctz:SI ...)) on x86_64.

    This patch resolves PR target/106231 by providing insns that recognize
    (zero_extend:DI (ctz:SI ...)) and (sign_extend:DI (ctz:SI ...)).  The
    result of ctz:SI is always between 0 and 32 (or undefined), so
    sign_extension is the same as zero_extension, and the result is already
    extended in the destination register.

    Things are a little complicated, because the existing implementation
    of *ctzsi2 handles multiple cases, including false dependencies, which
    we continue to support in this patch.

    2022-07-18  Roger Sayle  <ro...@nextmovesoftware.com>

    gcc/ChangeLog
            PR target/106231
            * config/i386/i386.md (*ctzsidi2_<s>ext): New insn_and_split
            to recognize any_extend:DI of ctz:SI which is implicitly extended.
            (*ctzsidi2_<s>ext_falsedep): New define_insn to model a DImode
            extended ctz:SI that has preceding xor to break false dependency.

    gcc/testsuite/ChangeLog
            PR target/106231
            * gcc.target/i386/pr106231-1.c: New test case.
            * gcc.target/i386/pr106231-2.c: New test case.

Reply via email to