[Bug middle-end/108031] riscv: Access of members of a global structure is not optimized in atomic operations

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108031

--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <[email protected]>:

https://gcc.gnu.org/g:0cfd3de946cedafc0948fe4fde5a015c63b8993c

commit r17-3276-g0cfd3de946cedafc0948fe4fde5a015c63b8993c
Author: Jeff Law <[email protected]>
Date:   Thu Aug 13 21:22:57 2026 -0600

    [RISC-V][PR target/108031] Adjust cost of LO_SUM expression slightly

    So this is the second part to pr108031.

    Originally I thought this was going to be related to Shreya's work on
fixing
    various cost model goofs in the RISC-V backend and that if we fixed the
cost
    modeling that the right things would just happen.  Essentially what I've
had
    her focused on is cases where we have a single cycle ALU insn, but the
reported
    cost is anything but 4.  Lots of these issues have been clustered around
    embedded extensions, complex RTL for bitmanip instructions, symbolic
addresses,
    etc.  I figured the costing issue with 108031 would be related.

    But it'd been a while since I did that very quick triage, so I went back
and
    took a closer look at the behavior inside CSE; that's when it became clear
that
    the LO_SUM expression and related value equivalent were reporting the same
    cost.  In that scenario CSE (reasonably) chooses to keep things as-is to
avoid
    gratuitous IL changes.

    So we need the LO_SUM expression to cost higher than a simple PLUS, even
though
    they both collapse into addi/add insns.  It's not as crazy at it might seem
as
    anytime we can get rid of the LO_SUM form, we're likely going to get rid of
the
    HIGH expression as well.  Other ports cost symbolics much higher and the
RISC-V
    port may want to follow suit at some point, but for now we can just add a
    single unit to the LO_SUM expression cost and all the right things happen
--
    hopefully with no fallout.

    This has been tested on riscv32-elf and riscv64-elf.  Bootstraps on the K3
and
    c920 will run overnight, but I don't expect any issues.  Pushing to the
trunk.

            PR target/108031
    gcc/
            * config/riscv/riscv.cc (riscv_rtx_costs): Bump the cost of a
LO_SUM
            by one unit to encourage use of related values instead of the
symbolic
            form.

    gcc/testsuite
            * gcc.target/riscv/pr108031-2.c: New test.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.