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

--- Comment #4 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:7aed8dedeb9613925930447bf2457c3fd9972d91

commit r15-2971-g7aed8dedeb9613925930447bf2457c3fd9972d91
Author: Jeff Law <j...@ventanamicro.com>
Date:   Sat Aug 17 09:52:55 2024 -0600

    [RISC-V][PR target/116282] Stabilize pattern conditions

    So as expected the core problem with target/116282 is that the cost of
certain
    constant synthesis cases varied depending on whether or not we're allowed
to
    generate new pseudos or not.

    That in turn meant that in obscure cases an insn might change from
recognizable
    to unrecognizable and triggers the observed failure.

    So we need to keep the cost stable, at least when called from a pattern's
    condition.  So we pass another boolean down when necessary. I've tried to
keep
    API fallout minimized.

    Built and tested  on rv32 in my tester.  Let's see what pre-commit testing
has
    to say though ð

    Note this will also require a minor change to the in-flight constant
synthesis
    work.

            PR target/116282
    gcc/
            * config/riscv/riscv-protos.h (riscv_const_insns): Add new
argument.
            * config/riscv/riscv.cc (riscv_build_integer): Add new argument
            ALLOW_NEW_PSEUDOS.  Pass it down to recursive calls and check it
            before using synthesis which allows new registers to be created.
            (riscv_split_integer_cost): Pass new argument to
riscv_build_integer.
            (riscv_integer_cost): Add ALLOW_NEW_PSEUDOS argument, pass it down
to
            riscv_build_integer.
            (riscv_legitimate_constant_p): Pass new argument to
riscv_const_insns.
            (riscv_const_insns): New argment ALLOW_NEW_PSEUDOS.  Pass it down
to
            riscv_integer_cost and riscv_const_insns.
            (riscv_split_const_insns): Pass new argument to riscv_const_insns.
            (riscv_move_integer, riscv_rtx_costs): Similarly.
            * config/riscv/riscv.md (shadd with costly constant): Pass new
argument
            to riscv_const_insns.
            * config/riscv/bitmanip.md (and with costly constant): Pass new
argument
            to riscv_const_insns.

    gcc/testsuite/
            * gcc.target/riscv/pr116282.c: New test.

Reply via email to