Re: [google][gcc-4_9] Remove unused key field in gcov_fn_info
else { gfi_ptr = gi_ptr->functions[f_ix]; - if (gfi_ptr && gfi_ptr->key == gi_ptr) + if (gfi_ptr) length = GCOV_TAG_FUNCTION_LENGTH; - else -length = 0; } The removal of 'else' path seems wrong. David On Tue, Sep 29, 2015 at 1:46 PM, Rong Xuwrote: > Hi, > > This patch is for google/gcc-4_9 branch. > > The 'key' field in gcov_fn_info is designed to allow gcov function > data to be COMDATTed, but the comdat elimination never works. This > patch removes this field to reduce the instrumented object size. > > Thanks, > > -Rong
[google][gcc-4_9] Remove unused key field in gcov_fn_info
Hi, This patch is for google/gcc-4_9 branch. The 'key' field in gcov_fn_info is designed to allow gcov function data to be COMDATTed, but the comdat elimination never works. This patch removes this field to reduce the instrumented object size. Thanks, -Rong Removed the unused 'key' field in gcov_fn_info to reduce the instrumented objects size. 2015-09-29 Rong Xu* gcc/coverage.c (build_fn_info_type): Remove 'key' field. (build_fn_info): Ditto. (coverage_obj_fn): Ditto. * libgcc/libgcov.h (struct gcov_fn_info): Ditto. * libgcc/libgcov-driver.c (gcov_compute_histogram): Ditto. (gcov_exit_compute_summary): Ditto. (gcov_exit_merge_gcda): Ditto. (gcov_write_func_counters): Ditto. (gcov_clear): Ditto. * libgcc/libgcov-util.c (tag_function): Ditto. (gcov_merge): Ditto. (gcov_profile_scale): Ditto. (gcov_profile_normalize): Ditto. (compute_one_gcov): Ditto. (gcov_info_count_all_cold): Ditto. Index: gcc/coverage.c === --- gcc/coverage.c (revision 228223) +++ gcc/coverage.c (working copy) @@ -189,7 +189,7 @@ static void read_counts_file (const char *, unsign static tree build_var (tree, tree, int); static void build_fn_info_type (tree, unsigned, tree); static void build_info_type (tree, tree); -static tree build_fn_info (const struct coverage_data *, tree, tree); +static tree build_fn_info (const struct coverage_data *, tree); static tree build_info (tree, tree); static bool coverage_obj_init (void); static vec *coverage_obj_fn @@ -1668,16 +1668,9 @@ build_fn_info_type (tree type, unsigned counters, finish_builtin_struct (ctr_info, "__gcov_ctr_info", fields, NULL_TREE); - /* key */ - field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, - build_pointer_type (build_qualified_type - (gcov_info_type, TYPE_QUAL_CONST))); - fields = field; - /* ident */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); - DECL_CHAIN (field) = fields; fields = field; /* lineno_checksum */ @@ -1705,10 +1698,10 @@ build_fn_info_type (tree type, unsigned counters, /* Returns a CONSTRUCTOR for a gcov_fn_info. DATA is the coverage data for the function and TYPE is the gcov_fn_info - RECORD_TYPE. KEY is the object file key. */ + RECORD_TYPE. */ static tree -build_fn_info (const struct coverage_data *data, tree type, tree key) +build_fn_info (const struct coverage_data *data, tree type) { tree fields = TYPE_FIELDS (type); tree ctr_type; @@ -1716,11 +1709,6 @@ static tree vec *v1 = NULL; vec *v2 = NULL; - /* key */ - CONSTRUCTOR_APPEND_ELT (v1, fields, - build1 (ADDR_EXPR, TREE_TYPE (fields), key)); - fields = DECL_CHAIN (fields); - /* ident */ CONSTRUCTOR_APPEND_ELT (v1, fields, build_int_cstu (get_gcov_unsigned_t (), @@ -2556,7 +2544,7 @@ static vec * coverage_obj_fn (vec *ctor, tree fn, struct coverage_data const *data) { - tree init = build_fn_info (data, gcov_fn_info_type, gcov_info_var); + tree init = build_fn_info (data, gcov_fn_info_type); tree var = build_var (fn, gcov_fn_info_type, -1); DECL_INITIAL (var) = init; Index: libgcc/libgcov-driver.c === --- libgcc/libgcov-driver.c (revision 227984) +++ libgcc/libgcov-driver.c (working copy) @@ -380,7 +380,7 @@ gcov_compute_histogram (struct gcov_summary *sum) { gfi_ptr = gi_ptr->functions[f_ix]; - if (!gfi_ptr || gfi_ptr->key != gi_ptr) + if (!gfi_ptr) continue; ci_ptr = _ptr->ctrs[ctr_info_ix]; @@ -430,9 +430,6 @@ gcov_exit_compute_summary (struct gcov_summary *th { gfi_ptr = gi_ptr->functions[f_ix]; - if (gfi_ptr && gfi_ptr->key != gi_ptr) -gfi_ptr = 0; - crc32 = crc32_unsigned (crc32, gfi_ptr ? gfi_ptr->cfg_checksum : 0); crc32 = crc32_unsigned (crc32, gfi_ptr ? gfi_ptr->lineno_checksum : 0); @@ -688,7 +685,7 @@ gcov_exit_merge_gcda (struct gcov_info *gi_ptr, if (length != GCOV_TAG_FUNCTION_LENGTH) goto read_mismatch; - if (!gfi_ptr || gfi_ptr->key != gi_ptr) + if (!gfi_ptr) { /* This function appears in the other program. We need to buffer the information in order to write @@ -832,10 +829,8 @@ gcov_write_func_counters (struct gcov_info *gi_ptr else { gfi_ptr = gi_ptr->functions[f_ix]; - if (gfi_ptr && gfi_ptr->key == gi_ptr) + if
Re: [google][gcc-4_9] Remove unused key field in gcov_fn_info
ok. David On Tue, Sep 29, 2015 at 4:08 PM, Rong Xuwrote: > You are right. I attached the updated patch to this email. > > On Tue, Sep 29, 2015 at 3:10 PM, Xinliang David Li wrote: >>else >> { >>gfi_ptr = gi_ptr->functions[f_ix]; >> - if (gfi_ptr && gfi_ptr->key == gi_ptr) >> + if (gfi_ptr) >> length = GCOV_TAG_FUNCTION_LENGTH; >> - else >> -length = 0; >> } >> >> The removal of 'else' path seems wrong. >> >> David >> >> >> On Tue, Sep 29, 2015 at 1:46 PM, Rong Xu wrote: >>> Hi, >>> >>> This patch is for google/gcc-4_9 branch. >>> >>> The 'key' field in gcov_fn_info is designed to allow gcov function >>> data to be COMDATTed, but the comdat elimination never works. This >>> patch removes this field to reduce the instrumented object size. >>> >>> Thanks, >>> >>> -Rong
Re: [google][gcc-4_9] Remove unused key field in gcov_fn_info
You are right. I attached the updated patch to this email. On Tue, Sep 29, 2015 at 3:10 PM, Xinliang David Liwrote: >else > { >gfi_ptr = gi_ptr->functions[f_ix]; > - if (gfi_ptr && gfi_ptr->key == gi_ptr) > + if (gfi_ptr) > length = GCOV_TAG_FUNCTION_LENGTH; > - else > -length = 0; > } > > The removal of 'else' path seems wrong. > > David > > > On Tue, Sep 29, 2015 at 1:46 PM, Rong Xu wrote: >> Hi, >> >> This patch is for google/gcc-4_9 branch. >> >> The 'key' field in gcov_fn_info is designed to allow gcov function >> data to be COMDATTed, but the comdat elimination never works. This >> patch removes this field to reduce the instrumented object size. >> >> Thanks, >> >> -Rong Removed the unused 'key' field in gcov_fn_info to reduce the instrumented objects size. 2015-09-29 Rong Xu * gcc/coverage.c (build_fn_info_type): Remove 'key' field. (build_fn_info): Ditto. (coverage_obj_fn): Ditto. * libgcc/libgcov.h (struct gcov_fn_info): Ditto. * libgcc/libgcov-driver.c (gcov_compute_histogram): Ditto. (gcov_exit_compute_summary): Ditto. (gcov_exit_merge_gcda): Ditto. (gcov_write_func_counters): Ditto. (gcov_clear): Ditto. * libgcc/libgcov-util.c (tag_function): Ditto. (gcov_merge): Ditto. (gcov_profile_scale): Ditto. (gcov_profile_normalize): Ditto. (compute_one_gcov): Ditto. (gcov_info_count_all_cold): Ditto. Index: gcc/coverage.c === --- gcc/coverage.c (revision 228223) +++ gcc/coverage.c (working copy) @@ -189,7 +189,7 @@ static void read_counts_file (const char *, unsign static tree build_var (tree, tree, int); static void build_fn_info_type (tree, unsigned, tree); static void build_info_type (tree, tree); -static tree build_fn_info (const struct coverage_data *, tree, tree); +static tree build_fn_info (const struct coverage_data *, tree); static tree build_info (tree, tree); static bool coverage_obj_init (void); static vec *coverage_obj_fn @@ -1668,16 +1668,9 @@ build_fn_info_type (tree type, unsigned counters, finish_builtin_struct (ctr_info, "__gcov_ctr_info", fields, NULL_TREE); - /* key */ - field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, - build_pointer_type (build_qualified_type - (gcov_info_type, TYPE_QUAL_CONST))); - fields = field; - /* ident */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); - DECL_CHAIN (field) = fields; fields = field; /* lineno_checksum */ @@ -1705,10 +1698,10 @@ build_fn_info_type (tree type, unsigned counters, /* Returns a CONSTRUCTOR for a gcov_fn_info. DATA is the coverage data for the function and TYPE is the gcov_fn_info - RECORD_TYPE. KEY is the object file key. */ + RECORD_TYPE. */ static tree -build_fn_info (const struct coverage_data *data, tree type, tree key) +build_fn_info (const struct coverage_data *data, tree type) { tree fields = TYPE_FIELDS (type); tree ctr_type; @@ -1716,11 +1709,6 @@ static tree vec *v1 = NULL; vec *v2 = NULL; - /* key */ - CONSTRUCTOR_APPEND_ELT (v1, fields, - build1 (ADDR_EXPR, TREE_TYPE (fields), key)); - fields = DECL_CHAIN (fields); - /* ident */ CONSTRUCTOR_APPEND_ELT (v1, fields, build_int_cstu (get_gcov_unsigned_t (), @@ -2556,7 +2544,7 @@ static vec * coverage_obj_fn (vec *ctor, tree fn, struct coverage_data const *data) { - tree init = build_fn_info (data, gcov_fn_info_type, gcov_info_var); + tree init = build_fn_info (data, gcov_fn_info_type); tree var = build_var (fn, gcov_fn_info_type, -1); DECL_INITIAL (var) = init; Index: libgcc/libgcov-driver.c === --- libgcc/libgcov-driver.c (revision 227984) +++ libgcc/libgcov-driver.c (working copy) @@ -380,7 +380,7 @@ gcov_compute_histogram (struct gcov_summary *sum) { gfi_ptr = gi_ptr->functions[f_ix]; - if (!gfi_ptr || gfi_ptr->key != gi_ptr) + if (!gfi_ptr) continue; ci_ptr = _ptr->ctrs[ctr_info_ix]; @@ -430,9 +430,6 @@ gcov_exit_compute_summary (struct gcov_summary *th { gfi_ptr = gi_ptr->functions[f_ix]; - if (gfi_ptr && gfi_ptr->key != gi_ptr) -gfi_ptr = 0; - crc32 = crc32_unsigned (crc32, gfi_ptr ? gfi_ptr->cfg_checksum : 0); crc32 = crc32_unsigned (crc32, gfi_ptr ? gfi_ptr->lineno_checksum : 0); @@