mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
9bd6a6aebf
commit
1225d6b113
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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" } } */
|
||||
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue