This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

PATCH: Memory allocation



This patch avoids deep recursion during the GC-marking of trees.  I
was loathe to give up the easy GC debuggability of the current scheme,
but it really doesn't scale for large programs.

--
Mark Mitchell                   mark@codesourcery.com
CodeSourcery, LLC               http://www.codesourcery.com

2000-04-05  Mark Mitchell  <mark@codesourcery.com>

	* ggc.h: Include varray.h.
	(ggc_pending_trees): Declare.
	(ggc_mark_tree_children): Remove declaration.
	(ggc_mark_tree): Just push unmarked trees on ggc_pending_trees.
	* ggc-common.c (ggc_pending_trees): New variable.
	(ggc_mark_roots): Call ggc_mark_trees.
	(ggc_mark_tree_children): Rename to ggc_mark_trees.  Process all
	the ggc_pending_trees.
	* Makefile.in (GGC_H): New variable.  Use it throughout in place
	of ggc.h.

C++:

2000-04-05  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (GGC_H): New variable.  Use it throughout in place
	of ggc.h.

Fortran:

Wed Apr  5 17:46:39 2000  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (GGC_H): Add varray.h.

Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/Makefile.in,v
retrieving revision 1.415
diff -c -p -r1.415 Makefile.in
*** Makefile.in	2000/04/05 00:32:45	1.415
--- Makefile.in	2000/04/06 00:36:44
*************** REGS_H = regs.h varray.h $(MACHMODE_H)
*** 762,767 ****
--- 762,768 ----
  INTEGRATE_H = integrate.h varray.h
  LOOP_H = loop.h varray.h basic-block.h
  GCC_H = gcc.h version.h
+ GGC_H = ggc.h varray.h
  #
  # Language makefile fragments.
  
*************** s-crt0:	$(CRT0_S) $(MCRT0_S) $(GCC_PASSE
*** 1338,1344 ****
  
  # C language specific files.
  
! c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h ggc.h \
      $(srcdir)/c-parse.h c-tree.h c-common.h input.h flags.h system.h toplev.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
  $(srcdir)/c-parse.h: $(srcdir)/c-parse.c
--- 1339,1345 ----
  
  # C language specific files.
  
! c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) \
      $(srcdir)/c-parse.h c-tree.h c-common.h input.h flags.h system.h toplev.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
  $(srcdir)/c-parse.h: $(srcdir)/c-parse.c
*************** $(srcdir)/c-gperf.h: c-parse.gperf
*** 1358,1377 ****
  	exit 1 )
  	 $(SHELL) $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h
  
! c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h ggc.h \
      c-lex.h flags.h function.h output.h toplev.h defaults.h
  c-typeck.o : c-typeck.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \
      flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h
! c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h ggc.h \
      c-lex.h toplev.h output.h function.h
  c-lex.o : c-lex.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-lex.h c-tree.h \
      c-common.h $(srcdir)/c-parse.h $(srcdir)/c-gperf.h c-pragma.h input.h \
!     intl.h flags.h toplev.h output.h mbchar.h ggc.h
  c-aux-info.o : c-aux-info.c  $(CONFIG_H) system.h $(TREE_H) c-tree.h \
      c-common.h flags.h toplev.h
  c-convert.o : c-convert.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h
  c-pragma.o: c-pragma.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) function.h \
!     defaults.h c-pragma.h toplev.h ggc.h
  c-iterate.o: c-iterate.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-tree.h \
      c-common.h flags.h toplev.h $(EXPR_H)
  mbchar.o: mbchar.c $(CONFIG_H) system.h mbchar.h
--- 1359,1378 ----
  	exit 1 )
  	 $(SHELL) $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h
  
! c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h $(GGC_H) \
      c-lex.h flags.h function.h output.h toplev.h defaults.h
  c-typeck.o : c-typeck.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h \
      flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h
! c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-common.h $(GGC_H) \
      c-lex.h toplev.h output.h function.h
  c-lex.o : c-lex.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-lex.h c-tree.h \
      c-common.h $(srcdir)/c-parse.h $(srcdir)/c-gperf.h c-pragma.h input.h \
!     intl.h flags.h toplev.h output.h mbchar.h $(GGC_H)
  c-aux-info.o : c-aux-info.c  $(CONFIG_H) system.h $(TREE_H) c-tree.h \
      c-common.h flags.h toplev.h
  c-convert.o : c-convert.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h
  c-pragma.o: c-pragma.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) function.h \
!     defaults.h c-pragma.h toplev.h $(GGC_H)
  c-iterate.o: c-iterate.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-tree.h \
      c-common.h flags.h toplev.h $(EXPR_H)
  mbchar.o: mbchar.c $(CONFIG_H) system.h mbchar.h
*************** s-under: $(GCC_PASSES)
*** 1423,1429 ****
  # A file used by all variants of C.
  
  c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-lex.h \
! 	c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) ggc.h \
  	$(EXPR_H)
  
  # Language-independent files.
--- 1424,1430 ----
  # A file used by all variants of C.
  
  c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-lex.h \
! 	c-common.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
  	$(EXPR_H)
  
  # Language-independent files.
*************** dumpvers: dumpvers.c
*** 1464,1480 ****
  version.o: version.c version.h
  
  ggc-common.o: ggc-common.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
! 	flags.h ggc.h varray.h hash.h
  
  ggc-simple.o: ggc-simple.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
! 	ggc.h varray.h
  
  ggc-page.o: ggc-page.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
! 	ggc.h varray.h
  
! ggc-none.o: ggc-none.c $(CONFIG_H) $(RTL_H) ggc.h
  
! ggc-callbacks.o: ggc-callbacks.c $(CONFIG_H) $(RTL_H) $(TREE_H) ggc.h
  
  obstack.o: $(srcdir)/../libiberty/obstack.c $(CONFIG_H)
  	rm -f obstack.c
--- 1465,1481 ----
  version.o: version.c version.h
  
  ggc-common.o: ggc-common.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
! 	flags.h $(GGC_H) varray.h hash.h
  
  ggc-simple.o: ggc-simple.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
! 	$(GGC_H) varray.h
  
  ggc-page.o: ggc-page.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
! 	$(GGC_H) varray.h
  
! ggc-none.o: ggc-none.c $(CONFIG_H) $(RTL_H) $(GGC_H)
  
