aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-10-02 07:37:10 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-10-02 07:37:10 +0000
commit1bcb4c4faa4bd6b1c917c75b100d618faf9e628c (patch)
treed29b20b9358a62cfb213ea3187e21dd34668432f /gcc/fortran/parse.c
parenta4626a7b3ed64eac59c7905c5d2f997ffd1bedb2 (diff)
downloadgcc-1bcb4c4faa4bd6b1c917c75b100d618faf9e628c.zip
gcc-1bcb4c4faa4bd6b1c917c75b100d618faf9e628c.tar.gz
gcc-1bcb4c4faa4bd6b1c917c75b100d618faf9e628c.tar.bz2
[LRA] Don't make eliminable registers live (PR91957)
One effect of https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00802.html was to strengthen the sanity check in lra_assigns so that it checks whether reg_renumber is consistent with the whole conflict set. This duly tripped on csky for a pseudo that had been allocated to the eliminated frame pointer. (csky doesn't have a separate hard frame pointer.) lra-lives uses: /* Set of hard regs (except eliminable ones) currently live. */ static HARD_REG_SET hard_regs_live; to track the set of live directly-referenced hard registers, and it correctly implements the exclusion when setting up the initial set: hard_regs_live &= ~eliminable_regset; But later calls to make_hard_regno_live and make_hard_regno_dead would process eliminable registers like other registers, recording conflicts for them and potentially making them live. (Note that after r266086, make_hard_regno_dead adds conflicts for registers that are already marked dead.) I think this would have had the effect of pessimising targets without a separate hard frame pointer. 2019-10-02 Richard Sandiford <richard.sandiford@arm.com> gcc/ PR middle-end/91957 * lra-lives.c (make_hard_regno_dead): Don't record conflicts for eliminable registers. (make_hard_regno_live): Likewise, and don't make them live. From-SVN: r276440
Diffstat (limited to 'gcc/fortran/parse.c')
0 files changed, 0 insertions, 0 deletions