diff options
author | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-04-14 02:28:46 +0000 |
---|---|---|
committer | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-04-14 02:28:46 +0000 |
commit | d14dbec5476797990d0d4d5b487822d0a2b4853c (patch) | |
tree | 17efbc0a6f42d3bc2e77211baecf71bc557f15d4 /gcc/regclass.c | |
parent | 0dbb8bc6321c906387966206ce7b9048a0b37d48 (diff) | |
download | gcc-d14dbec5476797990d0d4d5b487822d0a2b4853c.tar.gz |
* basic-block.h (REG_BASIC_BLOCK): Use VEC instead of VARRAY.
* flow.c (reg_n_info): Change the type to
VEC(reg_info_p,heap) *.
* regclass.c (allocate_reg_info, free_reg_info): Use VEC
instead of VARRAY.
* regs.h (reg_info_p): New.
(REG_N_REFS, REG_FREQ, REG_N_SETS, REG_N_DEATHS,
REG_N_CALLS_CROSSED, REG_N_THROWING_CALLS_CROSSED,
REG_LIVE_LENGTH, REGNO_FIRST_UID, REGNO_LAST_UID): Use VEC
instead of VARRAY.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112942 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r-- | gcc/regclass.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c index 1f1e6c24166..8a0bab19026 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -2176,13 +2176,28 @@ allocate_reg_info (size_t num_regs, int new_p, int renumber_p) if (!reg_n_info) { - VARRAY_REG_INIT (reg_n_info, regno_allocated, "reg_n_info"); + reg_n_info = VEC_alloc (reg_info_p, heap, regno_allocated); + VEC_safe_grow (reg_info_p, heap, reg_n_info, regno_allocated); + memset (VEC_address (reg_info_p, reg_n_info), 0, + sizeof (reg_info_p) * regno_allocated); renumber = xmalloc (size_renumber); reg_pref_buffer = XNEWVEC (struct reg_pref, regno_allocated); } else { - VARRAY_GROW (reg_n_info, regno_allocated); + size_t old_length = VEC_length (reg_info_p, reg_n_info); + if (old_length < regno_allocated) + { + reg_info_p *addr; + VEC_safe_grow (reg_info_p, heap, reg_n_info, regno_allocated); + addr = VEC_address (reg_info_p, reg_n_info); + memset (&addr[old_length], 0, + sizeof (reg_info_p) * (regno_allocated - old_length)); + } + else if (regno_allocated < old_length) + { + VEC_truncate (reg_info_p, reg_n_info, regno_allocated); + } if (new_p) /* If we're zapping everything, no need to realloc. */ { @@ -2238,7 +2253,8 @@ allocate_reg_info (size_t num_regs, int new_p, int renumber_p) for (i = min_index+local_min; i <= max; i++) { - VARRAY_REG (reg_n_info, i) = ®_data->data[i-min_index]; + VEC_replace (reg_info_p, reg_n_info, i, + ®_data->data[i-min_index]); REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN; renumber[i] = -1; reg_pref_buffer[i].prefclass = (char) NO_REGS; @@ -2265,7 +2281,7 @@ free_reg_info (void) struct reg_info_data *reg_data; struct reg_info_data *reg_next; - VARRAY_FREE (reg_n_info); + VEC_free (reg_info_p, heap, reg_n_info); for (reg_data = reg_info_head; reg_data; reg_data = reg_next) { reg_next = reg_data->next; |