diff options
author | Per Bothner <per@bothner.com> | 2001-01-21 13:24:30 -0800 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 2001-01-21 13:24:30 -0800 |
commit | b5c4fed92cb6d5fe30e6eac39d1299b2cf998c9d (patch) | |
tree | fb724a1bb57c4396ebb107ef33d32b2bef5e0b7a /gcc | |
parent | 3432b91b650d7b134217ee74392840f6a4d85c4b (diff) | |
download | gcc-b5c4fed92cb6d5fe30e6eac39d1299b2cf998c9d.zip gcc-b5c4fed92cb6d5fe30e6eac39d1299b2cf998c9d.tar.gz gcc-b5c4fed92cb6d5fe30e6eac39d1299b2cf998c9d.tar.bz2 |
Minor optimization of static ggc roots.
* jcf-parse.c (parse_roots): New static field.
(current_field, current_method, current_file_list): Replace by macros
naming fields of parse_roots.
(init_jcf_parse): Combine 3 ggc_add_tree_root calls to 1.
* class.c (class_roots): New static field.
(registered_class, fields_ident, info_ident, class_list):
New macros naming fields of parse_roots.
(build_static_field_ref): Don't register roots here.
(layout_class): Static field list replaced by macro class_list.
(init_class_processing): Call ggc_add_tree_root for 4 roots.
Initialize fields_ident and info_ident here.
From-SVN: r39174
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/java/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/java/class.c | 45 | ||||
-rw-r--r-- | gcc/java/jcf-parse.c | 12 |
3 files changed, 36 insertions, 36 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index a01b0b5..f045363d 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,5 +1,20 @@ 2001-01-21 Per Bothner <per@bothner.com> + Minor optimization of static ggc roots. + * jcf-parse.c (parse_roots): New static field. + (current_field, current_method, current_file_list): Replace by macros + naming fields of parse_roots. + (init_jcf_parse): Combine 3 ggc_add_tree_root calls to 1. + * class.c (class_roots): New static field. + (registered_class, fields_ident, info_ident, class_list): + New macros naming fields of parse_roots. + (build_static_field_ref): Don't register roots here. + (layout_class): Static field list replaced by macro class_list. + (init_class_processing): Call ggc_add_tree_root for 4 roots. + Initialize fields_ident and info_ident here. + +2001-01-21 Per Bothner <per@bothner.com> + * jcf-parse.c (ggc_mark_jcf): New function. (init_jcf_parse): Register current_jcf as ggc root. diff --git a/gcc/java/class.c b/gcc/java/class.c index 5e1e0b8..f98a5d7 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -83,6 +83,12 @@ static assume_compiled_node *find_assume_compiled_node static assume_compiled_node *assume_compiled_tree; +static tree class_roots[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; +#define registered_class class_roots[0] +#define fields_ident class_roots[1] /* get_identifier ("fields") */ +#define info_ident class_roots[2] /* get_identifier ("info") */ +#define class_list class_roots[3] + /* Return the node that most closely represents the class whose name is IDENT. Start the search from NODE. Return NULL if an appropriate node does not exist. */ @@ -978,22 +984,10 @@ build_static_field_ref (fdecl) { /* Compile as: * *(FTYPE*)build_class_ref(FCLASS)->fields[INDEX].info.addr */ - static tree fields_ident = NULL_TREE; - static tree info_ident = NULL_TREE; tree ref = build_class_ref (fclass); tree fld; int field_index = 0; ref = build1 (INDIRECT_REF, class_type_node, ref); - if (fields_ident == NULL_TREE) - { - fields_ident = get_identifier ("fields"); - ggc_add_tree_root (&fields_ident, 1); - } - if (info_ident == NULL_TREE) - { - info_ident = get_identifier ("info"); - ggc_add_tree_root (&info_ident, 1); - } ref = build (COMPONENT_REF, field_ptr_type_node, ref, lookup_field (&class_type_node, fields_ident)); @@ -1508,7 +1502,7 @@ is_compiled_class (class) if (class == current_class) return 2; - seen_in_zip = (TYPE_JCF (class) && TYPE_JCF (class)->seen_in_zip); + seen_in_zip = (TYPE_JCF (class) && JCF_SEEN_IN_ZIP (TYPE_JCF (class))); if (CLASS_FROM_CURRENTLY_COMPILED_SOURCE_P (class) || seen_in_zip) { /* The class was seen in the current ZIP file and will be @@ -1628,19 +1622,10 @@ void layout_class (this_class) tree this_class; { - static tree list = NULL_TREE; - static int initialized_p; tree super_class = CLASSTYPE_SUPER (this_class); tree field; - /* Register LIST with the garbage collector. */ - if (!initialized_p) - { - ggc_add_tree_root (&list, 1); - initialized_p = 1; - } - - list = tree_cons (this_class, NULL_TREE, list); + class_list = tree_cons (this_class, NULL_TREE, class_list); if (CLASS_BEING_LAIDOUT (this_class)) { char buffer [1024]; @@ -1651,7 +1636,7 @@ layout_class (this_class) IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (this_class)))); obstack_grow (&temporary_obstack, buffer, strlen (buffer)); - for (current = TREE_CHAIN (list); current; + for (current = TREE_CHAIN (class_list); current; current = TREE_CHAIN (current)) { tree decl = TYPE_NAME (TREE_PURPOSE (current)); @@ -1679,7 +1664,7 @@ layout_class (this_class) { TYPE_SIZE (this_class) = error_mark_node; CLASS_BEING_LAIDOUT (this_class) = 0; - list = TREE_CHAIN (list); + class_list = TREE_CHAIN (class_list); return; } if (TYPE_SIZE (this_class) == NULL_TREE) @@ -1721,7 +1706,7 @@ layout_class (this_class) { TYPE_SIZE (this_class) = error_mark_node; CLASS_BEING_LAIDOUT (this_class) = 0; - list = TREE_CHAIN (list); + class_list = TREE_CHAIN (class_list); return; } } @@ -1733,7 +1718,7 @@ layout_class (this_class) fold (convert (int_type_node, TYPE_SIZE_UNIT (this_class))); CLASS_BEING_LAIDOUT (this_class) = 0; - list = TREE_CHAIN (list); + class_list = TREE_CHAIN (class_list); } void @@ -1845,8 +1830,6 @@ layout_class_method (this_class, super_class, method_decl, dtable_count) return dtable_count; } -static tree registered_class = NULL_TREE; - void register_class () { @@ -1911,7 +1894,9 @@ void init_class_processing () { registerClass_libfunc = gen_rtx (SYMBOL_REF, Pmode, "_Jv_RegisterClass"); - ggc_add_tree_root (®istered_class, 1); + ggc_add_tree_root (class_roots, sizeof (class_roots) / sizeof (tree)); + fields_ident = get_identifier ("fields"); + info_ident = get_identifier ("info"); ggc_add_rtx_root (®isterClass_libfunc, 1); gcc_obstack_init (&temporary_obstack); } diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index b1214d4..61c3c15 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -70,14 +70,16 @@ extern struct obstack permanent_obstack; before static field references. */ extern int always_initialize_class_p; +static tree parse_roots[3] = { NULL_TREE, NULL_TREE, NULL_TREE }; + /* The FIELD_DECL for the current field. */ -static tree current_field = NULL_TREE; +#define current_field parse_roots[0] /* The METHOD_DECL for the current method. */ -static tree current_method = NULL_TREE; +#define current_method parse_roots[1] /* A list of file names. */ -static tree current_file_list = NULL_TREE; +#define current_file_list parse_roots[2] /* The Java .class file that provides main_class; the main input file. */ static struct JCF main_jcf[1]; @@ -1119,9 +1121,7 @@ void init_jcf_parse () { /* Register roots with the garbage collector. */ - ggc_add_tree_root (¤t_field, 1); - ggc_add_tree_root (¤t_method, 1); - ggc_add_tree_root (¤t_file_list, 1); + ggc_add_tree_root (parse_roots, sizeof (parse_roots) / sizeof(tree)); ggc_add_root (¤t_jcf, 1, sizeof (JCF), ggc_mark_jcf); } |