diff options
author | Vladimir N. Makarov <vmakarov@redhat.com> | 2021-03-31 13:26:30 -0400 |
---|---|---|
committer | Vladimir N. Makarov <vmakarov@redhat.com> | 2021-04-06 09:22:16 -0400 |
commit | 4bbd51afaa4a3c116fb538d912b35e126be80b41 (patch) | |
tree | 39256860f1918487bb7fd4bc249dbe5b1994c5bb /libstdc++-v3/include/std/numeric | |
parent | 498d2ba5849cd0888ad473a2ff953ede106262c5 (diff) | |
download | gcc-4bbd51afaa4a3c116fb538d912b35e126be80b41.zip gcc-4bbd51afaa4a3c116fb538d912b35e126be80b41.tar.gz gcc-4bbd51afaa4a3c116fb538d912b35e126be80b41.tar.bz2 |
[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.
Diffstat (limited to 'libstdc++-v3/include/std/numeric')
0 files changed, 0 insertions, 0 deletions