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

--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <l...@gcc.gnu.org>:

https://gcc.gnu.org/g:69bd93c167fefbdff0cb88614275358b7a2b2941

commit r15-4991-g69bd93c167fefbdff0cb88614275358b7a2b2941
Author: Alexey Merzlyakov <alexey.merzlya...@samsung.com>
Date:   Wed Nov 6 14:39:30 2024 -0700

    [PATCH v2] RISC-V: zero_extend(not) -> xor optimization [PR112398]

    This patch adds optimization of the following patterns:

      (zero_extend:M (subreg:N (not:O==M (X:Q==M)))) ->
      (xor:M (zero_extend:M (subreg:N (X:M)), mask))
        ... where the mask is GET_MODE_MASK (N).

    For the cases when X:M doesn't have any non-zero bits outside of mode N,
    (zero_extend:M (subreg:N (X:M)) could be simplified to just (X:M)
    and whole optimization will be:

      (zero_extend:M (subreg:N (not:M (X:M)))) ->
      (xor:M (X:M, mask))

    Patch targets to handle code patterns like:
      not   a0,a0
      andi  a0,a0,0xff
    to be optimized to:
      xori  a0,a0,255

    Change was locally tested for x86_64 and AArch64 (as most common)
    and for RV-64 and MIPS-32 targets (as having an effect from this
optimization):
    no regressions for all cases.

            PR rtl-optimization/112398
    gcc/ChangeLog:

            * simplify-rtx.cc (simplify_context::simplify_unary_operation_1):
            Simplify ZERO_EXTEND (SUBREG (NOT X)) to XOR (X,
GET_MODE_MASK(SUBREG))
            when X doesn't have any non-zero bits outside of SUBREG mode.

    gcc/testsuite/ChangeLog:

            * gcc.target/riscv/pr112398.c: New test.

    Signed-off-by: Alexey Merzlyakov <alexey.merzlya...@samsung.com>

Reply via email to