From: Richard Henderson Date: Sat, 11 May 2002 00:32:01 +0000 (-0700) Subject: final.c (end_final): Tidy whitespace. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2292e8fc45a6908895fe5a14566879e600f8a42b;p=gcc.git final.c (end_final): Tidy whitespace. * final.c (end_final): Tidy whitespace. Don't honor flag_pack_struct. Convert integers constants as needed. Replace "nwords" field with "sizeof_bb". (final): Save profile data if cfun->arc_profile, not profile_arc_flag. * function.h: Fix typo in comment. * libgcc2.c (struct bb): Replace "nwords" with "sizeof_bb". From-SVN: r53374 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 192b2be851d..993063461cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-05-10 Richard Henderson + + * final.c (end_final): Tidy whitespace. Don't honor flag_pack_struct. + Convert integers constants as needed. Replace "nwords" field with + "sizeof_bb". + (final): Save profile data if cfun->arc_profile, not profile_arc_flag. + * function.h: Fix typo in comment. + * libgcc2.c (struct bb): Replace "nwords" with "sizeof_bb". + 2002-05-10 Roger Sayle * fold-const.c (build_range_check): Optimize (c>=1) && (c<=127) diff --git a/gcc/final.c b/gcc/final.c index 57e94e78e4f..13e2aca11a1 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -258,14 +258,13 @@ end_final (filename) tree string_type, string_cst; tree structure_decl, structure_value, structure_pointer_type; tree field_decl, decl_chain, value_chain; - tree nwords_field_value, domain_type; + tree sizeof_field_value, domain_type; /* Build types. */ string_type = build_pointer_type (char_type_node); /* Libgcc2 bb structure. */ structure_decl = make_node (RECORD_TYPE); - TYPE_PACKED (structure_decl) = flag_pack_struct; structure_pointer_type = build_pointer_type (structure_decl); /* Output the main header, of 7 words: @@ -284,96 +283,103 @@ end_final (filename) decl_chain = build_decl (FIELD_DECL, get_identifier ("zero_word"), long_integer_type_node); - value_chain = build_tree_list (decl_chain, integer_zero_node); + value_chain = build_tree_list (decl_chain, + convert (long_integer_type_node, + integer_zero_node)); /* Address of filename. */ { - char *cwd = getpwd (); - int da_filename_len = strlen (filename) + strlen (cwd) + 4 + 1; - char *da_filename = (char *) alloca (da_filename_len); + char *cwd, *da_filename; + int da_filename_len; + field_decl = + build_decl (FIELD_DECL, get_identifier ("filename"), string_type); + TREE_CHAIN (field_decl) = decl_chain; + decl_chain = field_decl; + + cwd = getpwd (); + da_filename_len = strlen (filename) + strlen (cwd) + 4 + 1; + da_filename = (char *) alloca (da_filename_len); strcpy (da_filename, cwd); strcat (da_filename, "/"); strcat (da_filename, filename); strip_off_ending (da_filename, da_filename_len - 3); strcat (da_filename, ".da"); - field_decl = - build_decl (FIELD_DECL, get_identifier ("filename"), string_type); - string_cst = build_string (strlen (da_filename) + 1, da_filename); - domain_type = build_index_type (build_int_2 (strlen (da_filename) + 1, - 0)); - TREE_TYPE (string_cst) = - build_array_type (char_type_node, domain_type); + da_filename_len = strlen (da_filename); + string_cst = build_string (da_filename_len + 1, da_filename); + domain_type = build_index_type (build_int_2 (da_filename_len, 0)); + TREE_TYPE (string_cst) + = build_array_type (char_type_node, domain_type); value_chain = tree_cons (field_decl, build1 (ADDR_EXPR, string_type, string_cst), value_chain); - TREE_CHAIN (field_decl) = decl_chain; - decl_chain = field_decl; } /* Table of counts. */ { tree gcov_type_type = make_unsigned_type (GCOV_TYPE_SIZE); tree gcov_type_pointer_type = build_pointer_type (gcov_type_type); - tree gcov_type_array_type, gcov_type_array_pointer_type; - tree domain_tree = build_index_type (build_int_2 - (profile_info. - count_instrumented_edges - 1, - 0)); + tree domain_tree + = build_index_type (build_int_2 (profile_info. + count_instrumented_edges - 1, 0)); + tree gcov_type_array_type + = build_array_type (gcov_type_type, domain_tree); + tree gcov_type_array_pointer_type + = build_pointer_type (gcov_type_array_type); tree counts_table; - gcov_type_array_type = build_array_type (gcov_type_type, domain_tree); - gcov_type_array_pointer_type = - build_pointer_type (gcov_type_array_type); + field_decl = + build_decl (FIELD_DECL, get_identifier ("counts"), + gcov_type_pointer_type); + TREE_CHAIN (field_decl) = decl_chain; + decl_chain = field_decl; /* No values. */ - counts_table = - build (VAR_DECL, gcov_type_array_type, NULL_TREE, NULL_TREE); + counts_table + = build (VAR_DECL, gcov_type_array_type, NULL_TREE, NULL_TREE); TREE_STATIC (counts_table) = 1; ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 2); DECL_NAME (counts_table) = get_identifier (name); assemble_variable (counts_table, 0, 0, 0); - field_decl = - build_decl (FIELD_DECL, get_identifier ("counts"), - gcov_type_pointer_type); value_chain = tree_cons (field_decl, build1 (ADDR_EXPR, gcov_type_array_pointer_type, counts_table), value_chain); - TREE_CHAIN (field_decl) = decl_chain; - decl_chain = field_decl; } /* Count of the # of instrumented arcs. */ - field_decl = - build_decl (FIELD_DECL, get_identifier ("ncounts"), - long_integer_type_node); + field_decl + = build_decl (FIELD_DECL, get_identifier ("ncounts"), + long_integer_type_node); + TREE_CHAIN (field_decl) = decl_chain; + decl_chain = field_decl; + value_chain = tree_cons (field_decl, convert (long_integer_type_node, build_int_2 (profile_info. count_instrumented_edges, 0)), value_chain); + /* Pointer to the next bb. */ + field_decl + = build_decl (FIELD_DECL, get_identifier ("next"), + structure_pointer_type); TREE_CHAIN (field_decl) = decl_chain; decl_chain = field_decl; - /* Pointer to the next bb. */ - field_decl = - build_decl (FIELD_DECL, get_identifier ("next"), - structure_pointer_type); value_chain = tree_cons (field_decl, null_pointer_node, value_chain); - TREE_CHAIN (field_decl) = decl_chain; - decl_chain = field_decl; - /* Number of words. We'll set this after entire structure is laid out. */ - field_decl = - build_decl (FIELD_DECL, get_identifier ("nwords"), - long_integer_type_node); - value_chain = nwords_field_value = - tree_cons (field_decl, NULL, value_chain); + /* sizeof(struct bb). We'll set this after entire structure + is laid out. */ + field_decl + = build_decl (FIELD_DECL, get_identifier ("sizeof_bb"), + long_integer_type_node); TREE_CHAIN (field_decl) = decl_chain; decl_chain = field_decl; + sizeof_field_value = tree_cons (field_decl, NULL, value_chain); + value_chain = sizeof_field_value; + /* struct bb_function []. */ { struct function_list *item; @@ -388,16 +394,17 @@ end_final (filename) tree field_value, field_value_chain; bb_fn_struct_type = make_node (RECORD_TYPE); - TYPE_PACKED (bb_fn_struct_type) = flag_pack_struct; checksum_field = build_decl (FIELD_DECL, get_identifier ("checksum"), long_integer_type_node); - arc_count_field = - build_decl (FIELD_DECL, get_identifier ("arc_count"), - integer_type_node); + + arc_count_field + = build_decl (FIELD_DECL, get_identifier ("arc_count"), + integer_type_node); TREE_CHAIN (checksum_field) = arc_count_field; - name_field = - build_decl (FIELD_DECL, get_identifier ("name"), string_type); + + name_field + = build_decl (FIELD_DECL, get_identifier ("name"), string_type); TREE_CHAIN (arc_count_field) = name_field; TYPE_FIELDS (bb_fn_struct_type) = checksum_field; @@ -411,10 +418,10 @@ end_final (filename) domain = build_index_type (build_int_2 (num_nodes, 0)); bb_fn_struct_pointer_type = build_pointer_type (bb_fn_struct_type); - bb_fn_struct_array_type = build_array_type (bb_fn_struct_type, - domain); - bb_fn_struct_array_pointer_type = - build_pointer_type (bb_fn_struct_array_type); + bb_fn_struct_array_type + = build_array_type (bb_fn_struct_type, domain); + bb_fn_struct_array_pointer_type + = build_pointer_type (bb_fn_struct_array_type); layout_type (bb_fn_struct_type); layout_type (bb_fn_struct_pointer_type); @@ -423,38 +430,35 @@ end_final (filename) for (item = functions_head; item != 0; item = item->next) { + size_t name_len; + /* create constructor for structure. */ - field_value_chain = build_tree_list (checksum_field, - convert - (long_integer_type_node, - build_int_2 (item-> - cfg_checksum, - 0))); - field_value_chain = - tree_cons (arc_count_field, - convert (integer_type_node, - build_int_2 (item->count_edges, 0)), - field_value_chain); - - string_cst = build_string (strlen (item->name) + 1, item->name); - domain_type = build_index_type (build_int_2 (strlen (item->name) + - 1, 0)); - TREE_TYPE (string_cst) = build_array_type (char_type_node, - domain_type); + field_value_chain + = build_tree_list (checksum_field, + convert (long_integer_type_node, + build_int_2 (item->cfg_checksum, 0))); + field_value_chain + = tree_cons (arc_count_field, + convert (integer_type_node, + build_int_2 (item->count_edges, 0)), + field_value_chain); + + name_len = strlen (item->name); + string_cst = build_string (name_len + 1, item->name); + domain_type = build_index_type (build_int_2 (name_len, 0)); + TREE_TYPE (string_cst) + = build_array_type (char_type_node, domain_type); field_value_chain = tree_cons (name_field, build1 (ADDR_EXPR, string_type, string_cst), field_value_chain); /* Add to chain. */ - - array_value_chain = tree_cons (NULL_TREE, - build (CONSTRUCTOR, - bb_fn_struct_type, - NULL_TREE, - nreverse - (field_value_chain)), - array_value_chain); + array_value_chain + = tree_cons (NULL_TREE, build (CONSTRUCTOR, + bb_fn_struct_type, NULL_TREE, + nreverse (field_value_chain)), + array_value_chain); } /* Add terminator. */ @@ -469,10 +473,9 @@ end_final (filename) /* Create constructor for array. */ - - field_decl = - build_decl (FIELD_DECL, get_identifier ("function_infos"), - bb_fn_struct_pointer_type); + field_decl + = build_decl (FIELD_DECL, get_identifier ("function_infos"), + bb_fn_struct_pointer_type); value_chain = tree_cons (field_decl, build1 (ADDR_EXPR, bb_fn_struct_array_pointer_type, @@ -486,37 +489,26 @@ end_final (filename) decl_chain = field_decl; } - /* Finish structure. */ TYPE_FIELDS (structure_decl) = nreverse (decl_chain); layout_type (structure_decl); - structure_value = - build (VAR_DECL, structure_decl, NULL_TREE, NULL_TREE); - DECL_INITIAL (structure_value) = - build (CONSTRUCTOR, structure_decl, NULL_TREE, - nreverse (value_chain)); + structure_value + = build (VAR_DECL, structure_decl, NULL_TREE, NULL_TREE); + DECL_INITIAL (structure_value) + = build (CONSTRUCTOR, structure_decl, NULL_TREE, + nreverse (value_chain)); TREE_STATIC (structure_value) = 1; ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 0); DECL_NAME (structure_value) = get_identifier (name); - /* Set number of words in this structure. */ - TREE_VALUE (nwords_field_value) = - build_int_2 (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (structure_decl)) / - (INT_TYPE_SIZE / BITS_PER_UNIT), 0); + /* Size of this structure. */ + TREE_VALUE (sizeof_field_value) + = convert (long_integer_type_node, + build_int_2 (int_size_in_bytes (structure_decl), 0)); /* Build structure. */ assemble_variable (structure_value, 0, 0, 0); - - /* Offset to table of arc counters for thread-safe profiling. */ - { - tree table_offset_var = make_node (VAR_DECL); - TREE_TYPE (table_offset_var) = build_pointer_type (integer_type_node); - DECL_INITIAL (table_offset_var) = integer_zero_node; - DECL_NAME (table_offset_var) = get_identifier (".LPBF0"); - TREE_STATIC (table_offset_var) = 1; - assemble_variable (table_offset_var, 0, 0, 0); - } } } @@ -1931,22 +1923,20 @@ final (first, file, optimize, prescan) } /* Store function names for edge-profiling. */ + /* ??? Probably should re-use the existing struct function. */ - if (profile_arc_flag) - { - struct function_list *new_item = xmalloc (sizeof (struct function_list)); - - /* Add function to linked list. */ - new_item->next = 0; - *functions_tail = new_item; - functions_tail = &new_item->next; - - /* Set values. */ - new_item->cfg_checksum = profile_info.current_function_cfg_checksum; - new_item->count_edges = profile_info.count_edges_instrumented_now; - new_item->name = xstrdup (current_function_name); - - } + if (cfun->arc_profile) + { + struct function_list *new_item = xmalloc (sizeof (struct function_list)); + + *functions_tail = new_item; + functions_tail = &new_item->next; + + new_item->next = 0; + new_item->name = xstrdup (current_function_name); + new_item->cfg_checksum = profile_info.current_function_cfg_checksum; + new_item->count_edges = profile_info.count_edges_instrumented_now; + } free (line_note_exists); line_note_exists = NULL; diff --git a/gcc/function.h b/gcc/function.h index 2a566641eca..bc789c8181a 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -437,7 +437,7 @@ struct function generated. */ unsigned int instrument_entry_exit : 1; - /* Nonzero if no profiling should be done for the function. */ + /* Nonzero if arc profiling should be done for the function. */ unsigned int arc_profile : 1; /* Nonzero if profiling code should be generated. */ diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 6c004a59a3b..80710e2623a 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -1254,7 +1254,7 @@ struct bb struct bb *next; /* Older GCC's did not emit these fields. */ - long nwords; + long sizeof_bb; struct bb_function_info *function_infos; };