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

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Georg-Johann Lay <g...@gcc.gnu.org>:

https://gcc.gnu.org/g:94355acc2debe03eb3b0a85229e340675a1ff6bd

commit r15-8674-g94355acc2debe03eb3b0a85229e340675a1ff6bd
Author: Georg-Johann Lay <a...@gjlay.de>
Date:   Sat Mar 15 20:53:52 2025 +0100

    AVR: target/119421 Better optimize some bit operations.

    There are occasions where knowledge about nonzero bits makes some
    optimizations possible.  For example,

       Rd |= Rn << Off

    can be implemented as

       SBRC Rn, 0
       ORI  Rd, 1 << Off

    when Rn in { 0, 1 }, i.e. nonzero_bits (Rn) == 1.  This patch adds some
    patterns that exploit nonzero_bits() in some combiner patterns.
    As insn conditions are not supposed to contain nonzero_bits(), the patch
    splits such insns right after pass insn combine.

            PR target/119421
    gcc/
            * config/avr/avr.opt (-muse-nonzero-bits): New option.
            * config/avr/avr-protos.h (avr_nonzero_bits_lsr_operands_p): New.
            (make_avr_pass_split_nzb): New.
            * config/avr/avr.cc (avr_nonzero_bits_lsr_operands_p): New
function.
            (avr_rtx_costs_1): Return costs for the new insns.
            * config/avr/avr.md (nzb): New insn attribute.
            (*nzb=1.<code>...): New insns to better support some bit
            operations for <code> in AND, IOR, XOR.
            * config/avr/avr-passes.def (avr_pass_split_nzb): Insert pass
            atfer combine.
            * config/avr/avr-passes.cc (avr_pass_data_split_nzb). New pass
data.
            (avr_pass_split_nzb): New pass.
            (make_avr_pass_split_nzb): New function.
            * common/config/avr/avr-common.cc (avr_option_optimization_table):
            Enable -muse-nonzero-bits for -O2 and higher.
            * doc/invoke.texi (AVR Options): Document -muse-nonzero-bits.
    gcc/testsuite/
            * gcc.target/avr/torture/pr119421-sreg.c: New test.

Reply via email to