! ggc-callbacks.o: ggc-callbacks.c $(CONFIG_H) $(RTL_H) $(TREE_H) $(GGC_H)
  
  obstack.o: $(srcdir)/../libiberty/obstack.c $(CONFIG_H)
  	rm -f obstack.c
*************** prefix.o: prefix.c $(CONFIG_H) system.h 
*** 1489,1500 ****
  convert.o: convert.c $(CONFIG_H) system.h $(TREE_H) flags.h convert.h toplev.h
  
  tree.o : tree.c $(CONFIG_H) system.h $(TREE_H) flags.h function.h toplev.h \
!    ggc.h $(HASHTAB_H)
! print-tree.o : print-tree.c $(CONFIG_H) system.h $(TREE_H) ggc.h
  stor-layout.o : stor-layout.c $(CONFIG_H) system.h $(TREE_H) flags.h \
!    function.h $(EXPR_H) $(RTL_H) toplev.h ggc.h
  fold-const.o : fold-const.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h \
!    $(RTL_H) ggc.h
  diagnostic.o : diagnostic.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) tm_p.h flags.h \
     input.h insn-attr.h insn-codes.h insn-config.h toplev.h intl.h 
  toplev.o : toplev.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) function.h \
--- 1490,1501 ----
  convert.o: convert.c $(CONFIG_H) system.h $(TREE_H) flags.h convert.h toplev.h
  
  tree.o : tree.c $(CONFIG_H) system.h $(TREE_H) flags.h function.h toplev.h \
!    $(GGC_H) $(HASHTAB_H)
! print-tree.o : print-tree.c $(CONFIG_H) system.h $(TREE_H) $(GGC_H)
  stor-layout.o : stor-layout.c $(CONFIG_H) system.h $(TREE_H) flags.h \
!    function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H)
  fold-const.o : fold-const.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h \
!    $(RTL_H) $(GGC_H)
  diagnostic.o : diagnostic.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) tm_p.h flags.h \
     input.h insn-attr.h insn-codes.h insn-config.h toplev.h intl.h 
  toplev.o : toplev.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) function.h \
*************** toplev.o : toplev.c $(CONFIG_H) system.h
*** 1506,1512 ****
  	  -DTARGET_NAME=\"$(target_alias)\" \
  	  -c `echo $(srcdir)/toplev.c | sed 's,^\./,,'`
  
! rtl.o : rtl.c $(CONFIG_H) system.h $(RTL_H) bitmap.h ggc.h toplev.h
  
  print-rtl.o : print-rtl.c $(CONFIG_H) system.h $(RTL_H) $(BASIC_BLOCK_H)
  rtlanal.o : rtlanal.c $(CONFIG_H) system.h $(RTL_H)
--- 1507,1513 ----
  	  -DTARGET_NAME=\"$(target_alias)\" \
  	  -c `echo $(srcdir)/toplev.c | sed 's,^\./,,'`
  
! rtl.o : rtl.c $(CONFIG_H) system.h $(RTL_H) bitmap.h $(GGC_H) toplev.h
  
  print-rtl.o : print-rtl.c $(CONFIG_H) system.h $(RTL_H) $(BASIC_BLOCK_H)
  rtlanal.o : rtlanal.c $(CONFIG_H) system.h $(RTL_H)
*************** errors.o : errors.c $(CONFIG_H) system.h
*** 1514,1533 ****
  
  varasm.o : varasm.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h \
     function.h defaults.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
!    xcoffout.h output.h c-pragma.h toplev.h dbxout.h sdbout.h ggc.h
  function.o : function.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h insn-flags.h insn-codes.h $(EXPR_H) $(REGS_H) hard-reg-set.h \
!    insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h ggc.h
  stmt.o : stmt.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h  \
     insn-flags.h insn-config.h insn-codes.h hard-reg-set.h $(EXPR_H) except.h \
!    $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h ggc.h
  except.o : except.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h insn-flags.h $(EXPR_H) $(REGS_H) hard-reg-set.h \
!    insn-config.h $(RECOG_H) output.h except.h toplev.h intl.h ggc.h
  expr.o : expr.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h \
     $(REGS_H) insn-flags.h insn-codes.h $(EXPR_H) insn-config.h $(RECOG_H) \
     output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h except.h \
!    ggc.h intl.h
  builtins.o : builtins.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h $(REGS_H) insn-flags.h insn-codes.h $(EXPR_H) insn-config.h \
     $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
--- 1515,1534 ----
  
  varasm.o : varasm.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h \
     function.h defaults.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
!    xcoffout.h output.h c-pragma.h toplev.h dbxout.h sdbout.h $(GGC_H)
  function.o : function.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h insn-flags.h insn-codes.h $(EXPR_H) $(REGS_H) hard-reg-set.h \
!    insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H)
  stmt.o : stmt.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h  \
     insn-flags.h insn-config.h insn-codes.h hard-reg-set.h $(EXPR_H) except.h \
!    $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H)
  except.o : except.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h insn-flags.h $(EXPR_H) $(REGS_H) hard-reg-set.h \
!    insn-config.h $(RECOG_H) output.h except.h toplev.h intl.h $(GGC_H)
  expr.o : expr.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h \
     $(REGS_H) insn-flags.h insn-codes.h $(EXPR_H) insn-config.h $(RECOG_H) \
     output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h except.h \
!    $(GGC_H) intl.h
  builtins.o : builtins.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     function.h $(REGS_H) insn-flags.h insn-codes.h $(EXPR_H) insn-config.h \
     $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
*************** explow.o : explow.c $(CONFIG_H) system.h
*** 1541,1547 ****
     insn-codes.h toplev.h function.h
  optabs.o : optabs.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h  \
     insn-flags.h insn-config.h insn-codes.h $(EXPR_H) $(RECOG_H) reload.h \
!    toplev.h ggc.h real.h
  dbxout.o : dbxout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h $(REGS_H) \
     insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h dbxout.h \
     toplev.h
--- 1542,1548 ----
     insn-codes.h toplev.h function.h
  optabs.o : optabs.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h  \
     insn-flags.h insn-config.h insn-codes.h $(EXPR_H) $(RECOG_H) reload.h \
