Commit 962e88a9 by Jan Hubicka Committed by Jan Hubicka

coverage.c (get_coverage_counts): Use current_function_decl.


	* coverage.c (get_coverage_counts): Use current_function_decl.
	* profile.c (read_thunk_profile): New function.
	(branch_prob): Add THUNK parameter.
	* tree-profile.c (tree_profiling): Handle thunks.
	* value-prof.c (init_node_map): Handle thunks.
	* value-prof.h (branch_prob): Upate prototype.
	(read_thunk_profile): Declare.

	* g++.dg/tree-prof/devirt.C: Update testcase.

From-SVN: r267495
parent a5544970
2019-01-01 Jan Hubicka <hubicka@ucw.cz>
* coverage.c (get_coverage_counts): Use current_function_decl.
* profile.c (read_thunk_profile): New function.
(branch_prob): Add THUNK parameter.
* tree-profile.c (tree_profiling): Handle thunks.
* value-prof.c (init_node_map): Handle thunks.
* value-prof.h (branch_prob): Upate prototype.
(read_thunk_profile): Declare.
2019-01-01 Jakub Jelinek <jakub@redhat.com>
Update copyright years.
......
......@@ -329,7 +329,7 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
else
{
gcc_assert (coverage_node_map_initialized_p ());
elt.ident = cgraph_node::get (cfun->decl)->profile_id;
elt.ident = cgraph_node::get (current_function_decl)->profile_id;
}
elt.ctr = counter;
entry = counts_hash->find (&elt);
......
2019-01-01 Jan Hubicka <hubicka@ucw.cz>
* g++.dg/tree-prof/devirt.C: Update testcase.
2019-01-01 Jakub Jelinek <jakub@redhat.com>
Update copyright years.
......
......@@ -119,5 +119,5 @@ main ()
__builtin_abort ();
}
/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::_ZThn16" 3 "dom3" } } */
/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::AddRef" 3 "dom3" } } */
/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::_ZThn16" 1 "dom3" } } */
/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::AddRef" 1 "dom3" } } */
......@@ -739,7 +739,8 @@ tree_profiling (void)
FOR_EACH_DEFINED_FUNCTION (node)
{
if (!gimple_has_body_p (node->decl))
bool thunk = false;
if (!gimple_has_body_p (node->decl) && !node->thunk.thunk_p)
continue;
/* Don't profile functions produced for builtin stuff. */
......@@ -760,22 +761,43 @@ tree_profiling (void)
if (!include_source_file_for_profile (file))
continue;
if (node->thunk.thunk_p)
{
/* We can not expand variadic thunks to Gimple. */
if (stdarg_p (TREE_TYPE (node->decl)))
continue;
thunk = true;
/* When generate profile, expand thunk to gimple so it can be
instrumented same way as other functions. */
if (profile_arc_flag)
node->expand_thunk (false, true);
/* Read cgraph profile but keep function as thunk at profile-use
time. */
else
{
read_thunk_profile (node);
continue;
}
}
push_cfun (DECL_STRUCT_FUNCTION (node->decl));
if (dump_file)
dump_function_header (dump_file, cfun->decl, dump_flags);
/* Local pure-const may imply need to fixup the cfg. */
if (execute_fixup_cfg () & TODO_cleanup_cfg)
if (gimple_has_body_p (node->decl)
&& (execute_fixup_cfg () & TODO_cleanup_cfg))
cleanup_tree_cfg ();
branch_prob ();
branch_prob (thunk);
if (! flag_branch_probabilities
&& flag_profile_values)
gimple_gen_ic_func_profiler ();
if (flag_branch_probabilities
&& !thunk
&& flag_profile_values
&& flag_value_profile_transformations)
gimple_value_profile_transformations ();
......
......@@ -1188,7 +1188,7 @@ init_node_map (bool local)
cgraph_node_map = new hash_map<profile_id_hash, cgraph_node *>;
FOR_EACH_DEFINED_FUNCTION (n)
if (n->has_gimple_body_p ())
if (n->has_gimple_body_p () || n->thunk.thunk_p)
{
cgraph_node **val;
if (local)
......
......@@ -112,7 +112,8 @@ extern struct cgraph_node* find_func_by_profile_id (int func_id);
/* In profile.c. */
extern void init_branch_prob (void);
extern void branch_prob (void);
extern void branch_prob (bool);
extern void read_thunk_profile (struct cgraph_node *);
extern void end_branch_prob (void);
#endif /* GCC_VALUE_PROF_H */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment