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

--- Comment #1 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Dimitar Dimitrov <dimi...@gcc.gnu.org>:

https://gcc.gnu.org/g:10dd6dea95c5fc41c789c6506338e101e0590a02

commit r13-2140-g10dd6dea95c5fc41c789c6506338e101e0590a02
Author: Dimitar Dimitrov <dimi...@dinux.eu>
Date:   Sun Aug 14 18:50:18 2022 +0300

    PR target/106564: pru: Optimize 64-bit sign- and zero-extend

    Add new patterns to optimize 64-bit sign- and zero-extend operations for
    the PRU target.

    The new 64-bit zero-extend patterns are straightforward define_insns.

    The old 16/32-bit sign-extend pattern has been rewritten from scratch
    in order to add 64-bit support.  The new pattern expands into several
    optimized insns for filling bytes with zeros or ones, and for
    conditional branching on bit-test.  The bulk of this patch is to
    implement the patterns for those new optimized insns.

            PR target/106564

    gcc/ChangeLog:

            * config/pru/constraints.md (Um): New constraint for -1.
            (Uf): New constraint for IOR fill-bytes constants.
            (Uz): New constraint for AND zero-bytes constants.
            * config/pru/predicates.md (const_fillbytes_operand): New
            predicate for IOR fill-bytes constants.
            (const_zerobytes_operand): New predicate for AND zero-bytes
            constants.
            * config/pru/pru-protos.h (pru_output_sign_extend): Remove.
            (struct pru_byterange): New struct to describe a byte range.
            (pru_calc_byterange): New declaration.
            * config/pru/pru.cc (pru_rtx_costs): Add penalty for
            64-bit zero-extend.
            (pru_output_sign_extend): Remove.
            (pru_calc_byterange): New helper function to extract byte
            range info from a constant.
            (pru_print_operand): Remove 'y' and 'z' print modifiers.
            * config/pru/pru.md (zero_extendqidi2): New pattern.
            (zero_extendhidi2): New pattern.
            (zero_extendsidi2): New pattern.
            (extend<EQS0:mode><EQD:mode>2): Rewrite as an expand.
            (@pru_ior_fillbytes<mode>): New pattern.
            (@pru_and_zerobytes<mode>): New pattern.
            (<code>di3): Rewrite as an expand and handle ZERO and FILL
            special cases.
            (pru_<code>di3): New name for <code>di3.
            (@cbranch_qbbx_const_<BIT_TEST:code><HIDI:mode>): New pattern to
            handle bit-test for 64-bit registers.

    gcc/testsuite/ChangeLog:

            * gcc.target/pru/pr106564-1.c: New test.
            * gcc.target/pru/pr106564-2.c: New test.
            * gcc.target/pru/pr106564-3.c: New test.
            * gcc.target/pru/pr106564-4.c: New test.

    Signed-off-by: Dimitar Dimitrov <dimi...@dinux.eu>
  • [Bug target/106564] PRU: Ineffi... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to