!    toplev.h $(GGC_H) real.h
  dbxout.o : dbxout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h $(REGS_H) \
     insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h dbxout.h \
     toplev.h
*************** dwarfout.o : dwarfout.c $(CONFIG_H) syst
*** 1554,1564 ****
  dwarf2out.o : dwarf2out.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) dwarf2.h \
     flags.h insn-config.h reload.h output.h defaults.h \
     hard-reg-set.h $(REGS_H) $(EXPR_H) toplev.h dwarf2out.h varray.h \
!    ggc.h except.h
  xcoffout.o : xcoffout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) xcoffout.h \
!    flags.h toplev.h output.h dbxout.h ggc.h
  emit-rtl.o : emit-rtl.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
!    function.h $(REGS_H) insn-config.h $(RECOG_H) real.h ggc.h \
     $(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \
     $(HASHTAB_H)
  real.o : real.c $(CONFIG_H) system.h $(TREE_H) toplev.h
--- 1555,1565 ----
  dwarf2out.o : dwarf2out.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) dwarf2.h \
     flags.h insn-config.h reload.h output.h defaults.h \
     hard-reg-set.h $(REGS_H) $(EXPR_H) toplev.h dwarf2out.h varray.h \
!    $(GGC_H) except.h
  xcoffout.o : xcoffout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) xcoffout.h \
!    flags.h toplev.h output.h dbxout.h $(GGC_H)
  emit-rtl.o : emit-rtl.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
!    function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
     $(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \
     $(HASHTAB_H)
  real.o : real.c $(CONFIG_H) system.h $(TREE_H) toplev.h
*************** jump.o : jump.c $(CONFIG_H) system.h $(R
*** 1571,1579 ****
  
  simplify-rtx.o : simplify-rtx.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \
     hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
!    output.h function.h cselib.h ggc.h $(srcdir)/../include/obstack.h
  cse.o : cse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
!    real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h ggc.h
  gcse.o : gcse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h \
     flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
     function.h output.h toplev.h
--- 1572,1580 ----
  
  simplify-rtx.o : simplify-rtx.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \
     hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
!    output.h function.h cselib.h $(GGC_H) $(srcdir)/../include/obstack.h
  cse.o : cse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
!    real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h $(GGC_H)
  gcse.o : gcse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h \
     flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
     function.h output.h toplev.h
*************** ssa.o : ssa.c $(CONFIG_H) system.h $(RTL
*** 1588,1594 ****
     output.h insn-config.h
  profile.o : profile.c $(CONFIG_H) system.h $(RTL_H) flags.h insn-flags.h \
     gcov-io.h $(TREE_H) output.h $(REGS_H) toplev.h function.h insn-config.h \
!    ggc.h
  loop.o : loop.c $(CONFIG_H) system.h $(RTL_H) flags.h $(LOOP_H) insn-config.h \
     insn-flags.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) real.h \
     $(BASIC_BLOCK_H) function.h toplev.h varray.h except.h cselib.h
--- 1589,1595 ----
     output.h insn-config.h
  profile.o : profile.c $(CONFIG_H) system.h $(RTL_H) flags.h insn-flags.h \
     gcov-io.h $(TREE_H) output.h $(REGS_H) toplev.h function.h insn-config.h \
!    $(GGC_H)
  loop.o : loop.c $(CONFIG_H) system.h $(RTL_H) flags.h $(LOOP_H) insn-config.h \
     insn-flags.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) real.h \
     $(BASIC_BLOCK_H) function.h toplev.h varray.h except.h cselib.h
*************** combine.o : combine.c $(CONFIG_H) system
*** 1603,1609 ****
     $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h
  regclass.o : regclass.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h flags.h \
     $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \
!    toplev.h function.h output.h ggc.h
  local-alloc.o : local-alloc.c $(CONFIG_H) system.h $(RTL_H) flags.h \
     $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
     output.h function.h insn-attr.h toplev.h
--- 1604,1610 ----
     $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h
  regclass.o : regclass.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h flags.h \
     $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \
!    toplev.h function.h output.h $(GGC_H)
  local-alloc.o : local-alloc.c $(CONFIG_H) system.h $(RTL_H) flags.h \
     $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
     output.h function.h insn-attr.h toplev.h
*************** reorg.o : reorg.c $(CONFIG_H) system.h $
*** 1625,1631 ****
     $(BASIC_BLOCK_H) $(REGS_H) insn-config.h insn-attr.h insn-flags.h \
     $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h
  alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \
!    $(REGS_H) toplev.h output.h $(EXPR_H) insn-flags.h ggc.h function.h \
     cselib.h $(TREE_H)
  regmove.o : regmove.c $(CONFIG_H) system.h $(RTL_H) insn-config.h \
     $(RECOG_H) output.h reload.h $(REGS_H) hard-reg-set.h flags.h function.h \
--- 1626,1632 ----
     $(BASIC_BLOCK_H) $(REGS_H) insn-config.h insn-attr.h insn-flags.h \
     $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h
  alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \
!    $(REGS_H) toplev.h output.h $(EXPR_H) insn-flags.h $(GGC_H) function.h \
     cselib.h $(TREE_H)
  regmove.o : regmove.c $(CONFIG_H) system.h $(RTL_H) insn-config.h \
     $(RECOG_H) output.h reload.h $(REGS_H) hard-reg-set.h flags.h function.h \
*************** dyn-string.o: dyn-string.c dyn-string.h 
*** 1648,1654 ****
  predict.o: predict.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) insn-flags.h function.h except.h $(EXPR_H)
! lists.o: lists.c $(CONFIG_H) system.h toplev.h $(RTL_H) ggc.h
  bb-reorder.o : bb-reorder.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) insn-flags.h function.h except.h $(EXPR_H)
--- 1649,1655 ----
  predict.o: predict.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) insn-flags.h function.h except.h $(EXPR_H)
! lists.o: lists.c $(CONFIG_H) system.h toplev.h $(RTL_H) $(GGC_H)
  bb-reorder.o : bb-reorder.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
     $(RECOG_H) insn-flags.h function.h except.h $(EXPR_H)
*************** regrename.o : regrename.c $(CONFIG_H) sy
*** 1657,1663 ****
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h \
     $(RECOG_H) function.h resource.h
  
