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

--- Comment #11 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:6dd613df59060fb54c4e3f66f39cf59bc44d118a

commit r14-8360-g6dd613df59060fb54c4e3f66f39cf59bc44d118a
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Fri Jan 12 09:09:10 2024 +0000

    rtl-ssa: Ensure new defs get inserted [PR113070]

    In r14-5820-ga49befbd2c783e751dc2110b544fe540eb7e33eb I added support to
    RTL-SSA for inserting new insns, which included support for users
    creating new defs.

    However, I missed that apply_changes_to_insn needed updating to ensure
    that the new defs actually got inserted into the main def chain.  This
    meant that when the aarch64 ldp/stp pass inserted a new stp insn, the
    stp would just get skipped over during subsequent alias analysis, as its
    def never got inserted into the memory def chain.  This (unsurprisingly)
    led to wrong code.

    This patch fixes the issue by ensuring new user-created defs get
    inserted.  I would have preferred to have used a flag internal to the
    defs instead of a separate data structure to keep track of them, but since
    machine_mode increased to 16 bits we're already at 64 bits in access_info,
    and we can't really reuse m_is_temp as the logic in finalize_new_accesses
    requires it to get cleared.

    gcc/ChangeLog:

            PR target/113070
            * rtl-ssa.h: Include hash-set.h.
            * rtl-ssa/changes.cc (function_info::finalize_new_accesses): Add
            new_sets parameter and use it to keep track of new user-created
sets.
            (function_info::apply_changes_to_insn): Also call add_def on new
sets.
            (function_info::change_insns): Add hash_set to keep track of new
            user-created defs.  Plumb it through.
            * rtl-ssa/functions.h: Add hash_set parameter to
finalize_new_accesses and
            apply_changes_to_insn.

Reply via email to