This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
GCC 3.3 compile speed regression - THE GRAPH
- From: Ziemowit Laski <zlaski at apple dot com>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 7 Feb 2003 12:51:59 -0800
- Subject: GCC 3.3 compile speed regression - THE GRAPH
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:
gcc_regress_chart.pdf
Description: Adobe PDF document
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