! $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) ggc.h \
     $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
     insn-flags.h output.h insn-attr.h insn-codes.h system.h toplev.h function.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file)
--- 1658,1664 ----
     insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h \
     $(RECOG_H) function.h resource.h
  
! $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \
     $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
     insn-flags.h output.h insn-attr.h insn-codes.h system.h toplev.h function.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(out_file)
*************** s-attrtab : $(md_file) genattrtab $(srcd
*** 1797,1803 ****
  	$(SHELL) $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
  	touch s-attrtab
  
! insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) ggc.h $(REGS_H) real.h \
      conditions.h hard-reg-set.h insn-config.h insn-flags.h insn-attr.h \
      output.h $(RECOG_H) function.h insn-codes.h system.h toplev.h flags.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
--- 1798,1804 ----
  	$(SHELL) $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
  	touch s-attrtab
  
! insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(GGC_H) $(REGS_H) real.h \
      conditions.h hard-reg-set.h insn-config.h insn-flags.h insn-attr.h \
      output.h $(RECOG_H) function.h insn-codes.h system.h toplev.h flags.h
  	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
*************** s-output : $(md_file) genoutput $(srcdir
*** 1808,1814 ****
  	$(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c
  	touch s-output
  
! genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) system.h ggc.h
  genrtl.c genrtl.h : s-genrtl
  	@true	# force gnu make to recheck modification times.
  
--- 1809,1815 ----
  	$(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c
  	touch s-output
  
! genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) system.h $(GGC_H)
  genrtl.c genrtl.h : s-genrtl
  	@true	# force gnu make to recheck modification times.
  
*************** genattrtab : genattrtab.o $(HOST_RTL) $(
*** 1902,1908 ****
  	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
  	 genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)
  
! genattrtab.o : genattrtab.c $(RTL_H)  $(build_xm_file) system.h errors.h ggc.h
  	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c
  
  genoutput : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
--- 1903,1909 ----
  	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
  	 genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)
  
! genattrtab.o : genattrtab.c $(RTL_H)  $(build_xm_file) system.h errors.h $(GGC_H)
  	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c
  
  genoutput : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
*************** gengenrtl.o : gengenrtl.c $(RTL_BASE_H) 
*** 1924,1930 ****
  # and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict
  # with the rules for rtl.o, alloca.o, etc.
  $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(CONFIG_H) system.h $(RTL_H) \
!   bitmap.h ggc.h toplev.h
  	rm -f $(HOST_PREFIX)rtl.c
  	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c
  	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c
--- 1925,1931 ----
  # and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict
  # with the rules for rtl.o, alloca.o, etc.
  $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(CONFIG_H) system.h $(RTL_H) \
!   bitmap.h $(GGC_H) toplev.h
  	rm -f $(HOST_PREFIX)rtl.c
  	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c
  	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c
Index: ggc-common.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ggc-common.c,v
retrieving revision 1.23
diff -c -p -r1.23 ggc-common.c
*** ggc-common.c	2000/03/27 01:26:16	1.23
--- ggc-common.c	2000/04/06 00:36:52
*************** Software Foundation, 59 Temple Place - S
*** 33,44 ****
--- 33,48 ----
  /* Statistics about the allocation.  */
  static ggc_statistics *ggc_stats;
  
+ /* Trees that have been marked, but whose children still need marking.  */
+ varray_type ggc_pending_trees;
+ 
  static void ggc_mark_rtx_ptr PARAMS ((void *));
  static void ggc_mark_tree_ptr PARAMS ((void *));
  static void ggc_mark_rtx_varray_ptr PARAMS ((void *));
  static void ggc_mark_tree_varray_ptr PARAMS ((void *));
  static void ggc_mark_tree_hash_table_ptr PARAMS ((void *));
  static void ggc_mark_string_ptr PARAMS ((void *));
+ static void ggc_mark_trees PARAMS ((void));
  static boolean ggc_mark_tree_hash_table_entry PARAMS ((struct hash_entry *,
  						       hash_table_key));
  
*************** ggc_mark_roots ()
*** 174,179 ****
--- 178,185 ----
  {
    struct ggc_root* x;
    
+   VARRAY_TREE_INIT (ggc_pending_trees, 4096, "ggc_pending_trees");
+ 
    for (x = roots; x != NULL; x = x->next)
      {
        char *elt = x->base;
*************** ggc_mark_roots ()
*** 184,189 ****
--- 190,199 ----
        for (i = 0; i < n; ++i, elt += s)
  	(*cb)(elt);
      }
+ 
+   /* Mark all the queued up trees, and their children.  */
+   ggc_mark_trees ();
+   VARRAY_FREE (ggc_pending_trees);
  }
  
  /* R had not been previously marked, but has now been marked via
*************** ggc_mark_rtvec_children (v)
*** 297,444 ****
      ggc_mark_rtx (RTVEC_ELT (v, i));
  }
  
! /* T had not been previously marked, but has now been marked via
!    ggc_set_mark.  Now recurse and process the children.  */
  
