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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>:

https://gcc.gnu.org/g:fdc46830f1b793dc791099acfadc3f0f8cc24c0e

commit r12-7361-gfdc46830f1b793dc791099acfadc3f0f8cc24c0e
Author: Richard Biener <rguent...@suse.de>
Date:   Wed Feb 23 13:47:01 2022 +0100

    middle-end/104644 - recursion with bswap match.pd pattern

    The following patch avoids infinite recursion during generic folding.
    The (cmp (bswap @0) INTEGER_CST@1) simplification relies on
    (bswap @1) actually being simplified, if it is not simplified, we just
    move the bswap from one operand to the other and if @0 is also INTEGER_CST,
    we apply the same rule next.

    The reason why bswap @1 isn't folded to INTEGER_CST is that the INTEGER_CST
    has TREE_OVERFLOW set on it and fold-const-call.cc predicate punts in
    such cases:
    static inline bool
    integer_cst_p (tree t)
    {
      return TREE_CODE (t) == INTEGER_CST && !TREE_OVERFLOW (t);
    }
    The patch uses ! modifier to ensure the bswap is simplified and
    extends support to GENERIC by means of requiring !EXPR_P which
    is not perfect but a conservative approximation.

    2022-02-22  Richard Biener  <rguent...@suse.de>

            PR tree-optimization/104644
            * doc/match-and-simplify.texi: Amend ! documentation.
            * genmatch.cc (expr::gen_transform): Code-generate ! support
            for GENERIC.
            (parser::parse_expr): Allow ! for GENERIC.
            * match.pd (cmp (bswap @0) INTEGER_CST@1): Use ! modifier on
            bswap.

            * gcc.dg/pr104644.c: New test.

    Co-Authored-by: Jakub Jelinek <ja...@redhat.com>

Reply via email to