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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Vladimir Makarov <vmaka...@gcc.gnu.org>:

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

commit r11-8008-g4bbd51afaa4a3c116fb538d912b35e126be80b41
Author: Vladimir N. Makarov <vmaka...@redhat.com>
Date:   Wed Mar 31 13:26:30 2021 -0400

    [PR99781] Update correctly reg notes in LRA for multi-registers and set up
biggest mode safely

    The PR is about incorrect use of partial_subreg_p for unordered modes.
    I found 2 places of dangerous comparing unordered modes in LRA.  The
    patch removes dangerous use of paradoxical_subreg_p and
    partial_subreg_p in split_reg and process_bb_lives.  The both places
    used them to solve PR77761 long time ago.  But the problem was also
    fixed by later patches too (if there is no hard reg explicitly, it
    have VOIDmode and we use natural mode to split hard reg live,
    otherwise we use the biggest explicitly used mode for hard reg
    splitting).  The PR also says about inaccurate update of reg notes in
    LRA.  It happens for reg notes which refer for multi-registers.  The
    patch also fixes this issue.

    gcc/ChangeLog:

            PR target/99781
            * lra-constraints.c (split_reg): Don't check paradoxical_subreg_p.
            * lra-lives.c (clear_sparseset_regnos, regnos_in_sparseset_p): New
            functions.
            (process_bb_lives): Don't update biggest mode of hard reg for
            implicit in multi-register group.  Use the new functions for
            updating dead_set and unused_set by register notes.

    gcc/testsuite/ChangeLog:

            PR target/99781
            * g++.target/aarch64/sve/pr99781.C: New.

Reply via email to