! void
! ggc_mark_tree_children (t)
!      tree t;
  {
!   enum tree_code code = TREE_CODE (t);
! 
!   /* Collect statistics, if appropriate.  */
!   if (ggc_stats)
      {
!       ++ggc_stats->num_trees[(int) code];
!       ggc_stats->size_trees[(int) code] += ggc_get_size (t);
!     }
  
!   /* Bits from common.  */
!   ggc_mark_tree (TREE_TYPE (t));
!   ggc_mark_tree (TREE_CHAIN (t));
  
!   /* Some nodes require special handling.  */
!   switch (code)
!     {
!     case TREE_LIST:
!       ggc_mark_tree (TREE_PURPOSE (t));
!       ggc_mark_tree (TREE_VALUE (t));
!       return;
! 
!     case TREE_VEC:
!       {
! 	int i = TREE_VEC_LENGTH (t);
! 	while (--i >= 0)
! 	  ggc_mark_tree (TREE_VEC_ELT (t, i));
! 	return;
!       }
! 
!     case SAVE_EXPR:
!       ggc_mark_tree (TREE_OPERAND (t, 0));
!       ggc_mark_tree (SAVE_EXPR_CONTEXT (t));
!       ggc_mark_rtx (SAVE_EXPR_RTL (t));
!       return;
! 
!     case RTL_EXPR:
!       ggc_mark_rtx (RTL_EXPR_SEQUENCE (t));
!       ggc_mark_rtx (RTL_EXPR_RTL (t));
!       return;
! 
!     case CALL_EXPR:
!       ggc_mark_tree (TREE_OPERAND (t, 0));
!       ggc_mark_tree (TREE_OPERAND (t, 1));
!       ggc_mark_rtx (CALL_EXPR_RTL (t));
!       return;
! 
!     case COMPLEX_CST:
!       ggc_mark_tree (TREE_REALPART (t));
!       ggc_mark_tree (TREE_IMAGPART (t));
!       break;
! 
!     case STRING_CST:
!       ggc_mark_string (TREE_STRING_POINTER (t));
!       break;
! 
!     case PARM_DECL:
!       ggc_mark_rtx (DECL_INCOMING_RTL (t));
!       break;
! 
!     case FIELD_DECL:
!       ggc_mark_tree (DECL_FIELD_BIT_OFFSET (t));
!       break;
! 
!     case IDENTIFIER_NODE:
!       ggc_mark_string (IDENTIFIER_POINTER (t));
!       lang_mark_tree (t);
!       return;
  
!     default:
!       break;
!     }
    
!   /* But in general we can handle them by class.  */
!   switch (TREE_CODE_CLASS (code))
!     {
!     case 'd': /* A decl node.  */
!       ggc_mark_string (DECL_SOURCE_FILE (t));
!       ggc_mark_tree (DECL_SIZE (t));
!       ggc_mark_tree (DECL_SIZE_UNIT (t));
!       ggc_mark_tree (DECL_NAME (t));
!       ggc_mark_tree (DECL_CONTEXT (t));
!       ggc_mark_tree (DECL_ARGUMENTS (t));
!       ggc_mark_tree (DECL_RESULT_FLD (t));
!       ggc_mark_tree (DECL_INITIAL (t));
!       ggc_mark_tree (DECL_ABSTRACT_ORIGIN (t));
!       ggc_mark_tree (DECL_ASSEMBLER_NAME (t));
!       ggc_mark_tree (DECL_SECTION_NAME (t));
!       ggc_mark_tree (DECL_MACHINE_ATTRIBUTES (t));
!       ggc_mark_rtx (DECL_RTL (t));
!       ggc_mark_rtx (DECL_LIVE_RANGE_RTL (t));
!       ggc_mark_tree (DECL_VINDEX (t));
!       lang_mark_tree (t);
!       break;
! 
!     case 't': /* A type node.  */
!       ggc_mark_tree (TYPE_SIZE (t));
!       ggc_mark_tree (TYPE_SIZE_UNIT (t));
!       ggc_mark_tree (TYPE_ATTRIBUTES (t));
!       ggc_mark_tree (TYPE_VALUES (t));
!       ggc_mark_tree (TYPE_POINTER_TO (t));
!       ggc_mark_tree (TYPE_REFERENCE_TO (t));
!       ggc_mark_tree (TYPE_NAME (t));
!       ggc_mark_tree (TYPE_MIN_VALUE (t));
!       ggc_mark_tree (TYPE_MAX_VALUE (t));
!       ggc_mark_tree (TYPE_NEXT_VARIANT (t));
!       ggc_mark_tree (TYPE_MAIN_VARIANT (t));
!       ggc_mark_tree (TYPE_BINFO (t));
!       ggc_mark_tree (TYPE_NONCOPIED_PARTS (t));
!       ggc_mark_tree (TYPE_CONTEXT (t));
!       lang_mark_tree (t);
!       break;
! 
!     case 'b': /* A lexical block.  */
!       ggc_mark_tree (BLOCK_VARS (t));
!       ggc_mark_tree (BLOCK_SUBBLOCKS (t));
!       ggc_mark_tree (BLOCK_SUPERCONTEXT (t));
!       ggc_mark_tree (BLOCK_ABSTRACT_ORIGIN (t));
!       break;
! 
!     case 'c': /* A constant.  */
!       ggc_mark_rtx (TREE_CST_RTL (t));
!       break;
! 
!     case 'r': case '<': case '1':
!     case '2': case 'e': case 's': /* Expressions.  */
!       {
! 	int i = tree_code_length[TREE_CODE (t)];
! 	while (--i >= 0)
! 	  ggc_mark_tree (TREE_OPERAND (t, i));
! 	break;
!       }
! 
!     case 'x':
!       lang_mark_tree (t);
!       break;
      }
  }
  
--- 307,461 ----
      ggc_mark_rtx (RTVEC_ELT (v, i));
  }
  
! /* Recursively set marks on all of the children of the
!    GCC_PENDING_TREES.  */
  
