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

--- Comment #23 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Iain D Sandoe <ia...@gcc.gnu.org>:

https://gcc.gnu.org/g:4c3792d448964f7bd99e7eac2c29c9eb7c2bfb84

commit r12-7209-g4c3792d448964f7bd99e7eac2c29c9eb7c2bfb84
Author: Iain Sandoe <i...@sandoe.co.uk>
Date:   Mon Feb 7 15:36:35 2022 +0000

    LRA, rs6000, Darwin: Amend lo_sum use for forced constants [PR104117].

    Two issues resulted in this PR, which manifests when we force a constant
into
    memory in LRA (in PIC code on Darwin).  The presence of such forced
constants
    is quite dependent on other RTL optimisations, and it is easy for the issue
to
    become latent for a specific case.

    First, in the Darwin-specific rs6000 backend code, we were not being
careful
    enough in rejecting invalid symbolic addresses.  Specifically, when
generating
    PIC code, we require a SYMBOL_REF to be wrapped in an
UNSPEC_MACHOPIC_OFFSET.

    Second, LRA was attempting to load a register using an invalid lo_sum
address.

    Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
    Co-authored-by: Vladimir Makarov <vmaka...@redhat.com>

            PR target/104117

    gcc/ChangeLog:

            * config/rs6000/rs6000.cc
(darwin_rs6000_legitimate_lo_sum_const_p):
            Check for UNSPEC_MACHOPIC_OFFSET wrappers on symbolic addresses
when
            emitting PIC code.
            (legitimate_lo_sum_address_p): Likewise.
            * lra-constraints.cc (process_address_1): Do not attempt to emit a
reg
            load from an invalid lo_sum address.

Reply via email to