public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* GCC 3.3 compile speed regression - THE GRAPH
@ 2003-02-07 20:51 Ziemowit Laski
  2003-02-07 22:08 ` Phil Edwards
                   ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Ziemowit Laski @ 2003-02-07 20:51 UTC (permalink / raw)
  To: gcc

[-- Attachment #1: Type: text/plain, Size: 397 bytes --]

The following graph shows the deterioration in compile-time performance
as seen on the gcc-3_3-branch (and, prior to the creation of the branch,
on the trunk itself).  The test case is the same Qt fragment I used for
my earlier GC analysis; the test machine (a RedHat Linux 8.0 box) is
also the same.  You can find the preprocessed source at:

   http://homepage.mac.com/zlaski/FileSharing1.html


[-- Attachment #2: gcc_regress_chart.pdf --]
[-- Type: application/pdf, Size: 23179 bytes --]

[-- Attachment #3: Type: text/plain, Size: 65853 bytes --]


The two "inflection points" occur on 2002-06-04 and 2002-11-07, 
respectively.  They correspond to the following
two check-ins, with the ChangeLog entries reproduced in their gore and 
glory below.

I've already spoken with Geoff regarding his fateful PCH merge.  He did 
not think
that doing a binary search on the pch-branch would be particularly 
productive,
but instead suggested I look closely at his spew.c mods, which I shall 
do now.
However, a more complete investigation of the PCH changes that were 
brought in
would be beneficial.

Similarly, if Mark and/or others could take a look at the slow-down in
template parameter processing, the world will be a better place. :-)

--Zem

======================================================================

2002-06-03  Geoffrey Keating  <geoffk@redhat.com>

         Merge from pch-branch:

         * gengtype.h (UNION_OR_STRUCT_P): New macro.
         * gengtype.c (write_gc_structure_fields): Use it.
         (write_gc_root): Use it here too.

         * gengtype.c (write_gc_structure_fields): Assume that lengths
         of typenames fit into an 'int'; don't pass a size_t to "%d" in
         printf.
         (write_gc_marker_routine_for_structure): Likewise.
         (write_gc_types): Likewise.
         (write_gc_root): Likewise.

         * varray.h (VARRAY_CLEAR): New.
         (varray_clear): Prototype.
         * varray.c (varray_clear): New.
         * cselib.c (reg_values_old): New.
         (used_regs_old): New.
         (cselib_init): Use cached varrays if available to avoid
         generating large amounts of garbage.
         (cselib_finish): Don't throw away old varrays.

         * final.c (insn_addresses_): Move out of ifdef.

         * varray.c (uses_ggc): Make more varray kinds GCable.
         * varray.h (union varray_data_tag): Let gengtype see
         fields 'generic' and 'te'.
         * reg-stack.c: Include gt-reg-stack.h, ggc.h.
         (stack_regs_mentioned_data): Move out of ifdef; mark with 
gengtype.
         (reg_to_stack): Don't call VARRAY_FREE.
         * insn-addr.h (INSN_ADDRESSES_FREE): Don't use VARRAY_FREE.
         (insn_addresses_): Use gengtype to mark.
         * gengtype.c (write_gc_structure_fields): Handle arrays of 
generic
         pointers; handle generic pointers in unused union fields.
         (get_output_file_with_visibility): Include cselib.h,
         insn-addr.h in gtype-desc.c.
         * function.c (prologue): Use gengtype to mark.
         (epilogue): Likewise.
         (sibcall_epilogue): Likewise.
         * dependence.c: Include gt-dependence.h, ggc.h.
         (struct def_use): Use gengtype to mark.
         (struct loop): Likewise.
         (struct induction): Likewise.
         (struct dependence): Likewise.
         (def_use_chain): Likewise.
         (dep_chain): Likewise.
         (loop_chain): Likewise.
         (induction_chain): Likewise.
         (init_dependence_analysis): Don't free anything, just clear 
pointers.
         (build_def_use): Use GGC to allocate def_use.
         (add_loop): Use GGC to allocate loop.
         (find_induction_variable): Use GGC to allocate induction.
         (check_node_dependence): Use GGC to allocate induction, 
dependence.
         (dump_node_dependence): Don't free varrays.
         (end_dependence_analysis): Likewise.
         * cselib.h (struct cselib_val_struct): Use gengtype to mark.
         (struct elt_loc_list): Likewise.
         (struct elt_list): Likewise.
         * cselib.c: Don't include obstack.h.
         (hash_table): Use gengtype to mark.
         (reg_values): Use gengtype to mark.
         (used_regs): Use gengtype to mark.
         (cselib_obstack): Delete.
         (cselib_startobj): Delete.
         (empty_vals): Mark as deletable.
         (empty_elt_lists): Mark as deletable.
         (empty_elt_loc_lists): Mark as deletable.
         (new_elt_list): Use GGC to allocate struct elt_list.
         (new_elt_loc_list): Use GGC to allocate struct elt_loc_list.
         (clear_table): Don't delete obstack; don't unnecessarily clear
         deletable variables.
         (new_cselib_val): Use GGC to allocate struct cselib_val.
         (cselib_init): Don't set up obstacks.  Use GGC to allocate
         hash table.
         (cselib_finish): Just clear variables, don't free anything.
         * Makefile.in (cselib.o): Remove dependency on $(OBSTACK_H).
         (reg-stack.o): Add dependency on gt-reg-stack.h, $(GGC_H).
         (dependence.o): Add dependency on gt-dependence.h, $(GGC_H).
         (GTFILES): Add insn-addr.h, cselib.h, dependence.c, reg-stack.c.
         (gt-reg-stack.h): New rule.
         (gt-dependence.h): New rule.
         (gtype-desc.o): Add cselib.h, insn-addr.h.

         * varray.c: Use only necessary headers.
         (element_size): New.
         (uses_ggc): New.
         (varray_init): Take type, not size.  Use GGC if appropriate.
         (varray_grow): Update for change to struct varray_head_tag.
         Use GGC if appropriate.
         * varray.h (struct const_equiv_data): Use gengtype.
         (enum varray_data_enum): New.
         (union varray_data_tag): Use gengtype.
         (struct varray_head_tag): Use gengtype.  Replace size field with
         enum varray_data_enum.
         (varray_init): Update prototype.
         (VARRAY_SCHED_INIT): Delete.
         (VARRAY_*_INIT): Update for change to varray_init.
         (VARRAY_SCHED): Delete.
         (VARRAY_PUSH_SCHED): Delete.
         (VARRAY_TOP_SCHED): Delete.
         * tree.h: Update for change to length specifier.
         * tree-inline.c (optimize_inline_calls): Don't use VARRAY_FREE.
         (clone_body): Likewise.
         * ssa.h (ssa_definition): Use gengtype to mark.
         * ssa.c (convert_from_ssa): Don't use VARRAY_FREE.
         * ssa-dce.c (ssa_eliminate_dead_code): Don't use VARRAY_FREE.
         * rtl.h (struct rtvec_def): Update for change to length 
specifier.
         * integrate.c (expand_inline_function): Don't use VARRAY_FREE.
         (struct initial_value_struct): Update for change to length 
specifier.
         * ggc.h (ggc_add_rtx_varray_root): Delete prototype.
         (ggc_add_tree_varray_root): Delete prototype.
         (ggc_mark_rtx_varray): Delete prototype.
         (ggc_mark_tree_varray): Delete prototype.
         * ggc-common.c (ggc_add_rtx_varray_root): Delete.
         (ggc_add_tree_varray_root): Delete.
         (ggc_mark_rtx_varray): Delete.
         (ggc_mark_tree_varray): Delete.
         (ggc_mark_rtx_varray_ptr): Delete.
         (ggc_mark_tree_varray_ptr): Delete.
         * gengtype.h (enum typekind): Remove TYPE_VARRAY.
         (create_varray): Delete prototype.
         * gengtype.c (varrays): Delete.
         (create_varray): Delete.
         (adjust_field_type): Detect array of string pointers.
         (process_gc_options): Remove code to handle varray_type option.
         (set_gc_used_type): Remove TYPE_VARRAY case.
         (output_escaped_param): New.
         (write_gc_structure_fields): Use output_escaped_param on all
         parameters.  Handle 'skip' with 'use_param' option.  Handle
         arrays of strings.  Remove TYPE_VARRAY handling.
         (write_gc_roots): Use boolean to detect 'length' option.
         * gengtype-yacc.y (VARRAY_TYPE): Delete token.
         (struct_fields): Call adjust_field_type on array fields.
         (type): Remove VARRAY_TYPE case.
         (type_option): Likewise.
         * gengtype-lex.l: Don't consider varray_type a keyword.
         * function.h: Update for change to length specifier.
         (free_eh_status): Delete prototype.
         * function.c (free_after_compilation): Don't call 
free_eh_status.
         (reorder_blocks): Don't use VARRAY_FREE.
         * except.c (struct eh_status): Update for change to length 
specifier.
         remove varray_type specifier.
         (free_eh_status): Delete.
         * dwarf2out.c: Include gt-dwarf2out.h.
         (used_rtx_varray): Use gengtype to mark, move
         outside ifdefs.
         (incomplete_types): Likewise.
         (decl_scope_table): Likewise.
         (dwarf2out_init): Don't call ggc_add_tree_varray_root.
         * cfglayout.c (scope_to_insns_finalize): Don't use VARRAY_FREE.
         * c-tree.h (struct lang_type): Update for change to length 
specifier.
         * c-parse.in (yylexstring): Don't use VARRAY_FREE.
         * c-objc-common.c: Include gt-c-objc-common.h.
         (deferred_fns): Mark for gengtype.
         (c_objc_common_init): Don't call ggc_add_tree_varray_root.
         (expand_deferred_fns): Just set deferred_fns to 0 to free it.
         * Makefile.in (c-objc-common.o): Add gt-c-objc-common.h.
         (gtype-desc.o): Update dependencies.
         (dwarf2out.o): Add gt-dwarf2out.h.
         (varray.o): Update dependencies.
         (GTFILES): Add varray.h, ssa.h, dwarf2out.c, c-objc-common.c.
         (gt-c-objc-common.h): New rule.
         (gt-dwarf2out.h): New rule.
         * objc/objc-act.c (build_objc_string_object): Don't use 
VARRAY_FREE.

         * doc/gty.texi (GTY Options): Correct spelling.
         (GGC Roots): Likewise.
         * Makefile.in (TEXI_CPP_FILES): New.
         (TEXI_GCC_FILES): New.
         (TEXI_GCCINT_FILES): New.
         (TEXI_CPPINT_FILES): New.
         ($(docdir)/cpp.info): Use new macros.
         ($(docdir)/gcc.info): Likewise.
         ($(docdir)/gccint.info): Likewise.
         ($(docdir)/cppinternals.info): Likewise.
         (cpp.dvi): Likewise.
         (gcc.dvi): Likewise.
         (gccint.dvi): Likewise.
         (cppinternals.dvi): Likewise.

         * Makefile.in ($(docdir)/gccint.info): Depend on gty.texi.
         * doc/gccint.texi (Top): Include gty.texi.
         * doc/gty.texi: New file.

         * bitmap.c: Include ggc.h, gt-bitmap.h.
         (bitmap_ggc_free): New.
         (bitmap_elem_to_freelist): New.
         (bitmap_element_free): Use bitmap_elem_to_freelist.
         (bitmap_element_allocate): Allow use of GGC.
         (bitmap_clear): Use bitmap_elem_to_freelist.
         (bitmap_copy): Update for change to bitmap_element_allocate.
         (bitmap_set_bit): Likewise.
         (bitmap_operation): Update for changes elsewhere.
         (bitmap_initialize): Allow to create bitmaps that will use GGC.
         * bitmap.h (struct bitmap_element_def): Use gengtype.
         (struct bitmap_head_def): Likewise.  Also add 'using_obstack' 
field.
         (bitmap_initialize): Add extra parameter.
         (BITMAP_OBSTACK_ALLOC): Update for change to bitmap_initialize.
         (BITMAP_ALLOCA): Delete.
         (BITMAP_XMALLOC): Update for change to bitmap_initialize.
         (BITMAP_GGC_ALLOC): New.
         * Makefile.in (gtype-desc.o): Add bitmap.h.
         (bitmap.o): Add gt-bitmap.h, $(GGC_H).
         (GTFILES): Add bitmap.c.
         (gt-bitmap.h): New rule.
         ($(HOST_PREFIX_1)bitmap.o): Add gt-bitmap.h.
         * basic-block.h: Update for changes to bitmap_initialize.
         * except.c (exception_handler_label_map): Move into...
         (struct eh_status): Here.
         (struct eh_region): Make 'aka' GCable.
         (free_eh_status): Don't need to specially handle
         exception_handler_label_map.
         (add_ehl_entry): Update for changes to 
exception_handler_label_map.
         (find_exception_handler_labels): Likewise.
         (remove_exception_handler_label): Likewise.
         (maybe_remove_eh_handler): Likewise.
         (for_each_eh_label): Likewise.
         (remove_eh_handler): Allocate 'aka' using GGC.
         * gengtype.c (get_output_file_with_visibility): Add bitmap.h
         to list of includes.

         * gengtype.c (write_gc_marker_routine_for_structure): Name
         the routines 'gt_ggc_mx_*' instead of 'gt_ggc_m_*'.
         (write_gc_types): Arrange for the tests with NULL to be inlined.
         (write_gc_roots): Update uses of procedure pointers.
         * ggc-common.c (gt_ggc_mx_rtx_def): Rename from 
gt_ggc_m_rtx_def.

         * Makefile.in (explow.o): Add dependency on gt-explow.h.
         (sdbout.o): Add dependency on gt-sdbout.h.

         * emit-rtl.c (const_int_htab): Use gengtype to clear unused 
entries.
         (mem_attrs_htab): Likewise.
         (init_emit_once): Don't call ggc_add_deletable_htab.
         * fold-const.c (size_htab): Use gengtype to clear unused 
entries.
         (size_int_type_wide): Don't call ggc_add_deletable_htab.
         * gengtype.c (finish_root_table): Add LASTNAME and TNAME
         parameters, use them, change callers.
         (write_gc_root): Add IF_MARKED parameter, use it, change 
callers.
         (write_gc_roots): Handle 'if_marked' option.
         (main): Don't need to call set_gc_used_type any more.
         * ggc.h (ggc_htab_marked_p): Delete.
         (ggc_htab_mark): Delete.
         (struct ggc_cache_tab): New.
         (gt_ggc_cache_rtab): New declaration.
         * ggc-common.c (struct d_htab_root): Delete.
         (d_htab_roots): Delete.
         (ggc_add_deletable_htab): Delete.
         (ggc_htab_delete): Handle new htab-deleting mechanism.
         (ggc_mark_roots): Use new htab-deleting mechanism.
         * tree.c (type_hash_table): Use gengtype to clear unused 
entries.
         Make static.
         (init_obstacks): Don't call ggc_add_deletable_htab.

         * objc/objc-act.h (struct hashed_attribute): Use gengtype.
         (struct hashed_entry): Likewise.
         (nst_method_hash_list): Likewise.
         (cls_method_hash_list): Likewise.
         (HASH_ALLOC_LIST_SIZE): Delete.
         (ATTR_ALLOC_LIST_SIZE): Delete.
         * objc/objc-act.c (hash_init): Use ggc to allocate
         nst_method_hash_list, cls_method_hash_list.
         (hash_enter): Use ggc to allocate; allocate one entry at a time.
         (hash_add_attr): Likewise.
         (ggc_mark_hash_table): Delete.
         (objc_act_parse_init): Delete.
         (objc_init): Delete reference to objc_act_parse_init.
         * tlink.c: Replace hash.h with hashtab.h.  Explicitly include
         obstack.h.  Replace references to 'struct hash_table' with 
htab_t.
         (struct symbol_hash_entry): Replace hash header with key field.
         (struct file_hash_entry): Replace hash header with key field.
         (struct demangled_hash_entry): Replace hash header with key 
field.
         (hash_string_eq): New.
         (hash_string_hash): New.
         (symbol_hash_newfunc): Delete.
         (symbol_hash_lookup): Modify to use htab_t.
         (file_hash_newfunc): Delete.
         (file_hash_lookup): Modify to use htab_t.
         (demangled_hash_newfunc): Delete.
         (demangled_hash_lookup): Modify to use htab_t.
         (tlink_init): Modify to use htab_t.
         * hash.h: Delete.
         * hash.c: Delete.
         * ggc.h: Delete forward structure declarations.
         Delete prototypes for deleted functions.
         * ggc-common.c: Don't include hash.h.
         (ggc_add_tree_hash_table_root): Delete.
         (ggc_mark_tree_hash_table_entry): Delete.
         (ggc_mark_tree_hash_table): Delete.
         (ggc_mark_tree_hash_table_ptr): Delete.
         * gengtype.c (write_gc_structure_fields): Allow param_is option.
         (write_gc_marker_routine_for_structure): Use visibility of
         the parameter if there is one.
         * function.c: Replace hash.h with hashtab.h.  Replace references
         to 'struct hash_table *' with htab_t.
         (struct insns_for_mem_entry): Include a plain key.
         (fixup_var_refs_insns_with_hash): Update to use htab_t.
         (insns_for_mem_newfunc): Delete.
         (insns_for_mem_hash): Update to use htab_t.
         (insns_for_mem_comp): Likewise.
         (insns_for_mem_walk): Likewise.
         * c-lang.c: Include ggc.h.
         * Makefile.in (OBJS): Remove hash.o.
         (c-lang.o): Add GGC_H.
         (COLLECT2_OBJS): Remove hash.o.
         (tlink.o): Remove hash.h, add HASHTAB_H and OBSTACK_H.
         (ggc-common.o): Remove hash.h.
         (function.o): Remove hash.h, add HASHTAB_H.
         (genautomata.o): Remove hash.h, add HASHTAB_H.

         * varasm.c (mark_const_str_htab_1): Delete.
         (mark_const_str_htab): Delete.
         (const_str_htab_del): Delete.
         (const_str_htab): Use gengtype to mark.
         (init_varasm_once): Use gengtype to mark hashtables.  Use GC to
         allocate them.
         * tree.c (mark_tree_hashtable_entry): Delete.
         (mark_tree_hashtable): Delete.
         * tree.h (mark_tree_hashtable): Delete prototype.
         * ggc.h (ggc_test_and_set_mark): Treat (void *)1 like NULL.
         (ggc_mark): Likewise.
         (ggc_calloc): New.
         (htab_create_ggc): New.
         * ggc-common.c (ggc_calloc): New.
         * gengtype.h (enum typekind): Add TYPE_PARAM_STRUCT.
         (struct type): Add param_struct structure.
         * gengtype.c (param_structs): New.
         (adjust_field_type): Handle param_is option.
         (set_gc_used_type): Handle TYPE_PARAM_STRUCT.
         (get_output_file_with_visibility): Include hashtab.h in 
gtype-desc.c.
         (write_gc_structure_fields): Add new PARAM parameter.  Update
         callers.  Handle use_param option.  Handle TYPE_PARAM_STRUCT.
         (write_gc_marker_routine_for_structure): Add new PARAM 
parameter.
         Use it to generate function name.  Update callers.
         (write_gc_types): Add new PARAM_STRUCTS parameter.  Update 
callers.
         Process them.
         (write_gc_roots): Handle TYPE_PARAM_STRUCT.  Allow param_is
         option.
         (main): Define PTR as pointer-to-scalar.  Don't specially
         mark deferred_string or ehl_map_entry.
         * gengtype-yacc.y (PARAM_IS): Add new token.
         (externstatic): Use adjust_field_type.
         (type_option): Add PARAM_IS.
         * gengtype-lex.l: Add rule for typedef of function pointers.
         Add rule for PARAM_IS.
         (IWORD): Add size_t.
         * except.c (exception_handler_label_map): Use gengtype to mark.
         (type_to_runtime_map): Likewise.
         (mark_ehl_map_entry): Delete.
         (mark_ehl_map): Delete.
         (init_eh): Use gengtype for roots; use GC to allocate hash 
tables.
         (t2r_mark_1): Delete.
         (t2r_mark): Delete.
         * Makefile.in (gtype-desc.o): Correct dependencies.
         (GTFILES): Add hashtab.h.
         (genautomata.o): Actually uses hashtab.h.

         * Makefile.in (stringpool.o): Add $(GGC_H).
         (dwarf2asm.o): Likewise.
         (GTFILES): Add hashtable.h.
         * c-common.h (struct c_common_identifier): Use gengtype.
         * c-decl.h (c_mark_tree): Delete.
         * c-lang.c (LANG_HOOKS_MARK_TREE): Delete.
         * c-tree.h (struct lang_identifier): Use gengtype.
         (union lang_tree_node): New.
         (c_mark_tree): Delete prototype.
         * dwarf2out.c [!DWARF2_DEBUGGING_INFO]: Define dummy
         dwarf2_debug_hooks.
         * gengtype-lex.l (IWORD): Allow 'bool'.
         (ptr_alias): Match.
         * gengtype-yacc.y (ALIAS): New token.
         (type_option): New rule.
         (option): Use type_option.
         * gengtype.c (process_gc_options): New.
         (set_gc_used_type): Use it.
         (write_gc_structure_fields): Add 'bitmap' parameter, change 
callers.
         Add new variable 't' to hold the type of the field being 
processed.
         Add more error checking.  Use UNION_P when looking at 'desc' 
option.
         Handle language-specific structures containing other
         language-specific structures.
         (write_gc_types): Handle 'ptr_alias' option.
         (main): Don't need to specially output lang_type, lang_decl, 
lang_id2.
         * ggc-common.c (ggc_pending_trees): Delete.
         (ggc_mark_roots): Don't manipulate ggc_pending_trees.
         (ggc_mark_trees): Delete.
         (gt_ggc_m_tree_node): Delete.
         * ggc.h (ggc_pending_trees): Delete.
         (ggc_mark_tree): Make alias of gt_ggc_m_tree_node.
         * hashtable.h (ht_identifier): Use gengtype.
         * langhooks-def.h (LANG_HOOKS_MARK_TREE): Delete.
         * langhooks.h (struct lang_hooks): Delete mark_tree.
         * sdbout.c [! SDB_DEBUGGING_INFO]: Define dummy sdb_debug_hooks
         anyway.
         * system.h: Poison LANG_HOOKS_MARK_TREE.
         * tree.c (tree_node_structure): New.
         * tree.h (struct tree_common): Use gengtype.
         (struct tree_int_cst): Likewise.
         (struct tree_real_cst): Likewise.
         (struct tree_string): Likewise.
         (struct tree_complex): Likewise.
         (struct tree_vector): Likewise.
         (struct tree_identifier): Likewise.
         (struct tree_list): Likewise.
         (struct tree_vec): Likewise.
         (struct tree_exp): Likewise.
         (struct tree_block): Likewise.
         (struct tree_type): Likewise.
         (struct tree_decl): Likewise.
         (enum tree_structure_enum): New.
         (union tree_node): Use gengtype, with an alias.
         (tree_node_structure): Prototype.
         * objc/objc-lang.c (LANG_HOOKS_MARK_TREE): Delete.

         Merge to tag pch-merge-20020430.  The LANG_HOOKS_FUNCTION_MARK
         macro was deleted.  The LANG_HOOKS_FUNCTION_FREE macro was 
renamed
         to LANG_HOOKS_FUNCTION_FINAL.
         * Makefile.in (GTFILES): Add bitmap.h.
         * except.c (struct eh_region): Mark field 'aka' to be skipped.

         * config/alpha/alpha.c [TARGET_ABI_UNICOSMK]
         (alpha_init_machine_status): Give proper type.
         * Makefile.in (c-lang.o): Depend on gtype-c.h.
         (optabs.o): Depend on gt-optabs.h.
         (GTFILES): Add optabs.o.
         (gt-optabs.h): Add rule.
         * optabs.c: Include gt-optabs.h.

         * gengtype.c (set_gc_used_type): Correct some errors in last 
change.
         (write_gc_structure_fields): If a field which should be NULL is
         not, abort.
         * c-pragma.c: Move struct align_stack and variable 
alignment_stack
         out from the ifdef.

         * config/xtensa/t-xtensa: Add dependencies for gt-xtensa.h.
         * config/xtensa/xtensa.c: Include gt-cris.h.
         (struct machine_function): Use gengtype to mark.
         * config/mmix/mmix.h (struct machine_function): Use gengtype
         to mark.
         * config/cris/t-cris: Add dependencies for gt-cris.h.
         * config/cris/cris.c: Include gt-cris.h.
         (struct machine_function): Use gengtype to mark.
         * config/rs6000/rs6000.h (struct machine_function): Use gengtype
         to mark.
         * doc/tm.texi (Per-Function Data): Delete references to
         mark_machine_status.
         * config/ia64/ia64.c (ia64_override_options): Don't set
         mark_machine_status.
         * config/i386/i386.c (override_options): Likewise.
         * config/d30v/d30v.c (d30v_init_expanders): Likewise.
         * config/arm/arm.c (arm_init_expanders): Likewise.
         * config/alpha/alpha.c (override_options): Likewise.
         * gengtype.h (enum gc_used_enum): Add GC_MAYBE_POINTED_TO.
         * gengtype.c (set_gc_used_type): Handle 'maybe_null' option.
         (write_gc_structure_fields): Don't handle 'really' option.
         Handle 'maybe_null' option.
         (write_gc_types): Handle 'maybe_null' option.
         * function.h (struct function): Don't use "really".
         (mark_machine_status): Delete declaration.
         (mark_lang_status): Delete declaration.
         (gt_ggc_mr_machine_function): Delete prototype.
         (gt_ggc_mr_language_function): Delete prototype.
         * function.c (mark_machine_status): Delete.
         (mark_lang_status): Delete.
         (gt_ggc_mr_machine_function): Delete.
         (gt_ggc_mr_language_function): Delete.
         * c-tree.h (mark_c_function_context): Delete prototype.
         * c-objc-common.c (c_objc_common_init): Don't set 
mark_lang_status.
         * c-decl.c (struct language_function): Rename from struct
         c_language_function.  Update uses.  Use gengtype to mark.
         (mark_c_function_context): Delete.
         * c-common.h (struct c_language_function): Rename from struct
         language_function.
         (mark_stmt_tree): Delete prototype.
         (c_mark_lang_decl): Delete prototype.
         (mark_c_language_function): Delete prototype.
         * c-common.c (mark_stmt_tree): Delete.
         (c_mark_lang_decl): Delete.
         (mark_c_language_function): Delete.

         * gengtype.h (enum typekind): Add TYPE_LANG_STRUCT.
         (lang_bitmap): New typedef.  Use where appropriate.
         (struct type): Add gc_used field, lang_struct field.
         (UNION_P): New macro.
         (new_structure): New prototype.
         (find_structure): Remove 'pos' parameter.  Change all callers.
         * gengtype-lex.l: Update for changes to find_structure.
         * gengtype-yacc.y (typedef_struct): Use new_structure.
         (yacc_ids): Suppress warning.
         (type): Use new_structure.
         * gengtype.c (string_type): Update for changes to struct type.
         (find_structure): Just find a structure, don't worry about
         creating one.
         (new_structure): New.
         (note_yacc_type): Use new_structure.
         (set_gc_used_type): New.
         (set_gc_used): New.
         (write_gc_structure_fields): Allow for pointers to 
TYPE_LANG_STRUCT.
         (write_gc_types): Handle TYPE_LANG_STRUCT.
         (write_gc_marker_routine_for_structure): New.
         (main): Call set_gc_used.  Add some calls to set_gc_used_type
         for places where GCC doesn't use gengtype properly yet.
         * ggc.h (gt_ggc_m_rtx_def): Don't prototype.
         (gt_ggc_m_tree_node): Likewise.

         * varasm.c (copy_constant): Call expand_constant if we hit
         something we can't recognise.

         * ggc-common.c (ggc_mark_rtvec_children): Delete.
         (ggc_mark_rtx_children): Use generic name for ggc_mark_rtvec.
         (lang_mark_false_label_stack): Delete.
         * rtl.h (struct rtvec_def): Use gengtype to mark.
         * ggc.h (ggc_mark_rtvec): Delete.
         (gt_ggc_m_rtvec_def): Delete.
         (ggc_mark_nonnull_tree): Delete.
         (ggc_mark_rtvec_children): Delete prototype.
         (lang_mark_false_label_stack): Delete declaration.

         * gengtype.h (note_yacc_type): Add prototype.
         * gengtype.c (note_yacc_type): New function.
         * gengtype-lex.l: Add lexer support for yacc files.
         * gengtype-yacc.y (start): Extract union from yacc files.
         (yacc_union): New rule.
         (yacc_typematch): New rule.
         (yacc_ids): New rule.
         (enum_items): Tweak for efficiency.
         (optionseq): Likewise.

         * c-common.h (struct language_function): Use gengtype.
         (struct c_lang_decl): Likewise.
         * c-tree.h (struct lang_decl): Likewise.
         (struct lang_type): Likewise.
         * c-decl.c (lang_mark_tree): Use generated marker routines to 
mark
         tree language substructures.

         * stringpool.c (mark_ident): Replace ggc_mark_nonnull_tree with
         ggc_mark_tree.
         * dwarf2asm.c (mark_indirect_pool_entry): Likewise.

         * varasm.c (struct rtx_const): Remove 'skip' tags for scalar 
arrays.

         * stmt.c (struct nesting): Add discriminator.  Use gengtype to
         mark. Remove 'data.block.cleanup_ptr' field.
         (struct stmt_status): Use usual technique to mark struct 
nesting.
         (gt_ggc_mr_nesting_cond): Delete.
         (gt_ggc_mr_nesting_loop): Delete.
         (gt_ggc_mr_nesting_block): Delete.
         (gt_ggc_mr_nesting_case_stmt): Delete.
         (expand_start_cond): Set discriminator.
         (expand_start_loop): Likewise.
         (expand_start_null_loop): Likewise.
         (expand_start_bindings_and_block): Set discriminator.  Don't set
         deleted fields.
         (expand_decl_cleanup): Replace 'cleanup_ptr' with
         &thisblock->data.block.cleanups.
         (expand_start_case): Set discriminator.
         (expand_start_case_dummy): Set discriminator.

         * ggc-callbacks.c: Remove.

         * gengtype.h (struct type): Add 'u.s.bitmap' field.
         (find_structure): Add 'pos' parameter.
         * gengtype-lex.l: Update callers to find_structure.
         * gengtype-yacc.y: Likewise.
         * gengtype.c (find_structure): Allow for structures to be 
defined
         in multiple language backends.
         (get_output_file_with_visibility): Include debug.h in 
gtype-desc.c.
         (counter): Rename to gc_counter.
         (write_gc_structure_fields): Fail when writing out fields for
         an incomplete structure.  Ignore arrays of scalars.  Handle
         'tree_vec' special.
         (write_gc_types): Reset counter for each procedure written.

         * stmt.c (add_case_node): Use GGC to allocate struct case_node.
         (free_case_nodes): Delete.
         (expand_end_case_type): Delete call to free_case_nodes.

         * Makefile.in (cselib.o): Include gt-<filename>.h.
         (gcse.o): Likewise.
         (profile.o): Likewise.
         (alias.o): Likewise.
         (GTFILES): Add alias.c, cselib.c, gcse.c, profile.c, and
         alphabetize backend files.
         (gt-alias.h, gt-cselib.h, gt-gcse.h, gt-profile.h): New rules.
         * alias.c: Use gengtype for roots.
         * c-common.h (struct stmt_tree_s): Use gengtype.
         * c-decl.c: Use gengtype for roots.
         * cselib.c: Use gengtype for roots.
         * expr.c: Use gengtype for roots.
         * fold-const.c: Use gengtype for roots.
         * gcse.c: Use gengtype for roots.
         * gengtype-lex.l: Handle typedefs of function types.
         Allow for empty array bounds.
         Allow processing to stop on initialisers.
         * gengtype-yacc.y (externstatic): Stop processing on 
initialisers.
         (semiequal): New rule.
         * gengtype.c (create_file): Tidy output files.
         (get_output_file_with_visibility): Fix paren warning.  Fix bug
         involving multiple input files mapping to one output file.
         (write_gc_structure_fields): Skip arrays of scalars.
         (write_gc_types): Tidy output files.
         (write_gc_root): New function.
         (write_gc_roots): Fix bugs, add support for roots that are
         structures.
         * ggc-common.c (ggc_mark_rtx_ptr): Delete.
         (ggc_mark_tree_ptr): Delete.
         (ggc_add_rtx_root): Delete.
         (ggc_add_tree_root): Delete.
         (ggc_del_root): Delete.
         * integrate.c (get_func_hard_reg_initial_val): Use ggc_alloc to
         allocate struct initial_value_struct.
         * profile.c: Use gengtype for roots.
         * sdbout.c: Use gengtype for roots.
         * varasm.c (mark_weak_decls): Delete unused prototype.
         (mark_const_hash_entry): Delete unused function.
         * config/darwin-protos.h: Use gengtype for roots.
         (machopic_add_gc_roots): Delete.
         * config/arm/arm.c: Use gengtype for roots.
         * config/arm/arm.h: Use gengtype for roots.
         * config/c4x/c4x-protos.h: Use gengtype for roots.
         * config/c4x/c4x.c (c4x_add_gc_roots): Delete.
         * config/d30v/d30v-protos.h: Use gengtype for roots.
         * config/d30v/d30v.c (d30v_add_gc_roots): Delete.
         * config/dsp16xx/dsp16xx.c (override_options): Use gengtype for 
roots.
         * config/dsp16xx/dsp16xx.h: Use gengtype for roots.
         * config/ia64/ia64-protos.h: Use gengtype for roots.
         * config/ia64/ia64.c (ia64_add_gc_roots): Delete.
         * config/m68hc11/m68hc11-protos.h: Use gengtype for roots.
         * config/m68hc11/m68hc11.c (z_reg): Make global.
         (z_reg_qi): Make global.
         (m68hc11_add_gc_roots): Delete.
         * config/mcore/mcore-protos.h: Use gengtype for roots.
         * config/mcore/mcore.c (mcore_add_gc_roots): Delete.
         * config/mips/mips.c (mips_add_gc_roots): Delete.
         * config/mips/mips.h: Use gengtype for roots.
         * config/mmix/mmix.c (override_options): Use gengtype for roots.
         * config/mmix/mmix.h: Use gengtype for roots.
         * config/mn10200/mn10200.c (asm_file_start): Use gengtype for 
roots.
         * config/mn10200/mn10200.h: Use gengtype for roots.
         * config/pa/pa.c: Use gengtype for roots, marking.
         (struct deferred_plabel): Use GGC, gengtype.
         (pa_add_gc_roots): Delete.
         (mark_deferred_plabels): Delete.
         * config/pj/pj-protos.h: Use gengtype for roots.
         * config/pj/pj.h (OVERRIDE_OPTIONS): Don't define.
         * config/rs6000/rs6000.c: Use gengtype for roots.  Don't call
         machopic_add_gc_roots.
         * config/rs6000/rs6000.h: Use gengtype for roots.
         * config/rs6000/t-darwin (darwin.o): Add dependency on 
gt-darwin.h.
         (gt-darwin.h): Add rule.
         * config/sh/sh.c: Use gengtype for roots.
         * config/sh/t-sh ($(out_object_file)): Add dependency on 
gt-sh.h.
         (gt-sh.h): Add rule.
         * config/sparc/sparc.c: Use gengtype for roots.
         (sparc_add_gc_roots): Delete.
         (struct ultrasparc_pipeline_state): Use GGC, gengtype.
         (mark_ultrasparc_pipeline_state): Delete.
         * config/sparc/sparc.h: Use gengtype for roots.

         * Makefile.in (c-parse.o): Update dependencies.
         (c-common.o): Likewise.
         (GTFILES): Add c-common.h, c-tree.h, c-common.c, c-parse.in.
         Add dependencies for the files they generate.
         * c-common.c: Replace ggc_add_* uses with GTY annotations.
         * c-common.h: Likewise.
         * c-decl.c: Likewise.
         (gt_ggc_mp_binding_level): Delete.
         * c-lang.c: Include gtype-c.h.
         * c-parse.in: Replace ggc_add_* uses with GTY annotations.  
Include
         gt-c-parse.h.
         * c-pragma.h: Replace ggc_add_* uses with GTY annotations.
         (gt_ggc_mp_align_stack): Delete.
         * c-tree.h: Replace ggc_add_* uses with GTY annotations.
         * function.c: Replace ggc_add_* uses with GTY annotations.
         (gt_ggc_mp_function): Delete.
         * function.h: Replace ggc_add_* uses with GTY annotations.
         * gengtype.c (lang_names): New.
         (NUM_BASE_FILES): New.
         (open_base_files): Create language base files.
         (startswith): New.
         (get_file_basename): New.
         (get_base_file_bitmap): New.
         (get_output_file_with_visibility): Rename from get_output_file.
         Add more mappings for various C/Objc filenames.
         (finish_root_table): New.
         (write_gc_roots): Handle dependencies and scoping properly.
         * gengtype.h: Add prototypes for new functions.
         * ggc-common.c (struct deletable_root): Delete.
         (deletables): Delete.
         (ggc_add_deletable_root): Delete.
         (ggc_mark_roots): No need to deal with deleted functionality.
         * ggc.h (ggc_add_deletable_root): Delete prototype.
         * objc/Make-lang.in (objc-act.o): Add gtype-objc.h dependency.
         (gtype-objc.h): Add rule to create.
         * objc/config-lang.in (gtfiles): New.
         * objc/objc-act.c: Allocate imp_list using GGC.  Replace uses of
         ggc_add_* with GTY markers.  Include gtype-objc.h.
         (ggc_mark_imp_list): Delete.
         * objc/objc-act.h: Replace uses of ggc_add_* with GTY markers.
         * objc/objc-lang.c: Random Whitespace Change.

         * except.h (exception_handler_labels): Delete.
         (get_exception_handler_labels): New.
         * except.c (exception_handler_labels): Delete.
         (struct eh_status): Add exception_handler_labels field.
         (doing_eh): Don't add exception_handler_labels as root.
         (free_eh_status): Don't need to free exception_handler_labels.
         (get_exception_handler_labels): New.
         (find_exception_handler_labels): Update for move of
         exception_handler_labels.
         (remove_exception_handler_label): Likewise.
         * cfgrtl.c (can_delete_label_p): Use 
get_exception_handler_labels.
         * jump.c (rebuild_jump_labels): Likewise.
         * loop.c (find_and_verify_loops): Likewise.
         * sched-rgn.c (is_cfg_nonregular): Likewise.

         * gengtype.c (write_gc_structure_fields): Handle variable-length
         TYPE_ARRAYs.

         * varasm.c (struct weak_syms): Use GGC, gengtype.
         (mark_weak_decls): Delete.
         (weak_decls): Likewise.
         (add_weak): Likewise.
         (remove_from_pending_weak_list): Likewise.
         (init_varasm_once): Likewise.

         * Makefile.in (gtype-desc.o): Add libfuncs.h dependency.
         (GTFILES): Add tree.h, libfuncs.h, emit-rtl.c, explow.c,
         stor-layout.c, regclass.c, and lists.c.
         Add dependencies of gt-emit-rtl.h gt-explow.h gt-stor-layout.h
         gt-regclass.h and gt-lists.h on s-gtype.
         * emit-rtl.c: Use gengtype for roots.  Include gt-emit-rtl.h.
         * except.c: Use gengtype for roots.
         * explow.c: Use gengtype for roots.  Include gt-explow.h.
         * expr.h (init_stor_layout_once): Delete prototype.
         * function.c: Use gengtype for roots.
         * gengtype-lex.l: Add ENT_EXTERNSTATIC lexing.
         * gengtype-yacc.y (start): Can also be an externstatic.
         (externstatic): New production.
         (struct_fields): Correct array bounds inversion for 2-d arrays.
         * gengtype.c (variables): New variable.
         (note_variable): New function.
         (get_output_file): Include libfuncs.h into gtype-desc.c.
         (get_output_file_name): New function.
         (write_gc_structure_fields): Suppress warnings.
         (write_gc_types): Make static.
         (put_mangled_filename): New function.
         (write_gc_roots): New function.
         (main): Call write_gc_roots.
         * gengtype.h (note_variable): Prototype.
         (get_output_file_name): Prototype.
         (write_gc_types): Delete prototype.
         * ggc.h: Clean up unnecessary structure predefinitions.
         (struct ggc_root_tab): Define.
         (gt_ggc_m_rtx_def): Make function, not macro.
         (gt_ggc_m_tree_node): Likewise.
         * libfuncs.h: Use gengtype for roots.
         * lists.c: Use gengtype for roots.  Include gt-lists.h.
         (init_EXPR_INSN_LIST_cache): Delete.
         * optabs.c: Use gengtype for roots.
         (gt_ggc_mp_optab): Delete.
         * optabs.h: Use gengtype for roots.
         * regclass.c: Use gengtype for roots.  Include gt-regclass.h.
         * rtl.h: Use gengtype for roots.
         (init_EXPR_INSN_LIST_cache): Delete prototype.
         * stor-layout.c: Use gengtype for roots.
         Include gt-stor-layout.h.
         (init_stor_layout_once): Delete.
         * toplev.c: Use gengtype for roots.  Delete calls to deleted
         routines.
         * tree.c: Use gengtype for roots.
         * tree.h: Use gengtype for roots.
         * varasm.c: Use gengtype for roots.

         * Makefile.in (GTFILES): Add @all_gtfiles@.
         * configure: Regenerate.
         * configure.in: Construct all_gtfiles from the gtfiles 
definitions
         in config-lang.in.
         * gengtype-yacc.y (type): Warn about duplicate structure names.
         * gengtype.c (get_output_file): Handle .c files in language
         subdirectories.

         * Makefile.in (GTFILES): Run gengtype on all the config files
         and on the target .c file.
         * except.c (mark_eh_region): Delete.
         (init_eh_for_function): Use GGC on struct eh_status.
         (mark_eh_status): Delete.
         (free_eh_status): Use GGC.
         (expand_eh_region_start): Use GGC to
         (collect_eh_region_array): Allocate last_region_number using 
GGC.
         (duplicate_eh_region_1): Use GGC to allocate struct eh_region.
         (remove_eh_handler): Let GGC free struct eh_region.
         (add_call_site): Use GGC to reallocate call_site_record array.
         * function.c (init_machine_status): Update calling sequence.
         (mark_machine_status): Likewise.
         (mark_lang_status): Likewise.
         (prepare_function_start): Update init_machine_status call.
         (mark_function_status): Delete.
         (maybe_mark_struct_function): Delete.
         (ggc_mark_struct_function): Delete.
         (gt_ggc_mp_function): New.
         (gt_ggc_mr_machine_function): New.
         (gt_ggc_mr_language_function): New.
         (init_function_once): Use canonical names.
         * function.h (struct function): Use gengtype.
         (init_machine_status): Return the structure.
         (mark_machine_status): Take a 'void *'.
         (mark_lang_status): Likewise.
         * ggc-common.c (ggc_mark_trees): Use canonical name for
         ggc_mark_struct_function.
         * tree.h (ggc_mark_struct_function): Delete prototype.
         * config/alpha/alpha.c (alpha_mark_machine_status): Delete.
         (alpha_init_machine_status): Likewise.
         (override_options): Use canonical name for 
alpha_mark_machine_status.
         * config/alpha/unicosmk.h (struct machine_function): Use 
gengtype.
         * config/arm/arm.h (struct machine_function): Use gengtype.
         * config/arm/arm.c (arm_mark_machine_status): Delete.
         (arm_init_machine_status): Update calling sequence.
         (arm_init_expanders): Use canonical name for 
arm_mark_machine_status.
         * config/cris/cris.c (cris_init_machine_status): Update
         calling sequence.
         * config/d30v/d30v.h (struct machine_function): Use gengtype.
         * config/d30v/d30v.c (d30v_init_machine_status): Update
         calling sequence.
         (d30v_mark_machine_status): Delete.
         * config/i386/i386.c: Include gt-i386.h.
         (struct machine_function): Use gengtype.
         (ix86_init_machine_status): Update calling sequence.
         (ix86_mark_machine_status): Delete.
         (override_options): Use canonical namke for 
ix86_mark_machine_status.
         * config/ia64/ia64.h (struct machine_function): Use gengtype.
         * config/ia64/ia64.c (ia64_init_machine_status): Update calling
         sequence.
         (ia64_mark_machine_status): Delete.
         (ia64_override_options): Use canonical name for
         ia64_mark_machine_status.
         * config/mmix/mmix.c (mmix_init_machine_status): Update calling
         sequence.
         * config/rs6000/rs6000.c (rs6000_init_machine_status): Likewise.
         * config/xtensa/xtensa.c (xtensa_init_machine_status): Likewise.
         * gengtype.c (get_output_file): Fix warning.
         (main): Add prototype to suppress warning.
         * tree.c: Remove tree_hash_mark prototype.

         * tree.h (init_stmt): Delete prototype.
         * toplev.c (lang_independent_init): Don't call init_stmt.
         * stmt.c (ALLOC_NESTING): Use GGC for 'struct nesting'.
         (stmt_obstack): Delete.
         (POPSTACK): No need to free 'struct nesting'.
         (gt_ggc_mr_nesting_cond): Use canonical names.
         (gt_ggc_mr_nesting_loop): Use canonical names.
         (gt_ggc_mr_nesting_block): Use canonical names.
         (gt_ggc_mr_nesting_case_stmt): Use canonical names.
         (mark_stmt_status): Delete.
         (init_stmt): Delete.
         (clear_last_expr): Clear both last_expr_type and 
last_expr_value.
         Use it everywhere that last_expr_type was cleared.
         * lists.c (init_EXPR_INSN_LIST_cache): Use 
ggc_add_deletable_root.
         (zap_lists): Delete.
         * ggc.h (ggc_add_deletable_root): Prototype.
         (mark_stmt_status): Remove prototype.
         * ggc-common.c (ggc_add_deletable_root): New.
         (ggc_mark_roots): Handle deletable roots.
         * function.c (ggc_mark_struct_function): Use canonical name
         for mark_stmt_status.
         * emit-rtl.c (free_sequence_stack): New.
         (start_sequence): Use a freelist for sequences.
         (end_sequence): Likewise.
         (init_emit_once): Add free_sequence_stack as a deleteable root.
         * c-pragma.c Include gt-c-pragma.h.
         (struct align_stack): Use gengtype.
         (push_alignment): Use GGC for struct align_stack.
         (mark_align_stack): Delete.
         (gt_ggc_mp_align_stack): New.
         (init_pragma): Use canonical name for mark_align_stack.
         * c-decl.c: Include gt-c-decl.h.
         (struct binding_level): Use gengtype.
         (make_binding_level): Use GGC; handle the freelist here.
         (pop_binding_level): New.
         (pushlevel): Move code into make_binding_level.
         (push_label_level): Likewise.
         (poplevel): Move code into pop_binding_level.
         (pop_label_level): Likewise.
         (mark_binding_level): Delete.
         (gt_ggc_mp_binding_level): New.
         (c_init_decl_processing): Use canonical name for 
mark_binding_level.
         Add free_binding_level as deletable root.
         (mark_c_function_context): Use canonical name for 
mark_binding_level.
         * Makefile.in (c-decl.o): Add gt-c-decl.h.
         (c-pragma.o): Add gt-c-pragma.h.
         (GTFILES): Add c-decl.c and c-pragma.c.
         (gt-c-decl.h, gt-c-pragma.h): Create using gengtype.

         * tree.c (struct type_hash): Use gengtype.
         (init_obstacks): Use canonical name for type_hash_mark.
         (type_hash_mark): Delete.
         Include gt-tree.h.
         * rtl.h (struct mem_attrs): Use gengtype.
         * optabs.h (struct optab): Use gengtype.
         * optabs.c (expand_binop): Squish signed/unsigned warning.
         (mark_optab): Make local, use canonical name, use autogenerated
         marker procedure.
         (init_optabs): Use canonical name for mark_optab.
         (new_optab): Use GGC to allocate optabs.
         * ggc.h: Delete mark_optab prototype.
         * ggc-common.c (ggc_mark_rtx_children): Use canonical name for
         mem_attrs marker procedure.
         * gengtype.c (get_output_file): Include headers in gtype-desc.c
         explicitly rather than deducing them from file names.
         (write_gc_structure_fields): Handle arrays of structures.
         (main): Return non-zero exit code if errors occur during output.
         * emit-rtl.c (mem_attrs_mark): Delete.
         (init_emit_once): Use canonical name for mem_attrs marker 
procedure.
         * Makefile.in (gtype-desc.o): Explicitly name dependencies.
         (tree.o): Depend on gt-tree.h.
         (GTFILES): Add rtl.h, optabs.h, tree.c.
         (gt-tree.h): Add it to s-gtype rule.

         * .cvsignore: Ignore gengtype flex/bison generated files.
         * Makefile.in (GGC_H): Add gtype-desc.h.
         (OBJS): Add gtype-desc.o.
         (GEN): Add gengtype.
         (STAGESTUFF): Add gengtype.
         (varasm.o): Add gt-varasm.h.
         (stmt.o): Add gt-stmt.h.
         (except.o): Add gt-except.h.
         (integrate.o): Add gt-integrate.h.
         (GTFILES): New.
         Add new rules for new files.
         * configure: Regenerate.
         * configure.in: Correct defaults.h paths.
         * emit-rtl.c (mark_sequence_stack): Delete.
         (mark_emit_status): Delete.
         (start_sequence): Allocate sequence structures using GGC.
         (end_sequence): Allocate sequence structures using GGC.
         * except.c: Use gengtype for various structures.  Include
         gt-except.h.
         * expr.c (mark_expr_status): Delete.
         * function.c: Use gengtype for various structures.  Include
         gt-function.h.
         (mark_function_status): Use standard gt_ggc names for marker 
functions.
         (ggc_mark_struct_function): Likewise.
         * function.h: Use gengtype for various structures.
         * gengtype-lex.l: New file.
         * gengtype-yacc.y: New file.
         * gengtype.c: New file.
         * gengtype.h: New file.
         * ggc.h: Include gtype-desc.h.  Alias some marker procedures to
         the standard names.  Remove some now-unnecessary prototypes.
         * integrate.c: Use gengtype for various structures.  Include
         gt-integrate.h.
         (mark_hard_reg_initial_vals): Delete.
         * integrate.h (mark_hard_reg_initial_vals): Delete.
         * stmt.c: Use gengtype for various structures.  Include
         gt-stmt.h.
         (mark_case_node): Delete.
         (mark_goto_fixup): Delete.
         (mark_stmt_status): Use standard gt_ggc names for marker 
functions.
         * system.h: Define GTY to empty.   In flex/bison files,
         don't poison malloc or realloc, instead just define them to
         xmalloc and xrealloc.
         * varasm.c: Use gengtype for various structures.  Include
         gt-varasm.h.  Use standard gt_ggc names for marker functions.
         (mark_pool_constant): Delete.
         (mark_varasm_status): Delete.
         (decode_rtx_const): #if 0 out non-typesafe hack.

         * function.h (free_lang_status): Mark as obsolete.
         * function.c (free_lang_status): Mark as obsolete.
         * c-decl.c (push_c_function_context): Use GC to allocate and 
free
         struct language_function.
         (pop_c_function_context): Likewise.
         * c-common.c (mark_c_language_function): Mark struct
         language_function.

         * doc/tm.texi (Per-Function Data): Don't document 
free_machine_status.
         Document that the machine_function structures must be allocated
         using GC.  Update mark_machine_status documentation.
         * function.h: Don't declare free_machine_status.
         * function.c (free_machine_status): Don't define.
         (free_after_compilation): Don't call free_machine_status.
         (ggc_mark_struct_function): Mark f->machine.  Call
         mark_machine_status only on non-NULL pointers.
         * system.h: Poison free_machine_status.
         * config/xtensa/xtensa.c (xtensa_init_machine_status): Use GC on
         struct machine_function.
         (xtensa_free_machine_status): Delete.
         (override_options): Don't set free_machine_status.
         * config/rs6000/rs6000.c (rs6000_override_options): Don't set
         free_machine_status.
         (rs6000_init_machine_status): Use GC on struct machine_function.
         (rs6000_free_machine_status): Delete.
         * config/ia64/ia64.c (ia64_init_machine_status): Use GC on 
struct
         machine_function.
         (ia64_mark_machine_status): Likewise.
         (ia64_free_machine_status): Delete.
         (ia64_override_options): Don't set free_machine_status.
         * config/i386/i386.c (override_options): Don't set
         free_machine_status.
         (ix86_init_machine_status): Use GC on struct machine_function.
         (ix86_mark_machine_status): Likewise.
         (ix86_free_machine_status): Delete.
         * config/d30v/d30v.c: (d30v_init_machine_status): Use GC on 
struct
         machine_function.
         (d30v_mark_machine_status): Likewise.
         (d30v_free_machine_status): Delete.
         (d30v_init_expanders): Don't set free_machine_status.
         * config/arm/arm.c (arm_mark_machine_status): Use GC on struct
         machine_function.
         (arm_init_machine_status): Likewise.
         (arm_free_machine_status): Delete.
         (arm_init_expanders): Don't set free_machine_status.
         * config/alpha/alpha.c (override_options): Don't set
         free_machine_status.
         (alpha_init_machine_status): Use GC on struct machine_function.
         (alpha_mark_machine_status): Likewise.
         (alpha_free_machine_status): Delete.

         * varasm.c (compare_constant): Fix typo.

         * varasm.c: Don't include obstack.h.
         (struct varasm_status): x_const_rtx_hash_table is a hash of 
rtxes.
         (struct rtx_const): Give substructures names, improve 
formatting.
         (struct constant_descriptor): Delete.
         (struct constant_descriptor_tree): New, based on 
constant_descriptor.
         (const_hash_table): Is a hash table of trees.
         (mark_const_hash_entry): Is used for hashes of trees.  Mark
         constant_descriptor_tree structure.
         (mark_const_str_htab_1): Mark deferred_string structure.
         (compare_constant): Rewrite to compare trees.
         (compare_constant_1): Delete.
         (record_constant): Delete.
         (record_constant_1): Delete.
         (output_constant_def): Use struct constant_descriptor_tree.
         Don't duplicate trees twice.
         (struct constant_descriptor_rtx): New.
         (struct pool_constant): Used for rtx constants.
         (init_varasm_status): Update for change to struct varasm_status.
         (mark_varasm_status): Likewise.
         (free_varasm_status): Delete.
         (compare_constant_rtx): Rewrite to handle 
constant_descriptor_rtx.
         (record_constant_rtx): Likewise.
         (mem_for_const_double): Update to use struct 
constant_descriptor_rtx.
         (force_const_mem): Likewise.
         * Makefile.in (varasm.o): Doesn't depend on obstack.h.
         * function.c (free_after_compilation): Don't use 
free_varasm_status.
         * function.h: Don't prototype free_varasm_status.

         * ggc-common.c (ggc_realloc): Handle X being NULL.

         * ggc-common.c (ggc_realloc): New function.
         * ggc.h: Prototype it.
         * emit-rtl.c (free_emit_status): Delete.
         (init_emit): Allocate emit subarrays using GC.
         (gen_reg_rtx): Reallocate subarrays using GC.
         (init_emit): Use GC to allocate 'struct emit_status' and its
         subarrays.
         (mark_emit_status): Mark structure and its subarrays.
         * stmt.c (free_stmt_status): Delete.
         * expr.c (free_expr_status): Delete.
         * function.h: Remove prototypes for deleted functions.
         * function.c (free_after_compilation): Don't use deleted 
functions.
         Don't call free() on x_parm_reg_stack_loc.
         (free_after_parsing): Don't use free_stmt_status.
         (assign_parms): Use GC to allocate and resize 
x_parm_reg_stack_loc.
         (mark_function_status): Mark x_parm_reg_stack_loc.

         * varasm.c (init_varasm_status): Use GC to allocate
         'struct varasm_status' and its fields x_const_rtx_hash_table
         and x_const_rtx_sym_hash_table.
         (mark_varasm_status): Mark them.
         (free_varasm_status): Use GC to free them.
         * expr.c (init_expr): Use GC to allocate 'struct expr_status'.
         (mark_expr_status): Mark the structure itself.
         (free_expr_status): Use GC to free the structure.
         * stmt.c (free_stmt_status): Use GC to free 'struct 
stmt_status'.
         (mark_stmt_status): Mark the 'struct stmt_status' itself.
         (init_stmt_for_function): Allocate the structure for GC.

         * dwarf2out.c (lookup_type_die): Use TYPE_SYMTAB_DIE.
         (equate_type_number_to_die): Likewise.
         * tree.h (TYPE_SYMTAB_DIE): New macro.
         (struct die_struct): Predeclare.
         (struct tree_type): Add field symtab.die.   Add a tag
         to the union type of field symtab.

         * varray.h (VARRAY_RTVEC_INIT): A varray of rtvec contains
         'struct rtvec_def *', not 'struct rtvec_def'.

         * function.h (original_arg_vector): Make a real rtvec.
         * function.c (ggc_mark_struct_function): Adjust.
         * integrate.c (expand_inline_function): Adjust.

         [cp/Changelog]
         * pt.c (inline_parm_levels): Mark for GC.

         * mangle.c (start_mangling): Allocate G.substitutions here...
         (init_mangle): ... rather than here.
         (finish_mangling): Clear the varray pointer when done with it.
         * spew.c (yylexstring): Don't use VARRAY_FREE.
         * search.c (bfs_walk): Don't use VARRAY_FREE.
         * decl2.c (pending_statics): Use gengtype to mark.
         (deferred_fns): Likewise.
         (ssdf_decls): Likewise.
         (init_decl2): Delete.
         * decl.c (pop_from_top_level): Don't use VARRAY_FREE.
         (cxx_init_decl_processing): Don't call init_decl2.
         (cxx_pop_function_context): Don't use VARRAY_FREE.
         * cp-tree.h (struct saved_scope): No need for special marking
         of varrays.
         (struct language_function): Likewise.
         (local_classes): Use gengtype to mark.
         (init_decl2): Delete prototype.
         * class.c (init_class_processing): Don't use
         ggc_add_tree_varray_root.
         (build_vtbl_initializer): Don't use VARRAY_FREE.

         * decl.c (typename_compare): Don't use same_type_p.

         * decl.c: Include hashtab.h instead of hash.h.
         (typename_hash): Update to use htab_h.
         (typename_compare): Likewise.
         (typename_htab): Use gengtype to mark.
         (build_typename_type): Update to use htab_h.
         * Make-lang.in (cp/decl.o): Use HASHTAB_H instead of hash.h.

         * Make-lang.in (gt-cp-tree.h): New rule.
         (cp/tree.o): Depend on gt-cp-tree.h.
         * config-lang.in (gtfiles): Add cp/tree.c.
         * tree.c: Include gt-cp-tree.h.
         (list_hash_table): Use gengtype to mark.
         (init_tree): Use gengtype to mark trees.

         * Make-lang.in (cp/decl.o): Add debug.h dependency.
         * call.c (struct z_candidate): Use gengtype.
         (USER_CONV_CAND): Use WRAPPER_ZC.
         (convert_class_to_reference): Use build_zc_wrapper.
         (build_type_conversion_1): Likewise.
         (build_over_call): Use WRAPPER_ZC.
         (add_warning): Use build_zc_wrapper.
         * cp-lang.c (LANG_HOOKS_MARK_TREE): Delete.
         * cp-tree.h (struct lang_identifier): Use gengtype.
         (struct template_parm_index_s): Likewise.
         (struct ptrmem_cst): Likewise.
         (struct tree_binding): Likewise.
         (struct tree_overload): Likewise.
         (struct tree_srcloc): Likewise.
         (struct tree_wrapper): Likewise.  Also modify to have a pointer
         to struct z_candidate rather than void.
         (enum cp_tree_node_structure_enum): New.
         (union lang_tree_node): New.
         (cxx_mark_tree): Delete prototype.
         (cp_tree_node_structure): New prototype.
         (build_ptr_wrapper): Delete prototype.
         (build_int_wrapper): Delete prototype.
         (build_zc_wrapper): New prototype.
         * decl.c: Include debug.h
         (cxx_mark_tree): Delete.
         (cp_tree_node_structure): New.
         * tree.c (build_ptr_wrapper): Delete.
         (build_int_wrapper): Delete.
         (build_zc_wrapper): New.

         * cp-tree.h [! ENABLE_TREE_CHECKING] (LANG_TYPE_PTRMEM_CHECK):
         Correct typo.  Patch from k_fukui@highway.ne.jp.

         * semantics.c (current_stmt_tree): Update for change to
         struct language_function.
         (finish_mem_initializers): Likewise.
         * decl.c (cxx_init_decl_processing): Don't set mark_lang_status.
         * cp-tree.h (struct language_function): Rename from
         cp_language_function.  Change all uses.
         (cp_function_chain): Don't need to cast.

         * class.c (duplicate_tag_error): Reset discriminator.
         (check_bases_and_members): Update for data structure changes.
         * cp-tree.h (struct lang_id2): Use gengtype.
         (flagged_type_tree): Likewise.
         (SET_LANG_ID): Use GGC on struct lang_id2.
         (struct cp_language_function): Use gengtype.  Remove field
         'x_vcalls_possible_p'.
         (current_vcalls_possible_p): Delete.
         (struct lang_type_header): New.
         (struct lang_type_class): Rename from struct lang_type.  Include
         struct lang_type_header.
         (struct lang_type_ptrmem): New.
         (struct lang_type): New.
         (LANG_TYPE_CLASS_CHECK): New.  Use it in all the appropriate 
macros.
         (LANG_TYPE_PTRMEM_CHECK): New.  Use it in all the appropriate 
macros.
         (TYPE_SET_PTRMEMFUNC_TYPE): Set discriminator, update for 
changes.
         (struct lang_decl_flags): Use gengtype.  Add discriminators.
         (struct lang_decl): Use gengtype.  Add and use discriminators.
         Update the macros that reference moved fields.
         (LANG_DECL_U2_CHECK): New function.  Use it when appropriate.
         (SET_DECL_THUNK_P): Set discriminator too.
         (clear_inline_text_obstack): Delete prototype.
         (finish_inline_definitions): Delete prototype.
         (mark_pending_inlines): Delete prototype.
         (lang_check_failed): New prototype.
         * decl.c (struct named_label_use_list): Use gengtype.
         (struct named_label_list): Likewise.
         (mark_binding_level): Delete.
         (mark_named_label_lists): Delete.
         (push_local_name): Set discriminator on DECL_LANG_SPECIFIC.
         (cxx_init_decl_processing): Use generated marker routine.
         (begin_destructor_body): Delete dead set to
         current_vcalls_possible_p.
         (mark_lang_function): Delete.
         (mark_cp_function_context): Delete.
         (lang_mark_tree): Use generated marker routines.
         * decl2.c (start_objects): Set discriminator when setting
         GLOBAL_INIT_PRIORITY.
         * lex.c (retrofit_lang_decl): Set discriminators.
         (copy_lang_type): Update for changes to lang_type structure.
         (cp_make_lang_type): Set discriminator.
         * parse.y: Use gengtype on YYLVAL.  Don't use dots in 
identifiers.
         * search.c: Include ggc.h.
         * semantics.c (anon_aggr_type_p): Use the macro, don't 
hand-code it.
         (finish_inline_definitions): Delete.
         * spew.c (struct token): Use gengtype.
         (struct token_chunk): New.
         (struct unparsed_text): Use gengtype.  Store tokens in chunks.
         (struct feed): Use gengtype.
         (feed_obstack): Delete.
         (feed): Mark as GC root.
         (pending_inlines): Mark as GC root.
         (pending_inlines_tail): Likewise.
         (processing_these_inlines): Likewise.
         (token_obstack): Make static.
         (first_token): Likewise.
         (init_spew): Don't initialise deleted things; use gengtype for 
roots.
         (clear_inline_text_obstack): Delete.
         (feed_input): Use GC for struct feed.  Update for changes to
         struct unparsed_text.
         (mark_pending_inlines): Delete.
         (next_token): Rename from add_token.  Change all callers.  
Update
         for changes to struct unparsed_text.
         (space_for_token): New.
         (remove_last_token): New.
         (alloc_unparsed_text): New.
         (snarf_block): Take an unparsed_text.  Update for changes to 
struct
         unparsed_text.
         (snarf_method): Update for changes to struct unparsed_text.
         (snarf_defarg): Update for changes to struct unparsed_text.
         * tree.c (lang_check_failed): New.

         * Make-lang.in (gt-cp-call.h gt-cp-decl2.h gt-cp-parse.h
         gt-cp-pt.h gt-cp-repo.h gt-cp-spew.h): New rules.
         (cp/spew.o): Add dependency on gt-<filename>.h.
         (cp/decl2.o): Add dependency on gt-<filename>.h.
         (cp/call.o): Add dependency on gt-<filename>.h.
         (cp/pt.o): Add dependency on gt-<filename>.h.
         (cp/repo.o): Add dependency on gt-<filename>.h.
         (cp/parse.o): Add dependency on gt-<filename>.h.
         * call.c: Use gengtype for roots.
         * config-lang.in (gtfiles): Add cp-tree.h decl.h lex.h call.c
         decl2.c parse.y pt.c repo.c spew.c.
         * cp-tree.h: Use gengtype for roots.
         (struct saved_scope): Use GGC, gengtype.
         (cp_parse_init): Delete prototype.
         (init_pt): Delete prototype.
         * decl.c: Use gengtype for roots.
         (mark_saved_scope): Delete.
         (cxx_init_decl_processing): Don't call deleted initilisation
         routines.
         (signed_size_zero_node): Delete, unused.
         * decl.h: Use gengtype for roots.
         * decl2.c: Use gengtype for roots.
         * lex.h: Use gengtype for roots.
         * parse.y: Use gengtype for roots.
         (cp_parse_init): Delete.
         * pt.c: Use gengtype for roots.
         (init_pt): Delete.
         * repo.c: Use gengtype for roots.
         * spew.c: Use gengtype for roots.

         * Make-lang.in: Allow for filename changes.  Add gtype-cp.h.
         (cp/decl.o): Add dependency on gtype-cp.h.
         * decl.c: Remove use of add_deletable_root, use GTY marker 
instead.
         Include gtype-cp.h.  Allow for filename changes.

         * Make-lang.in (cp/gt-decl.h): Generate using gengtype.
         (cp/decl.o): Add cp/gt-decl.h dependency.
         * config-lang.in (gtfiles): New.
         * tree.h: Rename struct binding_level to struct 
cp_binding_level.
         * decl.c: Rename struct binding_level to struct 
cp_binding_level.
         Include cp/gt-decl.h.
         (struct cp_binding_level): Use gengtype.
         (make_binding_level): Use GGC on struct cp_binding_level.
         (mark_binding_level): Use gt_ggc_m_cp_binding_level.
         (cxx_init_decl_processing): Mark free_binding_level as
         deletable.

         * decl.c (mark_cp_function_context): Update calling sequence.

         * decl.c (start_function): Don't free 'struct
         cp_language_function'.
         (pop_cp_function_context): Likewise.
         (save_function_data): Allocate it using GC.
         * semantics.c (genrtl_start_function): Don't free 'struct
         cp_language_function'.

2002-11-07  Mark Mitchell  <mark@codesourcery.com>

         PR c++/8338
         * pt.c (for_each_template_parm): Add htab parameter.
         (process_partial_specialization): Adjust call.
         (push_template_decl_real): Likewise.
         (pair_fn_data): Add visited.
         (for_each_template_parm_r): Avoid walking duplicates more than
         once.
         (uses_template_parms): Adjust call to for_each_template_parm.

--------------------------------------------------------------
Ziemowit Laski                 1 Infinite Loop, MS 301-2K
Mac OS X Compiler Group        Cupertino, CA USA  95014-2083
Apple Computer, Inc.           +1.408.974.6229  Fax .5477


^ permalink raw reply	[flat|nested] 24+ messages in thread
* Re: GCC 3.3 compile speed regression - THE GRAPH
@ 2003-02-08  7:46 Tim Josling
  0 siblings, 0 replies; 24+ messages in thread
From: Tim Josling @ 2003-02-08  7:46 UTC (permalink / raw)
  To: gcc


> The following graph shows the deterioration in compile-time performance
> as seen on the gcc-3_3-branch (and, prior to the creation of the branch,
> on the trunk itself).  The test case is the same Qt fragment I used for
> my earlier GC analysis; the test machine (a RedHat Linux 8.0 box) is
> also the same.  You can find the preprocessed source at:

>   http://homepage.mac.com/zlaski/FileSharing1.html

Good work.

With this program the GC cost is around 35%, including 2.6% cost for
allocating using ggc_alloc (versus sequential allocation).

Tim Josling

^ permalink raw reply	[flat|nested] 24+ messages in thread
* Re: GCC 3.3 compile speed regression - THE GRAPH
@ 2003-02-10  4:11 Robert Dewar
  0 siblings, 0 replies; 24+ messages in thread
From: Robert Dewar @ 2003-02-10  4:11 UTC (permalink / raw)
  To: dnovillo, fjh; +Cc: gcc, zlaski

> Neither lcc nor tcc are optimizing compilers.
> So the right one to compare compilation speed with is `-O0'.