! static void
! ggc_mark_trees ()
  {
!   while (ggc_pending_trees->elements_used)
      {
!       tree t;
!       enum tree_code code;
  
!       t = VARRAY_TOP_TREE (ggc_pending_trees);
!       VARRAY_POP (ggc_pending_trees);
!       code = TREE_CODE (t);
  
!       /* Collect statistics, if appropriate.  */
!       if (ggc_stats)
! 	{
! 	  ++ggc_stats->num_trees[(int) code];
! 	  ggc_stats->size_trees[(int) code] += ggc_get_size (t);
! 	}
  
!       /* Bits from common.  */
!       ggc_mark_tree (TREE_TYPE (t));
!       ggc_mark_tree (TREE_CHAIN (t));
! 
!       /* Some nodes require special handling.  */
!       switch (code)
! 	{
! 	case TREE_LIST:
! 	  ggc_mark_tree (TREE_PURPOSE (t));
! 	  ggc_mark_tree (TREE_VALUE (t));
! 	  continue;
! 
! 	case TREE_VEC:
! 	  {
! 	    int i = TREE_VEC_LENGTH (t);
! 	    while (--i >= 0)
! 	      ggc_mark_tree (TREE_VEC_ELT (t, i));
! 	    continue;
! 	  }
! 
! 	case SAVE_EXPR:
! 	  ggc_mark_tree (TREE_OPERAND (t, 0));
! 	  ggc_mark_tree (SAVE_EXPR_CONTEXT (t));
! 	  ggc_mark_rtx (SAVE_EXPR_RTL (t));
! 	  continue;
! 
! 	case RTL_EXPR:
! 	  ggc_mark_rtx (RTL_EXPR_SEQUENCE (t));
! 	  ggc_mark_rtx (RTL_EXPR_RTL (t));
! 	  continue;
! 
! 	case CALL_EXPR:
! 	  ggc_mark_tree (TREE_OPERAND (t, 0));
! 	  ggc_mark_tree (TREE_OPERAND (t, 1));
! 	  ggc_mark_rtx (CALL_EXPR_RTL (t));
! 	  continue;
! 
! 	case COMPLEX_CST:
! 	  ggc_mark_tree (TREE_REALPART (t));
! 	  ggc_mark_tree (TREE_IMAGPART (t));
! 	  break;
! 
! 	case STRING_CST:
! 	  ggc_mark_string (TREE_STRING_POINTER (t));
! 	  break;
! 
! 	case PARM_DECL:
! 	  ggc_mark_rtx (DECL_INCOMING_RTL (t));
! 	  break;
! 
! 	case FIELD_DECL:
! 	  ggc_mark_tree (DECL_FIELD_BIT_OFFSET (t));
! 	  break;
! 
! 	case IDENTIFIER_NODE:
! 	  ggc_mark_string (IDENTIFIER_POINTER (t));
! 	  lang_mark_tree (t);
! 	  continue;
! 
! 	default:
! 	  break;
! 	}
    
!       /* But in general we can handle them by class.  */
!       switch (TREE_CODE_CLASS (code))
! 	{
! 	case 'd': /* A decl node.  */
! 	  ggc_mark_string (DECL_SOURCE_FILE (t));
! 	  ggc_mark_tree (DECL_SIZE (t));
! 	  ggc_mark_tree (DECL_SIZE_UNIT (t));
! 	  ggc_mark_tree (DECL_NAME (t));
! 	  ggc_mark_tree (DECL_CONTEXT (t));
! 	  ggc_mark_tree (DECL_ARGUMENTS (t));
! 	  ggc_mark_tree (DECL_RESULT_FLD (t));
! 	  ggc_mark_tree (DECL_INITIAL (t));
! 	  ggc_mark_tree (DECL_ABSTRACT_ORIGIN (t));
! 	  ggc_mark_tree (DECL_ASSEMBLER_NAME (t));
! 	  ggc_mark_tree (DECL_SECTION_NAME (t));
! 	  ggc_mark_tree (DECL_MACHINE_ATTRIBUTES (t));
! 	  ggc_mark_rtx (DECL_RTL (t));
! 	  ggc_mark_rtx (DECL_LIVE_RANGE_RTL (t));
! 	  ggc_mark_tree (DECL_VINDEX (t));
! 	  lang_mark_tree (t);
! 	  break;
! 
! 	case 't': /* A type node.  */
! 	  ggc_mark_tree (TYPE_SIZE (t));
! 	  ggc_mark_tree (TYPE_SIZE_UNIT (t));
! 	  ggc_mark_tree (TYPE_ATTRIBUTES (t));
! 	  ggc_mark_tree (TYPE_VALUES (t));
! 	  ggc_mark_tree (TYPE_POINTER_TO (t));
! 	  ggc_mark_tree (TYPE_REFERENCE_TO (t));
! 	  ggc_mark_tree (TYPE_NAME (t));
! 	  ggc_mark_tree (TYPE_MIN_VALUE (t));
! 	  ggc_mark_tree (TYPE_MAX_VALUE (t));
! 	  ggc_mark_tree (TYPE_NEXT_VARIANT (t));
! 	  ggc_mark_tree (TYPE_MAIN_VARIANT (t));
! 	  ggc_mark_tree (TYPE_BINFO (t));
! 	  ggc_mark_tree (TYPE_NONCOPIED_PARTS (t));
! 	  ggc_mark_tree (TYPE_CONTEXT (t));
! 	  lang_mark_tree (t);
! 	  break;
! 
! 	case 'b': /* A lexical block.  */
! 	  ggc_mark_tree (BLOCK_VARS (t));
! 	  ggc_mark_tree (BLOCK_SUBBLOCKS (t));
! 	  ggc_mark_tree (BLOCK_SUPERCONTEXT (t));
! 	  ggc_mark_tree (BLOCK_ABSTRACT_ORIGIN (t));
! 	  break;
! 
! 	case 'c': /* A constant.  */
! 	  ggc_mark_rtx (TREE_CST_RTL (t));
! 	  break;
! 
! 	case 'r': case '<': case '1':
! 	case '2': case 'e': case 's': /* Expressions.  */
! 	  {
! 	    int i = tree_code_length[TREE_CODE (t)];
! 	    while (--i >= 0)
! 	      ggc_mark_tree (TREE_OPERAND (t, i));
! 	    break;
! 	  }
! 
! 	case 'x':
! 	  lang_mark_tree (t);
! 	  break;
! 	}
      }
  }
  
Index: ggc.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ggc.h,v
retrieving revision 1.25
diff -c -p -r1.25 ggc.h
*** ggc.h	2000/03/25 18:34:02	1.25
--- ggc.h	2000/04/06 00:36:52
*************** Software Foundation, 59 Temple Place - S
*** 19,24 ****
--- 19,25 ----
  02111-1307, USA.  */
  
  #include "gansidecl.h"
+ #include "varray.h"
  
  /* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with
     an external gc library that might be linked in.  */
*************** struct rtvec_def;
*** 40,50 ****
  struct stmt_status;
  union  tree_node;
  struct varasm_status;
- struct varray_head_tag;
  
  /* Constants for general use.  */
  extern char *empty_string;
  
  /* Manipulate global roots that are needed between calls to gc.  */
  void ggc_add_root PARAMS ((void *base, int nelt, int size, void (*)(void *)));
  void ggc_add_rtx_root PARAMS ((struct rtx_def **, int nelt));
--- 41,53 ----
  struct stmt_status;
  union  tree_node;
  struct varasm_status;
  
  /* Constants for general use.  */
  extern char *empty_string;
  
+ /* Trees that have been marked, but whose children still need marking.  */
+ extern varray_type ggc_pending_trees;
+ 
  /* Manipulate global roots that are needed between calls to gc.  */
  void ggc_add_root PARAMS ((void *base, int nelt, int size, void (*)(void *)));
  void ggc_add_rtx_root PARAMS ((struct rtx_def **, int nelt));
