[Bug tree-optimization/96226] Failure to optimize shift+not to rotate

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Dec 4 17:45:15 GMT 2020


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

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

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

commit r11-5747-gac2a6962b91128e700ee52db686dcdb2bab93790
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri Dec 4 18:44:31 2020 +0100

    i386: Add combine splitters to allow combining multiple insns into reg1 =
const; reg2 = rotate (reg1, reg3 & cst) [PR96226]

    As mentioned in the PR, we can combine ~(1 << x) into -2 r<< x, but we give
    up in the ~(1 << (x & 31)) cases, as *<rotate_insn><mode>3_mask* don't
allow
    immediate operand 1 and find_split_point prefers to split (x & 31) instead
    of the constant.

    With these combine splitters we help combine decide how to split those
    insns.

    2020-12-04  Jakub Jelinek  <jakub@redhat.com>

            PR target/96226
            * config/i386/i386.md (splitter after *<rotate_insn><mode>3_mask,
            splitter after *<rotate_insn><mode>3_mask_1): New combine
splitters.

            * gcc.target/i386/pr96226.c: New test.


More information about the Gcc-bugs mailing list