diff options
author | Richard Stallman <rms@gnu.org> | 1992-01-17 23:19:29 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-01-17 23:19:29 +0000 |
commit | 34e567536c877b47a1d055aa73420d66d1c4d7ae (patch) | |
tree | b384e599fc3ef596a91e50d7389cf9fa3720fbfa /gcc/global.c | |
parent | 6c65299b5eb54054e639c3f2523e30542fe25555 (diff) | |
download | gcc-34e567536c877b47a1d055aa73420d66d1c4d7ae.zip gcc-34e567536c877b47a1d055aa73420d66d1c4d7ae.tar.gz gcc-34e567536c877b47a1d055aa73420d66d1c4d7ae.tar.bz2 |
*** empty log message ***
From-SVN: r204
Diffstat (limited to 'gcc/global.c')
-rw-r--r-- | gcc/global.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gcc/global.c b/gcc/global.c index c016d38..25df390 100644 --- a/gcc/global.c +++ b/gcc/global.c @@ -1,5 +1,5 @@ /* Allocate registers for pseudo-registers that span basic blocks. - Copyright (C) 1987-1991 Free Software Foundation, Inc. + Copyright (C) 1987, 1988, 1991 Free Software Foundation, Inc. This file is part of GNU CC. @@ -394,9 +394,17 @@ global_alloc (file) for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) if (reg_allocno[i] < 0 && reg_renumber[i] >= 0) { - local_reg_n_refs[reg_renumber[i]] += reg_n_refs[i]; - local_reg_live_length[reg_renumber[i]] += reg_live_length[i]; + int regno = reg_renumber[i]; + int endregno = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i)); + int j; + + for (j = regno; j < endregno; j++) + { + local_reg_n_refs[j] += reg_n_refs[i]; + local_reg_live_length[j] += reg_live_length[i]; + } } + /* We can't override local-alloc for a reg used not just by local-alloc. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (regs_ever_live[i]) @@ -1016,8 +1024,16 @@ find_reg (allocno, losers, all_regs_p, accept_call_clobbered, retrying) than it would be used by this one allocno! */ int k; for (k = 0; k < max_regno; k++) - if (reg_renumber[k] == i) - reg_renumber[k] = -1; + if (reg_renumber[k] >= 0) + { + int regno = reg_renumber[k]; + int endregno + = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (k)); + + if (i >= regno && i < endregno) + reg_renumber[k] = -1; + } + best_reg = i; break; } |