*************** extern void ggc_mark_roots PARAMS ((void
*** 64,70 ****
  
  extern void ggc_mark_rtx_children PARAMS ((struct rtx_def *));
  extern void ggc_mark_rtvec_children PARAMS ((struct rtvec_def *));
- extern void ggc_mark_tree_children PARAMS ((union tree_node *));
  
  /* If EXPR is not NULL and previously unmarked, mark it and evaluate
     to true.  Otherwise evaluate to false.  */
--- 67,72 ----
*************** extern void ggc_mark_tree_children PARAM
*** 78,88 ****
        ggc_mark_rtx_children (r__);              \
    } while (0)
  
! #define ggc_mark_tree(EXPR)                     \
!   do {                                          \
!     tree t__ = (EXPR);                          \
!     if (ggc_test_and_set_mark (t__))            \
!       ggc_mark_tree_children (t__);             \
    } while (0)
  
  #define ggc_mark_rtvec(EXPR)                    \
--- 80,90 ----
        ggc_mark_rtx_children (r__);              \
    } while (0)
  
! #define ggc_mark_tree(EXPR)				\
!   do {							\
!     tree t__ = (EXPR);					\
!     if (ggc_test_and_set_mark (t__))			\
!       VARRAY_PUSH_TREE (ggc_pending_trees, t__);	\
    } while (0)
  
  #define ggc_mark_rtvec(EXPR)                    \