Even that is not an apples/apples comparison. Clearly if one does not
care about code quality, then it should be possible to write a C compiler
running at millions of lines a minute on a modern PC (compare for example
the speed of the Realia COBOL compiler). Even at -O0 you are paying
a significant price for the general structure of gcc which makes advanced
optimizations feasible (not to mention the very general table driven
sturcture of the code generator).

Certainly I agree that it should be possible to speed up gcc by a 
significant factor while retaining these general characteristics, but
I am not sure it is instructive or useful to compare gcc performance
with tcc.

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2003-02-12 19:52 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-07 20:51 GCC 3.3 compile speed regression - THE GRAPH Ziemowit Laski
2003-02-07 22:08 ` Phil Edwards
2003-02-07 22:14 ` Neil Booth
2003-02-07 22:22   ` Joe Buck
2003-02-07 22:22   ` Ziemowit Laski
2003-02-07 22:25     ` Neil Booth
2003-02-07 22:43     ` Stan Shebs
2003-02-09 17:46   ` Marc Espie
2003-02-09 18:56     ` GCC 3.3 compile speed regression - AN ANSWER Michael S. Zick
2003-02-09 21:09       ` Neil Booth
2003-02-10 14:33         ` Michael S. Zick
2003-02-09 21:06     ` GCC 3.3 compile speed regression - THE GRAPH Neil Booth
2003-02-09 19:25 ` Fergus Henderson
2003-02-09 20:18   ` Diego Novillo
2003-02-09 20:28     ` Aaron Lehmann
2003-02-09 20:46     ` Fergus Henderson
2003-02-09 21:15   ` Neil Booth
2003-02-09 23:24   ` Joseph S. Myers
2003-02-10  7:43     ` Fergus Henderson
2003-02-11 20:25       ` Neil Booth
2003-02-11 23:35         ` Joseph S. Myers
2003-02-12 19:57       ` Fergus Henderson
2003-02-08  7:46 Tim Josling
2003-02-10  4:11 Robert Dewar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).