[Bug tree-optimization/94026] combine missed opportunity to simplify comparisons with zero

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jun 27 06:45:48 GMT 2022


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

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Roger Sayle <sayle@gcc.gnu.org>:

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

commit r13-1281-gf3f73e86ec8613f176db3e52bbfbfbb9636cb714
Author: Roger Sayle <roger@nextmovesoftware.com>
Date:   Mon Jun 27 07:44:49 2022 +0100

    [PATCH] PR tree-optimization/94026: Simplify (X>>8)&6 != 0 as X&1536 != 0.

    This patch implements the missed optimization described in PR 94026,
    where a the shift can be eliminated from the sequence of a shift,
    followed by a bit-wise AND followed by an equality/inequality test.
    Specifically, ((X << C1) & C2) cmp C3 into (X & (C2 >> C1)) cmp (C3 >> C1)
    and likewise ((X >> C1) & C2) cmp C3 into (X & (C2 << C1)) cmp (C3 << C1)
    where cmp is == or !=, and C1, C2 and C3 are integer constants.
    The example in the subject line is taken from the hot function
    self_atari from the Go program Leela (in SPEC CPU 2017).

    2022-06-27  Roger Sayle  <roger@nextmovesoftware.com>

    gcc/ChangeLog
            PR tree-optimization/94026
            * match.pd (((X << C1) & C2) eq/ne C3): New simplification.
            (((X >> C1) & C2) eq/ne C3): Likewise.

    gcc/testsuite/ChangeLog
            PR tree-optimization/94026
            * gcc.dg/pr94026.c: New test case.


More information about the Gcc-bugs mailing list