Index: cp/Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/Makefile.in,v
retrieving revision 1.82
diff -c -p -r1.82 Makefile.in
*** Makefile.in	2000/03/10 11:55:59	1.82
--- Makefile.in	2000/04/06 00:37:15
*************** CXX_TREE_H = $(TREE_H) cp-tree.h $(srcdi
*** 209,218 ****
  PARSE_H = $(srcdir)/parse.h
  PARSE_C = $(srcdir)/parse.c
  EXPR_H = $(srcdir)/../expr.h ../insn-codes.h
  
  parse.o : $(PARSE_C) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h \
  	$(srcdir)/../except.h $(srcdir)/../output.h $(srcdir)/../system.h \
! 	$(srcdir)/../toplev.h $(srcdir)/../ggc.h
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \
    `echo $(PARSE_C) | sed 's,^\./,,'`
  
--- 209,219 ----
  PARSE_H = $(srcdir)/parse.h
  PARSE_C = $(srcdir)/parse.c
  EXPR_H = $(srcdir)/../expr.h ../insn-codes.h
+ GGC_H = $(srcdir)/../ggc.h $(srcdir)/../varray.h
  
  parse.o : $(PARSE_C) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h \
  	$(srcdir)/../except.h $(srcdir)/../output.h $(srcdir)/../system.h \
! 	$(srcdir)/../toplev.h $(GGC_H)
  	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \
    `echo $(PARSE_C) | sed 's,^\./,,'`
  
*************** spew.o : spew.c $(CXX_TREE_H) $(PARSE_H)
*** 251,266 ****
  lex.o : lex.c $(CXX_TREE_H) \
    $(PARSE_H) input.c $(srcdir)/../flags.h hash.h lex.h \
    $(srcdir)/../c-pragma.h $(srcdir)/../toplev.h \
!   $(srcdir)/../output.h $(srcdir)/../mbchar.h $(srcdir)/../ggc.h \
    $(srcdir)/../input.h
  decl.o : decl.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    lex.h decl.h $(srcdir)/../stack.h $(srcdir)/../output.h  \
    $(srcdir)/../except.h $(srcdir)/../toplev.h \
!   $(srcdir)/../hash.h $(srcdir)/../ggc.h $(RTL_H)
  decl2.o : decl2.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    lex.h decl.h $(EXPR_H) $(srcdir)/../output.h $(srcdir)/../except.h \
    $(srcdir)/../toplev.h $(srcdir)/../dwarf2out.h $(srcdir)/../dwarfout.h \
!   $(srcdir)/../ggc.h $(RTL_H)
  typeck2.o : typeck2.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    $(srcdir)/../toplev.h $(srcdir)/../output.h
  typeck.o : typeck.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
--- 252,267 ----
  lex.o : lex.c $(CXX_TREE_H) \
    $(PARSE_H) input.c $(srcdir)/../flags.h hash.h lex.h \
    $(srcdir)/../c-pragma.h $(srcdir)/../toplev.h \
!   $(srcdir)/../output.h $(srcdir)/../mbchar.h $(GGC_H) \
    $(srcdir)/../input.h
  decl.o : decl.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    lex.h decl.h $(srcdir)/../stack.h $(srcdir)/../output.h  \
    $(srcdir)/../except.h $(srcdir)/../toplev.h \
!   $(srcdir)/../hash.h $(GGC_H) $(RTL_H)
  decl2.o : decl2.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    lex.h decl.h $(EXPR_H) $(srcdir)/../output.h $(srcdir)/../except.h \
    $(srcdir)/../toplev.h $(srcdir)/../dwarf2out.h $(srcdir)/../dwarfout.h \
!   $(GGC_H) $(RTL_H)
  typeck2.o : typeck2.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    $(srcdir)/../toplev.h $(srcdir)/../output.h
  typeck.o : typeck.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
*************** typeck.o : typeck.c $(CXX_TREE_H) $(srcd
*** 268,287 ****
  class.o : class.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    $(srcdir)/../toplev.h $(RTL_H)
  call.o : call.c $(CXX_TREE_H) $(srcdir)/../flags.h \
!   $(srcdir)/../toplev.h $(RTL_H) $(EXPR_H)
  friend.o : friend.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
    $(srcdir)/../toplev.h
  init.o : init.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
!   $(EXPR_H) $(srcdir)/../toplev.h $(srcdir)/../ggc.h \
    $(srcdir)/../except.h
  method.o : method.c $(CXX_TREE_H) \
!   $(srcdir)/../toplev.h $(srcdir)/../ggc.h $(RTL_H)
  cvt.o : cvt.c $(CXX_TREE_H) decl.h \
    $(srcdir)/../flags.h $(srcdir)/../toplev.h $(srcdir)/../convert.h
  search.o : search.c $(CXX_TREE_H) $(srcdir)/../stack.h \
    $(srcdir)/../flags.h $(srcdir)/../toplev.h $(RTL_H)
  tree.o : tree.c $(CXX_TREE_H) $(srcdir)/../flags.h \
!   $(srcdir)/../toplev.h $(srcdir)/../ggc.h $(RTL_H) \
    ../insn-config.h $(srcdir)/../integrate.h
  ptree.o : ptree.c $(CXX_TREE_H) $(srcdir)/../system.h
  rtti.o : rtti.c $(CXX_TREE_H) $(srcdir)/../flags.h \
--- 269,288 ----
  class.o : class.c $(CXX_TREE_H) $(srcdir)/../flags.h \
    $(srcdir)/../toplev.h $(RTL_H)
  call.o : call.c $(CXX_TREE_H) $(srcdir)/../flags.h \
!   $(srcdir)/../toplev.h $(RTL_H) $(EXPR_H) $(GGC_H)
  friend.o : friend.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
    $(srcdir)/../toplev.h
  init.o : init.c $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
!   $(EXPR_H) $(srcdir)/../toplev.h $(GGC_H) \
    $(srcdir)/../except.h
  method.o : method.c $(CXX_TREE_H) \
!   $(srcdir)/../toplev.h $(GGC_H) $(RTL_H)
  cvt.o : cvt.c $(CXX_TREE_H) decl.h \
    $(srcdir)/../flags.h $(srcdir)/../toplev.h $(srcdir)/../convert.h
  search.o : search.c $(CXX_TREE_H) $(srcdir)/../stack.h \
    $(srcdir)/../flags.h $(srcdir)/../toplev.h $(RTL_H)
  tree.o : tree.c $(CXX_TREE_H) $(srcdir)/../flags.h \
!   $(srcdir)/../toplev.h $(GGC_H) $(RTL_H) \
    ../insn-config.h $(srcdir)/../integrate.h
  ptree.o : ptree.c $(CXX_TREE_H) $(srcdir)/../system.h
  rtti.o : rtti.c $(CXX_TREE_H) $(srcdir)/../flags.h \
*************** expr.o : expr.c $(CXX_TREE_H) $(RTL_H) $
*** 293,309 ****
  xref.o : xref.c $(CXX_TREE_H) $(srcdir)/../input.h \
    $(srcdir)/../toplev.h
  pt.o : pt.c $(CXX_TREE_H) decl.h $(PARSE_H) lex.h \
!   $(srcdir)/../toplev.h $(srcdir)/../ggc.h $(RTL_H) \
    $(srcdir)/../except.h
  error.o : error.c $(CXX_TREE_H) \
    $(srcdir)/../toplev.h
  errfn.o : errfn.c $(CXX_TREE_H) \
    $(srcdir)/../toplev.h
  repo.o : repo.c $(CXX_TREE_H) \
!   $(srcdir)/../toplev.h $(srcdir)/../ggc.h
  semantics.o: semantics.c $(CXX_TREE_H) lex.h \
    $(srcdir)/../except.h $(srcdir)/../toplev.h \
!   $(srcdir)/../flags.h $(srcdir)/../ggc.h \
    $(srcdir)/../output.h $(RTL_H) 
  dump.o: dump.c $(CXX_TREE_H)
  optimize.o: optimize.c $(CXX_TREE_H) \
--- 294,310 ----
  xref.o : xref.c $(CXX_TREE_H) $(srcdir)/../input.h \
    $(srcdir)/../toplev.h
  pt.o : pt.c $(CXX_TREE_H) decl.h $(PARSE_H) lex.h \
!   $(srcdir)/../toplev.h $(GGC_H) $(RTL_H) \
    $(srcdir)/../except.h
  error.o : error.c $(CXX_TREE_H) \
    $(srcdir)/../toplev.h
  errfn.o : errfn.c $(CXX_TREE_H) \
    $(srcdir)/../toplev.h
  repo.o : repo.c $(CXX_TREE_H) \
!   $(srcdir)/../toplev.h $(GGC_H)
  semantics.o: semantics.c $(CXX_TREE_H) lex.h \
    $(srcdir)/../except.h $(srcdir)/../toplev.h \
!   $(srcdir)/../flags.h $(GGC_H) \
    $(srcdir)/../output.h $(RTL_H) 
  dump.o: dump.c $(CXX_TREE_H)
  optimize.o: optimize.c $(CXX_TREE_H) \
Index: f/Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/f/Makefile.in,v
retrieving revision 1.20
diff -c -p -r1.20 Makefile.in
*** Makefile.in	2000/02/26 20:02:00	1.20
--- Makefile.in	2000/04/06 00:37:41
***************
*** 1,5 ****
  # Makefile for GNU F77 compiler.
! #   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
  
  #This file is part of GNU Fortran.
  
--- 1,5 ----
  # Makefile for GNU F77 compiler.
! #   Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
  
  #This file is part of GNU Fortran.
  
*************** ASSERT_H = $(srcdir)/assert.j $(srcdir)/
*** 225,231 ****
  CONFIG_H = $(srcdir)/config.j ../config.h
  CONVERT_H = $(srcdir)/convert.j $(srcdir)/../convert.h
  FLAGS_H = $(srcdir)/flags.j $(srcdir)/../flags.h
! GGC_H = $(srcdir)/ggc.j $(srcdir)/../ggc.h
  GLIMITS_H = $(srcdir)/glimits.j $(srcdir)/../glimits.h
  HCONFIG_H = $(srcdir)/hconfig.j ../hconfig.h
  INPUT_H = $(srcdir)/input.j $(srcdir)/../input.h
--- 225,231 ----
  CONFIG_H = $(srcdir)/config.j ../config.h
  CONVERT_H = $(srcdir)/convert.j $(srcdir)/../convert.h
  FLAGS_H = $(srcdir)/flags.j $(srcdir)/../flags.h
! GGC_H = $(srcdir)/ggc.j $(srcdir)/../ggc.h $(srcdir)/../varray.h
  GLIMITS_H = $(srcdir)/glimits.j $(srcdir)/../glimits.h
  HCONFIG_H = $(srcdir)/hconfig.j ../hconfig.h
  INPUT_H = $(srcdir)/input.j $(srcdir)/../input.h

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]