[Bug target/102239] powerpc suboptimal boolean test of contiguous bits

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jan 11 09:23:01 GMT 2022


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

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Xiong Hu Luo <luoxhu@gcc.gnu.org>:

https://gcc.gnu.org/g:19d81fda48f30c4fc11c8912749351acd9159c17

commit r12-6433-g19d81fda48f30c4fc11c8912749351acd9159c17
Author: Xionghu Luo <luoxhu@linux.ibm.com>
Date:   Sun Dec 12 23:17:13 2021 -0600

    rs6000: powerpc suboptimal boolean test of contiguous bits [PR102239]

    Add specialized version to combine two instructions from

     9: {r123:CC=cmp(r124:DI&0x600000000,0);clobber scratch;}
           REG_DEAD r124:DI
     10: pc={(r123:CC==0)?L15:pc}
          REG_DEAD r123:CC

    to:

     10: {pc={(r123:DI&0x600000000==0)?L15:pc};clobber scratch;clobber %0:CC;}

    then split2 will split it to one rotate dot instruction (to save one
    rotate back instruction) as shifted result doesn't matter when comparing
    to 0 in CCEQmode.

    Bootstrapped and regression tested pass on Power 8/9/10.

    gcc/ChangeLog:

            PR target/102239
            * config/rs6000/rs6000-protos.h (rs6000_is_valid_rotate_dot_mask):
New
            declare.
            * config/rs6000/rs6000.c (rs6000_is_valid_rotate_dot_mask): New
            function.
            * config/rs6000/rs6000.md (*branch_anddi3_dot): New.

    gcc/testsuite/ChangeLog:

            PR target/102239
            * gcc.target/powerpc/pr102239.c: New test.


More information about the Gcc-bugs mailing list