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

--- Comment #12 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Kewen Lin <li...@gcc.gnu.org>:

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

commit r15-1890-gf379596e0ba99df249d6e8b3f2e66edfcea916fe
Author: Kewen Lin <li...@linux.ibm.com>
Date:   Mon Jul 8 00:14:59 2024 -0500

    isel: Fold more in gimple_expand_vec_cond_expr with andc and iorc
[PR115659]

    As PR115659 shows, assuming c = x CMP y, there are some
    folding chances for patterns r = c ? 0/z : z/-1:
      - for r = c ? 0 : z, it can be folded into r = ~c & z.
      - for r = c ? z : -1, it can be folded into r = ~c | z.

    But BIT_AND/BIT_IOR applied on one BIT_NOT operand is a
    compound operation, it's arguable to consider it beats
    vector selection.  So this patch is to introduce new
    optabs andc, iorc and its corresponding internal functions
    BIT_{ANDC,IORC}, and if targets defines such optabs for
    vector modes, it means targets support these hardware
    insns and should be not worse than vector selection.

            PR tree-optimization/115659

    gcc/ChangeLog:

            * doc/md.texi: Document andcm3 and iorcm3.
            * gimple-isel.cc (gimple_expand_vec_cond_expr): Add more foldings
for
            patterns x CMP y ? 0 : z and x CMP y ? z : -1.
            * internal-fn.def (BIT_ANDC): New internal function.
            (BIT_IORC): Likewise.
            * optabs.def (andc, iorc): New optab.

Reply via email to