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

--- Comment #6 from GCC 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:f1b03fa964527678f15e6ef416bfe37e60b3dc54

commit r14-5901-gf1b03fa964527678f15e6ef416bfe37e60b3dc54
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Tue Nov 28 10:15:52 2023 +0100

    match.pd: Fix parity (X) ^ parity (Y) simplification [PR112719]

    When looking around, I've noticed we have a similar simplification
    for parity (with ^ rather than +).  Note, unlike the popcount one,
    this one doesn't check for INTEGRAL_TYPE_P (type) (which rules out
    vector simplification), so I've used the old handling for types_match and
    otherwise do it only for scalar argument types and handle different
    precision in there.

    The testcase ICEs without the previous patch on the first function,
    but strangely not on the second which tests parity.  The reason
    is that in this case there is no wi::bit_and test like for popcount
    and for BITINT_TYPEs build_call_internal actually refuses to create it
    and thus the whole simplification fails.  While
    .{CLZ,CTZ,CLRSB,FFS,POPCOUNT,PARITY} ifns are direct optab ifns for
    normal integer and vector types (and thus it is desirable to punt if
    there is no supported optab for them), they have this large/huge _BitInt
    extension before bitint lowering, so the patch also adjusts
    build_call_internal to allow that case.

    2023-11-28  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/112719
            * match.pd (parity(X)^parity(Y) -> parity(X^Y)): Handle case of
            mismatched types.
            * gimple-match-exports.cc (build_call_internal): Add special-case
for
            bit query ifns on large/huge BITINT_TYPE before bitint lowering.

            * gcc.dg/bitint-43.c: New test.

Reply via email to