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

--- Comment #15 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:3d82ebb696f50f02c6519c368118a019a460fa9e

commit r14-8370-g3d82ebb696f50f02c6519c368118a019a460fa9e
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Tue Jan 16 21:20:45 2024 +0000

    aarch64: Fix up debug uses in ldp/stp pass [PR113089]

    As the PR shows, we were missing code to update debug uses in the
    load/store pair fusion pass.  This patch fixes that.

    The patch tries to give a complete treatment of the debug uses that will
    be affected by the changes we make, and in particular makes an effort to
    preserve debug info where possible, e.g. when re-ordering an update of
    a base register by a constant over a debug use of that register.  When
    re-ordering loads over a debug use of a transfer register, we reset the
    debug insn.  Likewise when re-ordering stores over debug uses of mem.

    While doing this I noticed that try_promote_writeback used a strange
    choice of move_range for the pair insn, in that it chose the previous
    nondebug insn instead of the insn itself.  Since the insn is being
    changed, these move ranges are equivalent (at least in terms of nondebug
    insn placement as far as RTL-SSA is concerned), but I think it is more
    natural to choose the pair insn itself.  This is needed to avoid
    incorrectly updating some debug uses.

    gcc/ChangeLog:

            PR target/113089
            * config/aarch64/aarch64-ldp-fusion.cc (reset_debug_use): New.
            (fixup_debug_use): New.
            (fixup_debug_uses_trailing_add): New.
            (fixup_debug_uses): New. Use it ...
            (ldp_bb_info::fuse_pair): ... here.
            (try_promote_writeback): Call fixup_debug_uses_trailing_add to
            fix up debug uses of the base register that are affected by
            folding in the trailing add insn.

    gcc/testsuite/ChangeLog:

            PR target/113089
            * gcc.c-torture/compile/pr113089.c: New test.

Reply via email to