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

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:75f8900159133ce069ef1d2edf3b67c7bc82e305

commit r12-151-g75f8900159133ce069ef1d2edf3b67c7bc82e305
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Tue Apr 27 14:47:54 2021 +0200

    match.pd: Add some __builtin_ctz (x) cmp cst simplifications [PR95527]

    This patch adds some ctz simplifications (e.g. ctz (x) >= 3 can be done by
    testing if the low 3 bits are zero, etc.).

    In addition, I've noticed that in the CLZ case, the
     #ifdef CLZ_DEFINED_VALUE_AT_ZERO don't really work as intended, they
    are evaluated during genmatch and the macro is not defined then
    (but, because of the missing tm.h includes it isn't defined in
    gimple-match.c or generic-match.c either).  And when tm.h is included,
    defaults.h is included which defines a fallback version of that macro.

    For GCC 12, I wonder if it wouldn't be better to say in addition to
__builtin_c[lt]z*
    is always UB at zero that it would be undefined for .C[LT]Z ifn too if it
    has just one operand and use a second operand to be the constant we expect
    at zero.

    2021-04-27  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/95527
            * generic-match-head.c: Include tm.h.
            * gimple-match-head.c: Include tm.h.
            * match.pd (CLZ == INTEGER_CST): Don't use
            #ifdef CLZ_DEFINED_VALUE_AT_ZERO, only test
CLZ_DEFINED_VALUE_AT_ZERO
            if clz == CFN_CLZ.  Add missing val declaration.
            (CTZ cmp CST): New simplifications.

            * gcc.dg/tree-ssa/pr95527-2.c: New test.

Reply via email to