*** empty log message ***

From-SVN: r191
This commit is contained in:
Richard Kenner 1992-01-15 16:34:28 -05:00
parent d7429b6aeb
commit c66e0741f8
2 changed files with 22 additions and 11 deletions

View File

@ -1,5 +1,5 @@
/* Generate code from machine description to recognize rtl as insns.
Copyright (C) 1987, 1988, 1991 Free Software Foundation, Inc.
Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
This file is part of GNU CC.

View File

@ -1,5 +1,5 @@
/* Procedure integration for GNU CC.
Copyright (C) 1988-1991 Free Software Foundation, Inc.
Copyright (C) 1988, 1992 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@ -1042,7 +1042,6 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
rtx *arg_vals;
rtx insn;
int max_regno;
int equiv_map_size;
register int i;
int min_labelno = FIRST_LABELNO (header);
int max_labelno = LAST_LABELNO (header);
@ -1173,16 +1172,26 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
/* const_equiv_map maps pseudos in our routine to constants, so it needs to
be large enough for all our pseudos. This is the number we are currently
using plus the number in the called routine, plus one for each arg and
one for the return value. */
equiv_map_size
= max_reg_num () + (max_regno - FIRST_PSEUDO_REGISTER) + nargs + 1;
using plus the number in the called routine, plus 15 for each arg,
five to compute the virtual frame pointer, and five for the return value.
This should be enough for most cases. We do not reference entries
outside the range of the map.
map->const_equiv_map = (rtx *)alloca (equiv_map_size * sizeof (rtx));
bzero (map->const_equiv_map, equiv_map_size * sizeof (rtx));
??? These numbers are quite arbitrary and were obtained by
experimentation. At some point, we should try to allocate the
table after all the parameters are set up so we an more accurately
estimate the number of pseudos we will need. */
map->const_age_map = (unsigned *)alloca (equiv_map_size * sizeof (unsigned));
bzero (map->const_age_map, equiv_map_size * sizeof (unsigned));
map->const_equiv_map_size
= max_reg_num () + (max_regno - FIRST_PSEUDO_REGISTER) + 15 * nargs + 10;
map->const_equiv_map
= (rtx *)alloca (map->const_equiv_map_size * sizeof (rtx));
bzero (map->const_equiv_map, map->const_equiv_map_size * sizeof (rtx));
map->const_age_map
= (unsigned *)alloca (map->const_equiv_map_size * sizeof (unsigned));
bzero (map->const_age_map, map->const_equiv_map_size * sizeof (unsigned));
map->const_age = 0;
/* Record the current insn in case we have to set up pointers to frame
@ -2139,7 +2148,9 @@ subst_constants (loc, insn, map)
hard regs used as user variables with constants. */
{
int regno = REGNO (x);
if (! (regno < FIRST_PSEUDO_REGISTER && REG_USERVAR_P (x))
&& regno < map->const_equiv_map_size
&& map->const_equiv_map[regno] != 0
&& map->const_age_map[regno] >= map->const_age)
validate_change (insn, loc, map->const_equiv_map[regno], 1);