Mercurial > hg > CbC > CbC_gcc
diff gcc/auto-profile.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/auto-profile.c Thu Oct 25 08:08:40 2018 +0900 +++ b/gcc/auto-profile.c Thu Oct 25 10:21:07 2018 +0900 @@ -1,5 +1,5 @@ /* Read and annotate call graph profile from the auto profile data file. - Copyright (C) 2014-2017 Free Software Foundation, Inc. + Copyright (C) 2014-2018 Free Software Foundation, Inc. Contributed by Dehao Chen (dehao@google.com) This file is part of GCC. @@ -318,8 +318,8 @@ /* Store the AutoFDO source profile. */ static autofdo_source_profile *afdo_source_profile; -/* gcov_ctr_summary structure to store the profile_info. */ -static struct gcov_ctr_summary *afdo_profile_info; +/* gcov_summary structure to store the profile_info. */ +static gcov_summary *afdo_profile_info; /* Helper functions. */ @@ -354,17 +354,10 @@ static tree get_function_decl_from_block (tree block) { - tree decl; - - if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) == UNKNOWN_LOCATION) + if (!inlined_function_outer_scope_p (block)) return NULL_TREE; - for (decl = BLOCK_ABSTRACT_ORIGIN (block); - decl && (TREE_CODE (decl) == BLOCK); - decl = BLOCK_ABSTRACT_ORIGIN (decl)) - if (TREE_CODE (decl) == FUNCTION_DECL) - break; - return decl; + return BLOCK_ABSTRACT_ORIGIN (block); } /* Store inline stack for STMT in STACK. */ @@ -477,7 +470,7 @@ ret = get_index (lang_hooks.dwarf_name (decl, 0)); if (ret != -1) return ret; - if (DECL_ABSTRACT_ORIGIN (decl)) + if (DECL_ABSTRACT_ORIGIN (decl) && DECL_ABSTRACT_ORIGIN (decl) != decl) return get_index_by_decl (DECL_ABSTRACT_ORIGIN (decl)); return -1; @@ -852,7 +845,7 @@ { if (gcov_read_unsigned () != GCOV_TAG_AFDO_FUNCTION) { - inform (0, "Not expected TAG."); + inform (UNKNOWN_LOCATION, "Not expected TAG."); return false; } @@ -867,7 +860,6 @@ function_instance::function_instance_stack stack; function_instance *s = function_instance::read_function_instance ( &stack, gcov_read_counter ()); - afdo_profile_info->sum_all += s->total_count (); map_[s->name ()] = s; } return true; @@ -958,23 +950,6 @@ /* autofdo_module_profile. */ fake_read_autofdo_module_profile (); - - /* Read in the working set. */ - if (gcov_read_unsigned () != GCOV_TAG_AFDO_WORKING_SET) - { - error ("cannot read working set from %s", auto_profile_file); - return; - } - - /* Skip the length of the section. */ - gcov_read_unsigned (); - gcov_working_set_t set[128]; - for (unsigned i = 0; i < 128; i++) - { - set[i].num_counters = gcov_read_unsigned (); - set[i].min_counter = gcov_read_counter (); - } - add_working_set (set); } /* From AutoFDO profiles, find values inside STMT for that we want to measure @@ -1061,7 +1036,7 @@ /* FIXME: Count should be initialized. */ struct cgraph_edge *new_edge = indirect_edge->make_speculative (direct_call, - profile_count::uninitialized (), 0); + profile_count::uninitialized ()); new_edge->redirect_call_stmt_to_callee (); gimple_remove_histogram_value (cfun, stmt, hist); inline_call (new_edge, true, NULL, NULL, false); @@ -1571,7 +1546,7 @@ if (max_count > profile_count::zero ()) { afdo_calculate_branch_prob (&annotated_bb, &annotated_edge); - counts_to_freqs (); + update_max_bb_count (); profile_status_for_fn (cfun) = PROFILE_READ; } if (flag_value_profile_transformations) @@ -1682,11 +1657,9 @@ if (auto_profile_file == NULL) auto_profile_file = DEFAULT_AUTO_PROFILE_FILE; - autofdo::afdo_profile_info = (struct gcov_ctr_summary *)xcalloc ( - 1, sizeof (struct gcov_ctr_summary)); + autofdo::afdo_profile_info = XNEW (gcov_summary); autofdo::afdo_profile_info->runs = 1; autofdo::afdo_profile_info->sum_max = 0; - autofdo::afdo_profile_info->sum_all = 0; /* Read the profile from the profile file. */ autofdo::read_profile (); @@ -1713,7 +1686,7 @@ if (count > 0) { bool is_hot; - const struct gcov_ctr_summary *saved_profile_info = profile_info; + gcov_summary *saved_profile_info = profile_info; /* At early inline stage, profile_info is not set yet. We need to temporarily set it to afdo_profile_info to calculate hotness. */ profile_info = autofdo::afdo_profile_info;