summaryrefslogtreecommitdiff
path: root/gcc/rtl.c
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-06 09:52:35 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-06 09:52:35 +0000
commitf8d49ce1f2e38dba84b97538980ddba3f8518818 (patch)
tree7e22f9fda0da4355d8a7de6e9143a24ad9ac4db4 /gcc/rtl.c
parent5bf4303e2b3e213e573bf72d7b7b05ad78e9b8bb (diff)
downloadgcc-f8d49ce1f2e38dba84b97538980ddba3f8518818.tar.gz
libiberty:
* aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New. * configure.in: Replace all alloca logic with a simple use of the above new macro. * config.table: Kill *-*-beos* entry. * config/mh-beos: Delete. * configure, config.in: Regenerate. * Makefile.in (ALLOCA, HFILES): Kill. (REQUIRED_OFILES): Add alloca.o. (alloca.o): Depend on libiberty.h. (argv.o): Don't depend on alloca-conf.h. * alloca-conf.h: Delete. * alloca.c: Include libiberty.h. Kill all #ifdef emacs blocks. Provide the C alloca unconditionally. Use PTR where appropriate. Make i00afunc static. * argv.c: Don't include alloca-conf.h. include: * libiberty.h: Prototype C_alloca; define alloca to either __builtin_alloca or C_alloca as appropriate. gcc: * aclocal.m4 (AM_GNU_GETTEXT): Don't AC_REQUIRE AC_FUNC_ALLOCA. * configure, config.in: Regenerate. * config.gcc: Remove references to deleted files. * genattr.c, genattrtab.c, genextract.c, genoutput.c, genrecog.c, rtl.c: Do not use alloca anywhere. * Makefile.in, build-make, system.h, config/x-interix, config/x-svr4, config/xm-interix.h, config/xm-openbsd.h, config/alpha/xm-alpha.h, config/alpha/xm-vms.h, config/arc/xm-arc.h, config/arm/xm-arm.h, config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h, config/h8300/xm-h8300.h, config/i370/x-oe, config/i370/xm-linux.h, config/i386/x-aix, config/i386/x-beos, config/i386/x-ncr3000, config/i386/x-sco5, config/i386/xm-dgux.h, config/i860/x-sysv4, config/i960/xm-i960.h, config/m32r/xm-m32r.h, config/m68k/x-crds, config/m68k/x-dpx2, config/m68k/x-hp320, config/m68k/x-hp320g, config/m69k/x-mot3300, config/m68k/x-mot3300-gas, config/m68k/xm-amix.h, config/m68k/xm-hp320.h, config/m68k/xm-m68kv.h, config/m68k/xm-mot3300.h, config/m88k/x-dolph, config/m88k/x-sysv4, config/m88k/x-tekXD88, config/m88k/xm-m88k.h, config/mcore/xm-mcore.h, config/mips/x-iris, config/mips/x-iris3, config/mips/x-sni-svr4, config/mips/x-sysv, config/mips/xm-iris6.h, config/mips/xm-mips.h, config/mips/xm-nws3250v4.h, config/pa/x-hpux, config/pa/x-pa-mpeix, config/pa/xm-pa.h, config/pa/xm-pa64hpux.h, config/pa/xm-pahpux.h, config/pa/xm-papro.h, config/romp/xm-romp.h, config/rs6000/x-aix31, config/rs6000/x-aix41, config/rs6000/x-beos, config/rs6000/x-lynx, config/rs6000/x-mach, config/rs6000/x-rs6000, config/rs6000/x-sysv4, config/rs6000/xm-rs6000.h, config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, config/sparc/x-sysv4, config/sparc/xm-linux.h, config/sparc/xm-pbd.h, config/sparc/xm-sparc.h, config/vax/xm-vms.h: Eradicate all references to alloca and related stuff. * config/xm-alloca.h, config/clipper/x-clix, config/i386/xm-sysv4.h, config/i860/x-fx2800, config/i860/x-sysv3, config/m88k/x-sysv3, config/sparc/xm-sol2.h, config/we32k/x-we32k: Delete (contained only alloca related hacks). * config/i386/xm-beos.h, config/rs6000/xm-beos.h: Just define USE_C_ALLOCA. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40259 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r--gcc/rtl.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/gcc/rtl.c b/gcc/rtl.c
index 3a5a4876c5b..d4fd96b7230 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -997,7 +997,7 @@ rtx
read_rtx (infile)
FILE *infile;
{
- register int i, j, list_counter;
+ register int i, j;
RTX_CODE tmp_code;
register const char *format_ptr;
/* tmp_char is a buffer used for reading decimal integers
@@ -1111,40 +1111,31 @@ again:
case 'E':
{
- register struct rtx_list *next_rtx, *rtx_list_link;
- struct rtx_list *list_rtx = NULL;
+ /* Obstack to store scratch vector in. */
+ struct obstack vector_stack;
+ int list_counter = 0;
+ rtvec return_vec = NULL_RTVEC;
c = read_skip_spaces (infile);
if (c != '[')
fatal_expected_char (infile, '[', c);
/* add expressions to a list, while keeping a count */
- next_rtx = NULL;
- list_counter = 0;
+ obstack_init (&vector_stack);
while ((c = read_skip_spaces (infile)) && c != ']')
{
ungetc (c, infile);
list_counter++;
- rtx_list_link = (struct rtx_list *)
- alloca (sizeof (struct rtx_list));
- rtx_list_link->value = read_rtx (infile);
- if (next_rtx == 0)
- list_rtx = rtx_list_link;
- else
- next_rtx->next = rtx_list_link;
- next_rtx = rtx_list_link;
- rtx_list_link->next = 0;
+ obstack_ptr_grow (&vector_stack, (PTR) read_rtx (infile));
}
- /* get vector length and allocate it */
- XVEC (return_rtx, i) = (list_counter
- ? rtvec_alloc (list_counter) : NULL_RTVEC);
if (list_counter > 0)
{
- next_rtx = list_rtx;
- for (j = 0; j < list_counter; j++,
- next_rtx = next_rtx->next)
- XVECEXP (return_rtx, i, j) = next_rtx->value;
+ return_vec = rtvec_alloc (list_counter);
+ memcpy (&return_vec->elem[0], obstack_finish (&vector_stack),
+ list_counter * sizeof (rtx));
}
+ XVEC (return_rtx, i) = return_vec;
+ obstack_free (&vector_stack, NULL);
/* close bracket gotten */
}
break;