Introduce no_profile_instrument_function attribute

PR gcov-profile/68025
	* tree-profile.c (tree_profiling): Respect
	no_profile_instrument_function attribute.
	* doc/extend.texi: Document no_profile_instrument_function
	attribute.
	PR gcov-profile/68025
	* c-common.c (handle_no_profile_instrument_function_attribute):
	PR gcov-profile/68025
	* gcc.dg/no_profile_instrument_function-attr-1.c: New test.

From-SVN: r238811
This commit is contained in:
Martin Liska 2016-07-28 10:45:29 +02:00 committed by Martin Liska
parent 9bd6a6aebf
commit 1225d6b113
7 changed files with 71 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2016-07-28 Martin Liska <mliska@suse.cz>
PR gcov-profile/68025
* tree-profile.c (tree_profiling): Respect
no_profile_instrument_function attribute.
* doc/extend.texi: Document no_profile_instrument_function
attribute.
2016-07-28 Martin Liska <mliska@suse.cz>
PR rtl-optimization/70944

View File

@ -1,3 +1,8 @@
2016-07-28 Martin Liska <mliska@suse.cz>
PR gcov-profile/68025
* c-common.c (handle_no_profile_instrument_function_attribute):
2016-07-27 Bernd Edlinger <bernd.edlinger@hotmail.de>
* c-common.c (check_user_alignment): Use LOG2_BITS_PER_UNIT instead of

View File

@ -353,6 +353,8 @@ static tree handle_tls_model_attribute (tree *, tree, tree, int,
bool *);
static tree handle_no_instrument_function_attribute (tree *, tree,
tree, int, bool *);
static tree handle_no_profile_instrument_function_attribute (tree *, tree,
tree, int, bool *);
static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
@ -717,6 +719,9 @@ const struct attribute_spec c_common_attribute_table[] =
{ "no_instrument_function", 0, 0, true, false, false,
handle_no_instrument_function_attribute,
false },
{ "no_profile_instrument_function", 0, 0, true, false, false,
handle_no_profile_instrument_function_attribute,
false },
{ "malloc", 0, 0, true, false, false,
handle_malloc_attribute, false },
{ "returns_twice", 0, 0, true, false, false,
@ -8293,6 +8298,22 @@ handle_no_instrument_function_attribute (tree *node, tree name,
return NULL_TREE;
}
/* Handle a "no_profile_instrument_function" attribute; arguments as in
struct attribute_spec.handler. */
static tree
handle_no_profile_instrument_function_attribute (tree *node, tree name, tree,
int, bool *no_add_attrs)
{
if (TREE_CODE (*node) != FUNCTION_DECL)
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
*no_add_attrs = true;
}
return NULL_TREE;
}
/* Handle a "malloc" attribute; arguments as in
struct attribute_spec.handler. */

View File

@ -2853,6 +2853,12 @@ If @option{-finstrument-functions} is given, profiling function calls are
generated at entry and exit of most user-compiled functions.
Functions with this attribute are not so instrumented.
@item no_profile_instrument_function
@cindex @code{no_profile_instrument_function} function attribute
The @code{no_profile_instrument_function} attribute on functions is used
to inform the compiler that it should not process any profile feedback based
optimization code instrumentation.
@item no_reorder
@cindex @code{no_reorder} function attribute
Do not reorder functions or variables marked @code{no_reorder}

View File

@ -1,3 +1,8 @@
2016-07-28 Martin Liska <mliska@suse.cz>
PR gcov-profile/68025
* gcc.dg/no_profile_instrument_function-attr-1.c: New test.
2016-07-28 Martin Liska <mliska@suse.cz>
* g++.dg/vect/pr70944.cc: New test.

View File

@ -0,0 +1,23 @@
/* { dg-options "-O2 -fprofile-generate -fdump-tree-optimized" } */
__attribute__ ((no_profile_instrument_function))
int foo()
{
return 0;
}
__attribute__ ((no_profile_instrument_function))
int bar()
{
return 1;
}
int main ()
{
return foo ();
}
/* { dg-final { scan-tree-dump-times "__gcov0\\.main.* = PROF_edge_counter" 1 "optimized"} } */
/* { dg-final { scan-tree-dump-times "__gcov_indirect_call_profiler_v2" 1 "optimized" } } */
/* { dg-final { scan-tree-dump-times "__gcov_time_profiler" 1 "optimized" } } */
/* { dg-final { scan-tree-dump-times "__gcov_init" 1 "optimized" } } */

View File

@ -524,6 +524,9 @@ tree_profiling (void)
if (DECL_SOURCE_LOCATION (node->decl) == BUILTINS_LOCATION)
continue;
if (lookup_attribute ("no_profile_instrument_function",
DECL_ATTRIBUTES (node->decl)))
continue;
/* Do not instrument extern inline functions when testing coverage.
While this is not perfectly consistent (early inlined extern inlines
will get acocunted), testsuite expects that. */