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

--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Richard Sandiford <rsand...@gcc.gnu.org>:

https://gcc.gnu.org/g:70ae0daeb76f28a3135f4a74d6e440fb1d9821fa

commit r15-2936-g70ae0daeb76f28a3135f4a74d6e440fb1d9821fa
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Thu Aug 15 16:54:02 2024 +0100

    late-combine: Preserve INSN_CODE when modifying notes [PR116343]

    When it removes a definition, late-combine tries to update all
    uses in notes.  It does this using the same insn_propagation class
    that it uses for patterns.

    However, insn_propagation uses validate_change, which in turn
    resets the INSN_CODE.  This is inefficient in the best case,
    since it forces the pattern to be rerecognised even though
    changing a note can't affect the INSN_CODE.  But in the PR
    it's a correctness problem: resetting INSN_CODE means we lose
    the NOOP_INSN_MOVE_CODE, which in turn means that rtl-ssa doesn't
    queue it for deletion.

    This patch adds a routine specifically for propagating into notes.
    A belt-and-braces fix would be to rerecognise noop moves in
    function_info::change_insns, but I can't think of a good reason
    why that would be necessary, and it could paper over latent bugs.

    gcc/
            PR testsuite/116343
            * recog.h (insn_propagation::apply_to_note): Declare.
            * recog.cc (insn_propagation::apply_to_note): New function.
            * late-combine.cc (insn_combination::substitute_note): Use
            apply_to_note instead of apply_to_rvalue.
            * rtl-ssa/changes.cc (rtl_ssa::changes_are_worthwhile): Improve
            dumping of costs for noop moves.

    gcc/testsuite/
            PR testsuite/116343
            * gcc.dg/torture/pr116343.c: New test.

Reply via email to