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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Alex Coplan <acop...@gcc.gnu.org>:

https://gcc.gnu.org/g:f5213759a7e0efc4ca7bbb484bab94ca19bc1b5d

commit r14-6740-gf5213759a7e0efc4ca7bbb484bab94ca19bc1b5d
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Wed Dec 20 09:39:29 2023 +0000

    aarch64: Validate register operands early in ldp fusion pass [PR113062]

    We were missing validation of the candidate register operands in the
    ldp/stp pass.  I was relying on recog rejecting such cases when we
    formed the final pair insn, but the testcase shows that with
    -fharden-conditionals we attempt to combine two insns with asm_operands,
    both containing mem rtxes.  This then trips the assert:

    gcc_assert (change->new_uses.is_valid ());

    in the stp case as we aren't expecting to have (distinct) uses of mem in
    the candidate stores.

    While doing this I noticed that it seems more natural to have the
    initial definition of mem_size closer to its first use in track_access,
    so I moved that down.

    gcc/ChangeLog:

            PR target/113062
            * config/aarch64/aarch64-ldp-fusion.cc
            (ldp_bb_info::track_access): Punt on accesses with invalid
            register operands, move definition of mem_size closer to its
            first use.

    gcc/testsuite/ChangeLog:

            PR target/113062
            * gcc.dg/pr113062.c: New test.

Reply via email to