* [PATCH RFA] timevar: Add auto_cond_timevar class
@ 2021-10-18 14:22 Jason Merrill
2021-10-19 6:53 ` Richard Biener
0 siblings, 1 reply; 2+ messages in thread
From: Jason Merrill @ 2021-10-18 14:22 UTC (permalink / raw)
To: gcc-patches
The auto_timevar sentinel class for starting and stopping timevars was added
in 2014, but doesn't work for the many uses of timevar_cond_start/stop in
the C++ front end. So let's add one that does.
This allows us to remove a lot of wrapper functions that were just used to
call timevar_cond_stop on all exits from the function.
Tested x86_64-pc-linux-gnu, OK for trunk?
gcc/ChangeLog:
* timevar.h (class auto_cond_timevar): New.
gcc/cp/ChangeLog:
* call.c
* decl.c
* name-lookup.c:
Use auto_cond_timevar instead of timevar_cond_start/stop.
Remove wrapper functions.
---
gcc/timevar.h | 46 ++++++++-
gcc/cp/call.c | 106 +++++--------------
gcc/cp/decl.c | 51 +++------
gcc/cp/name-lookup.c | 240 ++++++++++++-------------------------------
4 files changed, 150 insertions(+), 293 deletions(-)
diff --git a/gcc/timevar.h b/gcc/timevar.h
index 72e31adb9e6..ccaa42e5904 100644
--- a/gcc/timevar.h
+++ b/gcc/timevar.h
@@ -247,13 +247,53 @@ class auto_timevar
m_timer->pop (m_tv);
}
- private:
+ // Disallow copies.
+ auto_timevar (const auto_timevar &) = delete;
- // Private to disallow copies.
- auto_timevar (const auto_timevar &);
+ private:
+ timer *m_timer;
+ timevar_id_t m_tv;
+};
+
+// As above, but use cond_start/stop.
+class auto_cond_timevar
+{
+ public:
+ auto_cond_timevar (timer *t, timevar_id_t tv)
+ : m_timer (t),
+ m_tv (tv)
+ {
+ start ();
+ }
+
+ explicit auto_cond_timevar (timevar_id_t tv)
+ : m_timer (g_timer)
+ , m_tv (tv)
+ {
+ start ();
+ }
+
+ ~auto_cond_timevar ()
+ {
+ if (m_timer && !already_running)
+ m_timer->cond_stop (m_tv);
+ }
+
+ // Disallow copies.
+ auto_cond_timevar (const auto_cond_timevar &) = delete;
+
+ private:
+ void start()
+ {
+ if (m_timer)
+ already_running = m_timer->cond_start (m_tv);
+ else
+ already_running = false;
+ }
timer *m_timer;
timevar_id_t m_tv;
+ bool already_running;
};
extern void print_time (const char *, long);
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index c5601d96ab8..80e618622fb 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4436,7 +4436,7 @@ build_user_type_conversion (tree totype, tree expr, int flags,
struct z_candidate *cand;
tree ret;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
+ auto_cond_timevar tv (TV_OVERLOAD);
cand = build_user_type_conversion_1 (totype, expr, flags, complain);
if (cand)
@@ -4452,7 +4452,6 @@ build_user_type_conversion (tree totype, tree expr, int flags,
else
ret = NULL_TREE;
- timevar_cond_stop (TV_OVERLOAD, subtime);
return ret;
}
@@ -4692,7 +4691,7 @@ perform_overload_resolution (tree fn,
tree explicit_targs;
int template_only;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
+ auto_cond_timevar tv (TV_OVERLOAD);
explicit_targs = NULL_TREE;
template_only = 0;
@@ -4724,7 +4723,6 @@ perform_overload_resolution (tree fn,
else
cand = NULL;
- timevar_cond_stop (TV_OVERLOAD, subtime);
return cand;
}
@@ -4989,8 +4987,8 @@ build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
/* Build a new call to operator(). This may change ARGS. */
-static tree
-build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
+tree
+build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
{
struct z_candidate *candidates = 0, *cand;
tree fns, convs, first_mem_arg = NULL_TREE;
@@ -4998,6 +4996,8 @@ build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
tree result = NULL_TREE;
void *p;
+ auto_cond_timevar tv (TV_OVERLOAD);
+
obj = mark_lvalue_use (obj);
if (error_operand_p (obj))
@@ -5127,18 +5127,6 @@ build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
return result;
}
-/* Wrapper for above. */
-
-tree
-build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
-{
- tree ret;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
- ret = build_op_call_1 (obj, args, complain);
- timevar_cond_stop (TV_OVERLOAD, subtime);
- return ret;
-}
-
/* Called by op_error to prepare format strings suitable for the error
function. It concatenates a prefix (controlled by MATCH), ERRMSG,
and a suffix (controlled by NTYPES). */
@@ -5330,10 +5318,10 @@ conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
/* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
arguments to the conditional expression. */
-static tree
-build_conditional_expr_1 (const op_location_t &loc,
- tree arg1, tree arg2, tree arg3,
- tsubst_flags_t complain)
+tree
+build_conditional_expr (const op_location_t &loc,
+ tree arg1, tree arg2, tree arg3,
+ tsubst_flags_t complain)
{
tree arg2_type;
tree arg3_type;
@@ -5345,6 +5333,8 @@ build_conditional_expr_1 (const op_location_t &loc,
void *p;
tree orig_arg2, orig_arg3;
+ auto_cond_timevar tv (TV_OVERLOAD);
+
/* As a G++ extension, the second argument to the conditional can be
omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
c'.) If the second operand is omitted, make sure it is
@@ -5410,8 +5400,8 @@ build_conditional_expr_1 (const op_location_t &loc,
&& !VECTOR_TYPE_P (arg3_type))
{
/* Rely on the error messages of the scalar version. */
- tree scal = build_conditional_expr_1 (loc, integer_one_node,
- orig_arg2, orig_arg3, complain);
+ tree scal = build_conditional_expr (loc, integer_one_node,
+ orig_arg2, orig_arg3, complain);
if (scal == error_mark_node)
return error_mark_node;
tree stype = TREE_TYPE (scal);
@@ -5968,20 +5958,6 @@ build_conditional_expr_1 (const op_location_t &loc,
return result;
}
-/* Wrapper for above. */
-
-tree
-build_conditional_expr (const op_location_t &loc,
- tree arg1, tree arg2, tree arg3,
- tsubst_flags_t complain)
-{
- tree ret;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
- ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
- timevar_cond_stop (TV_OVERLOAD, subtime);
- return ret;
-}
-
/* OPERAND is an operand to an expression. Perform necessary steps
required before using it. If OPERAND is NULL_TREE, NULL_TREE is
returned. */
@@ -6483,10 +6459,10 @@ add_operator_candidates (z_candidate **candidates,
return NULL_TREE;
}
-static tree
-build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
- tree arg1, tree arg2, tree arg3, tree *overload,
- tsubst_flags_t complain)
+tree
+build_new_op (const op_location_t &loc, enum tree_code code, int flags,
+ tree arg1, tree arg2, tree arg3, tree *overload,
+ tsubst_flags_t complain)
{
struct z_candidate *candidates = 0, *cand;
vec<tree, va_gc> *arglist;
@@ -6500,6 +6476,8 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
bool strict_p;
bool any_viable_p;
+ auto_cond_timevar tv (TV_OVERLOAD);
+
if (error_operand_p (arg1)
|| error_operand_p (arg2)
|| error_operand_p (arg3))
@@ -6635,8 +6613,8 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
code = PREINCREMENT_EXPR;
else
code = PREDECREMENT_EXPR;
- result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
- NULL_TREE, overload, complain);
+ result = build_new_op (loc, code, flags, arg1, NULL_TREE,
+ NULL_TREE, overload, complain);
break;
/* The caller will deal with these. */
@@ -6958,21 +6936,6 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
return NULL_TREE;
}
-/* Wrapper for above. */
-
-tree
-build_new_op (const op_location_t &loc, enum tree_code code, int flags,
- tree arg1, tree arg2, tree arg3,
- tree *overload, tsubst_flags_t complain)
-{
- tree ret;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
- ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
- overload, complain);
- timevar_cond_stop (TV_OVERLOAD, subtime);
- return ret;
-}
-
/* CALL was returned by some call-building function; extract the actual
CALL_EXPR from any bits that have been tacked on, e.g. by
convert_from_reference. */
@@ -10670,10 +10633,10 @@ complain_about_no_candidates_for_method_call (tree instance,
be set, upon return, to the function called. ARGS may be NULL.
This may change ARGS. */
-static tree
-build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
- tree conversion_path, int flags,
- tree *fn_p, tsubst_flags_t complain)
+tree
+build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
+ tree conversion_path, int flags,
+ tree *fn_p, tsubst_flags_t complain)
{
struct z_candidate *candidates = 0, *cand;
tree explicit_targs = NULL_TREE;
@@ -10693,6 +10656,8 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
vec<tree, va_gc> *orig_args = NULL;
void *p;
+ auto_cond_timevar tv (TV_OVERLOAD);
+
gcc_assert (instance != NULL_TREE);
/* We don't know what function we're going to call, yet. */
@@ -11072,21 +11037,6 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
return call;
}
-/* Wrapper for above. */
-
-tree
-build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
- tree conversion_path, int flags,
- tree *fn_p, tsubst_flags_t complain)
-{
- tree ret;
- bool subtime = timevar_cond_start (TV_OVERLOAD);
- ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
- fn_p, complain);
- timevar_cond_stop (TV_OVERLOAD, subtime);
- return ret;
-}
-
/* Returns true iff standard conversion sequence ICS1 is a proper
subsequence of ICS2. */
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 242429d9ef4..2ff3845dcd4 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -597,7 +597,7 @@ poplevel (int keep, int reverse, int functionbody)
tree decl;
scope_kind kind;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
restart:
block = NULL_TREE;
@@ -829,7 +829,6 @@ poplevel (int keep, int reverse, int functionbody)
if (kind == sk_cleanup)
goto restart;
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return block;
}
@@ -908,7 +907,7 @@ static GTY((deletable)) vec<tree, va_gc> *local_entities;
void
determine_local_discriminator (tree decl)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
retrofit_lang_decl (decl);
tree ctx = DECL_CONTEXT (decl);
tree name = (TREE_CODE (decl) == TYPE_DECL
@@ -943,8 +942,6 @@ determine_local_discriminator (tree decl)
local_entities->quick_push (decl);
local_entities->quick_push (name);
}
-
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
}
\f
@@ -3277,6 +3274,8 @@ named_label_hash::equal (const value_type entry, compare_type name)
static named_label_entry *
lookup_label_1 (tree id, bool making_local_p)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
/* You can't use labels at global scope. */
if (current_function_decl == NULL_TREE)
{
@@ -3339,18 +3338,14 @@ lookup_label_1 (tree id, bool making_local_p)
tree
lookup_label (tree id)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
named_label_entry *ent = lookup_label_1 (id, false);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return ent ? ent->label_decl : NULL_TREE;
}
tree
declare_local_label (tree id)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
named_label_entry *ent = lookup_label_1 (id, true);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return ent ? ent->label_decl : NULL_TREE;
}
@@ -3681,9 +3676,11 @@ check_omp_return (void)
/* Define a label, specifying the location in the source file.
Return the LABEL_DECL node for the label. */
-static tree
-define_label_1 (location_t location, tree name)
+tree
+define_label (location_t location, tree name)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
/* After labels, make any new cleanups in the function go into their
own new (temporary) binding contour. */
for (cp_binding_level *p = current_binding_level;
@@ -3717,18 +3714,6 @@ define_label_1 (location_t location, tree name)
return decl;
}
-/* Wrapper for define_label_1. */
-
-tree
-define_label (location_t location, tree name)
-{
- bool running = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = define_label_1 (location, name);
- timevar_cond_stop (TV_NAME_LOOKUP, running);
- return ret;
-}
-
-
struct cp_switch
{
cp_binding_level *level;
@@ -15499,13 +15484,15 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
TEMPLATE_HEADER_P is true when this declaration is preceded by
a set of template parameters. */
-static tree
-xref_tag_1 (enum tag_types tag_code, tree name,
- TAG_how how, bool template_header_p)
+tree
+xref_tag (enum tag_types tag_code, tree name,
+ TAG_how how, bool template_header_p)
{
enum tree_code code;
tree context = NULL_TREE;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
gcc_assert (identifier_p (name));
switch (tag_code)
@@ -15654,18 +15641,6 @@ xref_tag_1 (enum tag_types tag_code, tree name,
return t;
}
-/* Wrapper for xref_tag_1. */
-
-tree
-xref_tag (enum tag_types tag_code, tree name,
- TAG_how how, bool template_header_p)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = xref_tag_1 (tag_code, name, how, template_header_p);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
/* Create the binfo hierarchy for REF with (possibly NULL) base list
BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
access_* node, and the TREE_VALUE is the type of the base-class.
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index c414a1091b4..b4c636d551a 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -39,7 +39,6 @@ along with GCC; see the file COPYING3. If not see
static cxx_binding *cxx_binding_make (tree value, tree type);
static cp_binding_level *innermost_nonclass_level (void);
-static tree do_pushdecl (tree decl, bool hiding);
static void set_identifier_type_value_with_scope (tree id, tree decl,
cp_binding_level *b);
static name_hint maybe_suggest_missing_std_header (location_t location,
@@ -1725,11 +1724,9 @@ static void diagnose_name_conflict (tree, tree);
tree
lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
name_lookup lookup (name);
- fns = lookup.search_adl (fns, args);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return fns;
+ return lookup.search_adl (fns, args);
}
/* FNS is an overload set of conversion functions. Return the
@@ -2595,8 +2592,10 @@ anticipated_builtin_p (tree ovl)
was successful. */
static bool
-supplement_binding_1 (cxx_binding *binding, tree decl)
+supplement_binding (cxx_binding *binding, tree decl)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
tree bval = binding->value;
bool ok = true;
tree target_bval = strip_using_decl (bval);
@@ -2736,18 +2735,6 @@ diagnose_name_conflict (tree decl, tree bval)
inform (location_of (bval), "previous declaration %q#D", bval);
}
-/* Wrapper for supplement_binding_1. */
-
-static bool
-supplement_binding (cxx_binding *binding, tree decl)
-{
- bool ret;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- ret = supplement_binding_1 (binding, decl);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
/* Replace BINDING's current value on its scope's name list with
NEWVAL. */
@@ -3472,7 +3459,7 @@ push_local_extern_decl_alias (tree decl)
/* Expected default linkage is from the namespace. */
TREE_PUBLIC (alias) = TREE_PUBLIC (ns);
push_nested_namespace (ns);
- alias = do_pushdecl (alias, /* hiding= */true);
+ alias = pushdecl (alias, /* hiding= */true);
pop_nested_namespace (ns);
if (VAR_P (decl) && CP_DECL_THREAD_LOCAL_P (decl))
set_decl_tls_model (alias, DECL_TLS_MODEL (decl));
@@ -3618,16 +3605,20 @@ check_module_override (tree decl, tree mvec, bool hiding,
/* Record DECL as belonging to the current lexical scope. Check for
errors (such as an incompatible declaration for the same name
- already seen in the same scope). IS_FRIEND is true if DECL is
- declared as a friend.
+ already seen in the same scope).
+
+ The new binding is hidden if HIDING is true (an anticipated builtin
+ or hidden friend).
Returns either DECL or an old decl for the same name. If an old
decl is returned, it may have been smashed to agree with what DECL
says. */
-static tree
-do_pushdecl (tree decl, bool hiding)
+tree
+pushdecl (tree decl, bool hiding)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
if (decl == error_mark_node)
return error_mark_node;
@@ -3843,19 +3834,6 @@ do_pushdecl (tree decl, bool hiding)
return decl;
}
-/* Record a decl-node X as belonging to the current lexical scope.
- The new binding is hidden if HIDING is true (an anticipated builtin
- or hidden friend). */
-
-tree
-pushdecl (tree x, bool hiding)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = do_pushdecl (x, hiding);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
/* A mergeable entity is being loaded into namespace NS slot NAME.
Create and return the appropriate vector slot for that. Either a
GMF slot or a module-specific one. */
@@ -4784,7 +4762,7 @@ do_pushdecl_with_scope (tree x, cp_binding_level *level, bool hiding = false)
current_function_decl = NULL_TREE;
b = current_binding_level;
current_binding_level = level;
- x = do_pushdecl (x, hiding);
+ x = pushdecl (x, hiding);
current_binding_level = b;
current_function_decl = function_decl;
}
@@ -4797,17 +4775,14 @@ tree
pushdecl_outermost_localscope (tree x)
{
cp_binding_level *b = NULL;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
/* Find the scope just inside the function parms. */
for (cp_binding_level *n = current_binding_level;
n->kind != sk_function_parms; n = b->level_chain)
b = n;
- tree ret = b ? do_pushdecl_with_scope (x, b) : error_mark_node;
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
-
- return ret;
+ return b ? do_pushdecl_with_scope (x, b) : error_mark_node;
}
/* Process a local-scope or namespace-scope using declaration. LOOKUP
@@ -5196,7 +5171,7 @@ poplevel_class (void)
size_t i;
tree shadowed;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
gcc_assert (level != 0);
/* If we're leaving a toplevel class, cache its binding level. */
@@ -5223,7 +5198,6 @@ poplevel_class (void)
`pushlevel_class' routine. */
gcc_assert (current_binding_level == level);
leave_scope ();
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
}
/* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
@@ -5266,14 +5240,13 @@ bool
pushdecl_class_level (tree x)
{
bool is_valid = true;
- bool subtime;
/* Do nothing if we're adding to an outer lambda closure type,
outer_binding will add it later if it's needed. */
if (current_class_type != class_binding_level->this_entity)
return true;
- subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
/* Get the name of X. */
tree name = OVL_NAME (x);
@@ -5313,7 +5286,6 @@ pushdecl_class_level (tree x)
}
input_location = save_location;
}
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return is_valid;
}
@@ -5359,13 +5331,15 @@ get_class_binding (tree name, cp_binding_level *scope)
/* Make the declaration(s) of X appear in CLASS scope under the name
NAME. Returns true if the binding is valid. */
-static bool
-push_class_level_binding_1 (tree name, tree x)
+bool
+push_class_level_binding (tree name, tree x)
{
cxx_binding *binding;
tree decl = x;
bool ok;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
/* The class_binding_level will be NULL if x is a template
parameter name in a member template. */
if (!class_binding_level)
@@ -5537,18 +5511,6 @@ push_class_level_binding_1 (tree name, tree x)
return ok;
}
-/* Wrapper for push_class_level_binding_1. */
-
-bool
-push_class_level_binding (tree name, tree x)
-{
- bool ret;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- ret = push_class_level_binding_1 (name, x);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
/* Process and lookup a using decl SCOPE::lookup.name, filling in
lookup.values & lookup.type. Return a USING_DECL, or NULL_TREE on
failure. */
@@ -5792,7 +5754,7 @@ do_class_using_decl (tree scope, tree name)
tree
get_namespace_binding (tree ns, tree name)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
if (!ns)
ns = global_namespace;
gcc_checking_assert (!DECL_NAMESPACE_ALIAS (ns));
@@ -5808,7 +5770,6 @@ get_namespace_binding (tree ns, tree name)
ret = MAYBE_STAT_DECL (ret);
}
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return ret;
}
@@ -5819,7 +5780,7 @@ get_namespace_binding (tree ns, tree name)
void
set_global_binding (tree decl)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
tree *slot = find_namespace_slot (global_namespace, DECL_NAME (decl), true);
@@ -5829,8 +5790,6 @@ set_global_binding (tree decl)
/* Force the binding, so compiler internals continue to work. */
*slot = decl;
-
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
}
/* Set the context of a declaration to scope. Complain if we are not
@@ -6123,11 +6082,9 @@ do_namespace_alias (tree alias, tree name_space)
tree
pushdecl_namespace_level (tree decl, bool hiding)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree res = do_pushdecl_with_scope (decl, NAMESPACE_LEVEL (current_namespace),
- hiding);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return res;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+ return do_pushdecl_with_scope (decl, NAMESPACE_LEVEL (current_namespace),
+ hiding);
}
/* Wrapper around push_local_binding to push the bindings for
@@ -7690,11 +7647,13 @@ innermost_non_namespace_value (tree name)
WANT can also have LOOK_want::HIDDEN_FRIEND or
LOOK_want::HIDDEN_LAMBDa added to it. */
-static tree
-lookup_name_1 (tree name, LOOK_where where, LOOK_want want)
+tree
+lookup_name (tree name, LOOK_where where, LOOK_want want)
{
tree val = NULL_TREE;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
gcc_checking_assert (unsigned (where) != 0);
/* If we're looking for hidden lambda things, we shouldn't be
looking in namespace scope. */
@@ -7795,17 +7754,6 @@ lookup_name_1 (tree name, LOOK_where where, LOOK_want want)
return val;
}
-/* Wrapper for lookup_name_1. */
-
-tree
-lookup_name (tree name, LOOK_where where, LOOK_want want)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = lookup_name_1 (name, where, want);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
tree
lookup_name (tree name)
{
@@ -7825,9 +7773,11 @@ lookup_name (tree name)
A TYPE_DECL best matching the NAME is returned. Catching error
and issuing diagnostics are caller's responsibility. */
-static tree
-lookup_elaborated_type_1 (tree name, TAG_how how)
+tree
+lookup_elaborated_type (tree name, TAG_how how)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
cp_binding_level *b = current_binding_level;
if (b->kind != sk_namespace)
@@ -8011,17 +7961,6 @@ lookup_elaborated_type_1 (tree name, TAG_how how)
return NULL_TREE;
}
-/* Wrapper for lookup_type_scope_1. */
-
-tree
-lookup_elaborated_type (tree name, TAG_how how)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = lookup_elaborated_type_1 (name, how);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
/* The type TYPE is being declared. If it is a class template, or a
specialization of a class template, do any processing required and
perform error-checking. If IS_FRIEND is nonzero, this TYPE is
@@ -8099,13 +8038,15 @@ maybe_process_template_type_declaration (tree type, int is_friend,
Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
-static tree
-do_pushtag (tree name, tree type, TAG_how how)
+tree
+pushtag (tree name, tree type, TAG_how how)
{
tree decl;
gcc_assert (identifier_p (name));
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
cp_binding_level *b = current_binding_level;
while (true)
{
@@ -8249,18 +8190,6 @@ do_pushtag (tree name, tree type, TAG_how how)
return type;
}
-
-/* Wrapper for do_pushtag. */
-
-tree
-pushtag (tree name, tree type, TAG_how how)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- tree ret = do_pushtag (name, type, how);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
- return ret;
-}
-
\f
/* Subroutines for reverting temporarily to top-level for instantiation
of templates and such. We actually need to clear out the class- and
@@ -8309,7 +8238,7 @@ store_bindings (tree names, vec<cxx_saved_binding, va_gc> **old_bindings)
tree t, id;
size_t i;
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
for (t = names; t; t = TREE_CHAIN (t))
{
if (TREE_CODE (t) == TREE_LIST)
@@ -8331,7 +8260,6 @@ store_bindings (tree names, vec<cxx_saved_binding, va_gc> **old_bindings)
}
bindings_need_stored.truncate (0);
}
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
}
/* Like store_bindings, but NAMES is a vector of cp_class_binding
@@ -8362,8 +8290,8 @@ store_class_bindings (vec<cp_class_binding, va_gc> *names,
static GTY((deletable)) struct saved_scope *free_saved_scope;
-static void
-do_push_to_top_level (void)
+void
+push_to_top_level (void)
{
struct saved_scope *s;
cp_binding_level *b;
@@ -8371,6 +8299,8 @@ do_push_to_top_level (void)
size_t i;
bool need_pop;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
/* Reuse or create a new structure for this saved scope. */
if (free_saved_scope != NULL)
{
@@ -8448,13 +8378,15 @@ do_push_to_top_level (void)
suppress_location_wrappers = 0;
}
-static void
-do_pop_from_top_level (void)
+void
+pop_from_top_level (void)
{
struct saved_scope *s = scope_chain;
cxx_saved_binding *saved;
size_t i;
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+
/* Clear out class-level bindings cache. */
if (previous_class_level)
invalidate_class_lookup_cache ();
@@ -8489,14 +8421,15 @@ do_pop_from_top_level (void)
/* Push into the scope of the namespace NS, even if it is deeply
nested within another namespace. */
-static void
-do_push_nested_namespace (tree ns)
+void
+push_nested_namespace (tree ns)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
if (ns == global_namespace)
- do_push_to_top_level ();
+ push_to_top_level ();
else
{
- do_push_nested_namespace (CP_DECL_CONTEXT (ns));
+ push_nested_namespace (CP_DECL_CONTEXT (ns));
resume_scope (NAMESPACE_LEVEL (ns));
current_namespace = ns;
}
@@ -8505,9 +8438,10 @@ do_push_nested_namespace (tree ns)
/* Pop back from the scope of the namespace NS, which was previously
entered with push_nested_namespace. */
-static void
-do_pop_nested_namespace (tree ns)
+void
+pop_nested_namespace (tree ns)
{
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
while (ns != global_namespace)
{
ns = CP_DECL_CONTEXT (ns);
@@ -8515,7 +8449,7 @@ do_pop_nested_namespace (tree ns)
leave_scope ();
}
- do_pop_from_top_level ();
+ pop_from_top_level ();
}
/* Add TARGET to USINGS, if it does not already exist there. We used
@@ -8595,13 +8529,12 @@ finish_using_directive (tree target, tree attribs)
tree
pushdecl_top_level (tree x)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- do_push_to_top_level ();
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+ push_to_top_level ();
gcc_checking_assert (!DECL_CONTEXT (x));
DECL_CONTEXT (x) = FROB_CONTEXT (global_namespace);
x = pushdecl_namespace_level (x);
- do_pop_from_top_level ();
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
+ pop_from_top_level ();
return x;
}
@@ -8611,14 +8544,13 @@ pushdecl_top_level (tree x)
tree
pushdecl_top_level_and_finish (tree x, tree init)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- do_push_to_top_level ();
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
+ push_to_top_level ();
gcc_checking_assert (!DECL_CONTEXT (x));
DECL_CONTEXT (x) = FROB_CONTEXT (global_namespace);
x = pushdecl_namespace_level (x);
cp_finish_decl (x, init, false, NULL_TREE, 0);
- do_pop_from_top_level ();
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
+ pop_from_top_level ();
return x;
}
@@ -8728,7 +8660,7 @@ make_namespace_finish (tree ns, tree *slot, bool from_import = false)
int
push_namespace (tree name, bool make_inline)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
int count = 0;
/* We should not get here if the global_namespace is not yet constructed
@@ -8875,7 +8807,6 @@ push_namespace (tree name, bool make_inline)
count++;
}
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
return count;
}
@@ -8884,14 +8815,12 @@ push_namespace (tree name, bool make_inline)
void
pop_namespace (void)
{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+ auto_cond_timevar tv (TV_NAME_LOOKUP);
gcc_assert (current_namespace != global_namespace);
current_namespace = CP_DECL_CONTEXT (current_namespace);
/* The binding level is not popped, as it might be re-opened later. */
leave_scope ();
-
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
}
/* An IMPORT is an import that is defining namespace NAME inside CTX. Find or
@@ -8958,43 +8887,6 @@ add_imported_namespace (tree ctx, tree name, location_t loc, unsigned import,
return decl;
}
-/* External entry points for do_{push_to/pop_from}_top_level. */
-
-void
-push_to_top_level (void)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- do_push_to_top_level ();
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
-}
-
-void
-pop_from_top_level (void)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- do_pop_from_top_level ();
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
-}
-
-/* External entry points for do_{push,pop}_nested_namespace. */
-
-void
-push_nested_namespace (tree ns)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- do_push_nested_namespace (ns);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
-}
-
-void
-pop_nested_namespace (tree ns)
-{
- bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- gcc_assert (current_namespace == ns);
- do_pop_nested_namespace (ns);
- timevar_cond_stop (TV_NAME_LOOKUP, subtime);
-}
-
/* Pop off extraneous binding levels left over due to syntax errors.
We don't pop past namespaces, as they might be valid. */
base-commit: 582d43a48cb28e6ed36ea6388ca92f3d5d786a26
--
2.27.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH RFA] timevar: Add auto_cond_timevar class
2021-10-18 14:22 [PATCH RFA] timevar: Add auto_cond_timevar class Jason Merrill
@ 2021-10-19 6:53 ` Richard Biener
0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2021-10-19 6:53 UTC (permalink / raw)
To: Jason Merrill; +Cc: GCC Patches
On Mon, Oct 18, 2021 at 4:23 PM Jason Merrill via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> The auto_timevar sentinel class for starting and stopping timevars was added
> in 2014, but doesn't work for the many uses of timevar_cond_start/stop in
> the C++ front end. So let's add one that does.
>
> This allows us to remove a lot of wrapper functions that were just used to
> call timevar_cond_stop on all exits from the function.
>
> Tested x86_64-pc-linux-gnu, OK for trunk?
OK.
> gcc/ChangeLog:
>
> * timevar.h (class auto_cond_timevar): New.
>
> gcc/cp/ChangeLog:
>
> * call.c
> * decl.c
> * name-lookup.c:
> Use auto_cond_timevar instead of timevar_cond_start/stop.
> Remove wrapper functions.
> ---
> gcc/timevar.h | 46 ++++++++-
> gcc/cp/call.c | 106 +++++--------------
> gcc/cp/decl.c | 51 +++------
> gcc/cp/name-lookup.c | 240 ++++++++++++-------------------------------
> 4 files changed, 150 insertions(+), 293 deletions(-)
>
> diff --git a/gcc/timevar.h b/gcc/timevar.h
> index 72e31adb9e6..ccaa42e5904 100644
> --- a/gcc/timevar.h
> +++ b/gcc/timevar.h
> @@ -247,13 +247,53 @@ class auto_timevar
> m_timer->pop (m_tv);
> }
>
> - private:
> + // Disallow copies.
> + auto_timevar (const auto_timevar &) = delete;
>
> - // Private to disallow copies.
> - auto_timevar (const auto_timevar &);
> + private:
> + timer *m_timer;
> + timevar_id_t m_tv;
> +};
> +
> +// As above, but use cond_start/stop.
> +class auto_cond_timevar
> +{
> + public:
> + auto_cond_timevar (timer *t, timevar_id_t tv)
> + : m_timer (t),
> + m_tv (tv)
> + {
> + start ();
> + }
> +
> + explicit auto_cond_timevar (timevar_id_t tv)
> + : m_timer (g_timer)
> + , m_tv (tv)
> + {
> + start ();
> + }
> +
> + ~auto_cond_timevar ()
> + {
> + if (m_timer && !already_running)
> + m_timer->cond_stop (m_tv);
> + }
> +
> + // Disallow copies.
> + auto_cond_timevar (const auto_cond_timevar &) = delete;
> +
> + private:
> + void start()
> + {
> + if (m_timer)
> + already_running = m_timer->cond_start (m_tv);
> + else
> + already_running = false;
> + }
>
> timer *m_timer;
> timevar_id_t m_tv;
> + bool already_running;
> };
>
> extern void print_time (const char *, long);
> diff --git a/gcc/cp/call.c b/gcc/cp/call.c
> index c5601d96ab8..80e618622fb 100644
> --- a/gcc/cp/call.c
> +++ b/gcc/cp/call.c
> @@ -4436,7 +4436,7 @@ build_user_type_conversion (tree totype, tree expr, int flags,
> struct z_candidate *cand;
> tree ret;
>
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> + auto_cond_timevar tv (TV_OVERLOAD);
> cand = build_user_type_conversion_1 (totype, expr, flags, complain);
>
> if (cand)
> @@ -4452,7 +4452,6 @@ build_user_type_conversion (tree totype, tree expr, int flags,
> else
> ret = NULL_TREE;
>
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> return ret;
> }
>
> @@ -4692,7 +4691,7 @@ perform_overload_resolution (tree fn,
> tree explicit_targs;
> int template_only;
>
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> + auto_cond_timevar tv (TV_OVERLOAD);
>
> explicit_targs = NULL_TREE;
> template_only = 0;
> @@ -4724,7 +4723,6 @@ perform_overload_resolution (tree fn,
> else
> cand = NULL;
>
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> return cand;
> }
>
> @@ -4989,8 +4987,8 @@ build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
>
> /* Build a new call to operator(). This may change ARGS. */
>
> -static tree
> -build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
> +tree
> +build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
> {
> struct z_candidate *candidates = 0, *cand;
> tree fns, convs, first_mem_arg = NULL_TREE;
> @@ -4998,6 +4996,8 @@ build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
> tree result = NULL_TREE;
> void *p;
>
> + auto_cond_timevar tv (TV_OVERLOAD);
> +
> obj = mark_lvalue_use (obj);
>
> if (error_operand_p (obj))
> @@ -5127,18 +5127,6 @@ build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
> return result;
> }
>
> -/* Wrapper for above. */
> -
> -tree
> -build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
> -{
> - tree ret;
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> - ret = build_op_call_1 (obj, args, complain);
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> - return ret;
> -}
> -
> /* Called by op_error to prepare format strings suitable for the error
> function. It concatenates a prefix (controlled by MATCH), ERRMSG,
> and a suffix (controlled by NTYPES). */
> @@ -5330,10 +5318,10 @@ conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
> /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
> arguments to the conditional expression. */
>
> -static tree
> -build_conditional_expr_1 (const op_location_t &loc,
> - tree arg1, tree arg2, tree arg3,
> - tsubst_flags_t complain)
> +tree
> +build_conditional_expr (const op_location_t &loc,
> + tree arg1, tree arg2, tree arg3,
> + tsubst_flags_t complain)
> {
> tree arg2_type;
> tree arg3_type;
> @@ -5345,6 +5333,8 @@ build_conditional_expr_1 (const op_location_t &loc,
> void *p;
> tree orig_arg2, orig_arg3;
>
> + auto_cond_timevar tv (TV_OVERLOAD);
> +
> /* As a G++ extension, the second argument to the conditional can be
> omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
> c'.) If the second operand is omitted, make sure it is
> @@ -5410,8 +5400,8 @@ build_conditional_expr_1 (const op_location_t &loc,
> && !VECTOR_TYPE_P (arg3_type))
> {
> /* Rely on the error messages of the scalar version. */
> - tree scal = build_conditional_expr_1 (loc, integer_one_node,
> - orig_arg2, orig_arg3, complain);
> + tree scal = build_conditional_expr (loc, integer_one_node,
> + orig_arg2, orig_arg3, complain);
> if (scal == error_mark_node)
> return error_mark_node;
> tree stype = TREE_TYPE (scal);
> @@ -5968,20 +5958,6 @@ build_conditional_expr_1 (const op_location_t &loc,
> return result;
> }
>
> -/* Wrapper for above. */
> -
> -tree
> -build_conditional_expr (const op_location_t &loc,
> - tree arg1, tree arg2, tree arg3,
> - tsubst_flags_t complain)
> -{
> - tree ret;
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> - ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> - return ret;
> -}
> -
> /* OPERAND is an operand to an expression. Perform necessary steps
> required before using it. If OPERAND is NULL_TREE, NULL_TREE is
> returned. */
> @@ -6483,10 +6459,10 @@ add_operator_candidates (z_candidate **candidates,
> return NULL_TREE;
> }
>
> -static tree
> -build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
> - tree arg1, tree arg2, tree arg3, tree *overload,
> - tsubst_flags_t complain)
> +tree
> +build_new_op (const op_location_t &loc, enum tree_code code, int flags,
> + tree arg1, tree arg2, tree arg3, tree *overload,
> + tsubst_flags_t complain)
> {
> struct z_candidate *candidates = 0, *cand;
> vec<tree, va_gc> *arglist;
> @@ -6500,6 +6476,8 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
> bool strict_p;
> bool any_viable_p;
>
> + auto_cond_timevar tv (TV_OVERLOAD);
> +
> if (error_operand_p (arg1)
> || error_operand_p (arg2)
> || error_operand_p (arg3))
> @@ -6635,8 +6613,8 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
> code = PREINCREMENT_EXPR;
> else
> code = PREDECREMENT_EXPR;
> - result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
> - NULL_TREE, overload, complain);
> + result = build_new_op (loc, code, flags, arg1, NULL_TREE,
> + NULL_TREE, overload, complain);
> break;
>
> /* The caller will deal with these. */
> @@ -6958,21 +6936,6 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
> return NULL_TREE;
> }
>
> -/* Wrapper for above. */
> -
> -tree
> -build_new_op (const op_location_t &loc, enum tree_code code, int flags,
> - tree arg1, tree arg2, tree arg3,
> - tree *overload, tsubst_flags_t complain)
> -{
> - tree ret;
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> - ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
> - overload, complain);
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> - return ret;
> -}
> -
> /* CALL was returned by some call-building function; extract the actual
> CALL_EXPR from any bits that have been tacked on, e.g. by
> convert_from_reference. */
> @@ -10670,10 +10633,10 @@ complain_about_no_candidates_for_method_call (tree instance,
> be set, upon return, to the function called. ARGS may be NULL.
> This may change ARGS. */
>
> -static tree
> -build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
> - tree conversion_path, int flags,
> - tree *fn_p, tsubst_flags_t complain)
> +tree
> +build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
> + tree conversion_path, int flags,
> + tree *fn_p, tsubst_flags_t complain)
> {
> struct z_candidate *candidates = 0, *cand;
> tree explicit_targs = NULL_TREE;
> @@ -10693,6 +10656,8 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
> vec<tree, va_gc> *orig_args = NULL;
> void *p;
>
> + auto_cond_timevar tv (TV_OVERLOAD);
> +
> gcc_assert (instance != NULL_TREE);
>
> /* We don't know what function we're going to call, yet. */
> @@ -11072,21 +11037,6 @@ build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
> return call;
> }
>
> -/* Wrapper for above. */
> -
> -tree
> -build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
> - tree conversion_path, int flags,
> - tree *fn_p, tsubst_flags_t complain)
> -{
> - tree ret;
> - bool subtime = timevar_cond_start (TV_OVERLOAD);
> - ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
> - fn_p, complain);
> - timevar_cond_stop (TV_OVERLOAD, subtime);
> - return ret;
> -}
> -
> /* Returns true iff standard conversion sequence ICS1 is a proper
> subsequence of ICS2. */
>
> diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
> index 242429d9ef4..2ff3845dcd4 100644
> --- a/gcc/cp/decl.c
> +++ b/gcc/cp/decl.c
> @@ -597,7 +597,7 @@ poplevel (int keep, int reverse, int functionbody)
> tree decl;
> scope_kind kind;
>
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> restart:
>
> block = NULL_TREE;
> @@ -829,7 +829,6 @@ poplevel (int keep, int reverse, int functionbody)
> if (kind == sk_cleanup)
> goto restart;
>
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return block;
> }
>
> @@ -908,7 +907,7 @@ static GTY((deletable)) vec<tree, va_gc> *local_entities;
> void
> determine_local_discriminator (tree decl)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> retrofit_lang_decl (decl);
> tree ctx = DECL_CONTEXT (decl);
> tree name = (TREE_CODE (decl) == TYPE_DECL
> @@ -943,8 +942,6 @@ determine_local_discriminator (tree decl)
> local_entities->quick_push (decl);
> local_entities->quick_push (name);
> }
> -
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> }
>
>
> @@ -3277,6 +3274,8 @@ named_label_hash::equal (const value_type entry, compare_type name)
> static named_label_entry *
> lookup_label_1 (tree id, bool making_local_p)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> /* You can't use labels at global scope. */
> if (current_function_decl == NULL_TREE)
> {
> @@ -3339,18 +3338,14 @@ lookup_label_1 (tree id, bool making_local_p)
> tree
> lookup_label (tree id)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> named_label_entry *ent = lookup_label_1 (id, false);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return ent ? ent->label_decl : NULL_TREE;
> }
>
> tree
> declare_local_label (tree id)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> named_label_entry *ent = lookup_label_1 (id, true);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return ent ? ent->label_decl : NULL_TREE;
> }
>
> @@ -3681,9 +3676,11 @@ check_omp_return (void)
> /* Define a label, specifying the location in the source file.
> Return the LABEL_DECL node for the label. */
>
> -static tree
> -define_label_1 (location_t location, tree name)
> +tree
> +define_label (location_t location, tree name)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> /* After labels, make any new cleanups in the function go into their
> own new (temporary) binding contour. */
> for (cp_binding_level *p = current_binding_level;
> @@ -3717,18 +3714,6 @@ define_label_1 (location_t location, tree name)
> return decl;
> }
>
> -/* Wrapper for define_label_1. */
> -
> -tree
> -define_label (location_t location, tree name)
> -{
> - bool running = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = define_label_1 (location, name);
> - timevar_cond_stop (TV_NAME_LOOKUP, running);
> - return ret;
> -}
> -
> -
> struct cp_switch
> {
> cp_binding_level *level;
> @@ -15499,13 +15484,15 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
> TEMPLATE_HEADER_P is true when this declaration is preceded by
> a set of template parameters. */
>
> -static tree
> -xref_tag_1 (enum tag_types tag_code, tree name,
> - TAG_how how, bool template_header_p)
> +tree
> +xref_tag (enum tag_types tag_code, tree name,
> + TAG_how how, bool template_header_p)
> {
> enum tree_code code;
> tree context = NULL_TREE;
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> gcc_assert (identifier_p (name));
>
> switch (tag_code)
> @@ -15654,18 +15641,6 @@ xref_tag_1 (enum tag_types tag_code, tree name,
> return t;
> }
>
> -/* Wrapper for xref_tag_1. */
> -
> -tree
> -xref_tag (enum tag_types tag_code, tree name,
> - TAG_how how, bool template_header_p)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = xref_tag_1 (tag_code, name, how, template_header_p);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> /* Create the binfo hierarchy for REF with (possibly NULL) base list
> BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
> access_* node, and the TREE_VALUE is the type of the base-class.
> diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
> index c414a1091b4..b4c636d551a 100644
> --- a/gcc/cp/name-lookup.c
> +++ b/gcc/cp/name-lookup.c
> @@ -39,7 +39,6 @@ along with GCC; see the file COPYING3. If not see
>
> static cxx_binding *cxx_binding_make (tree value, tree type);
> static cp_binding_level *innermost_nonclass_level (void);
> -static tree do_pushdecl (tree decl, bool hiding);
> static void set_identifier_type_value_with_scope (tree id, tree decl,
> cp_binding_level *b);
> static name_hint maybe_suggest_missing_std_header (location_t location,
> @@ -1725,11 +1724,9 @@ static void diagnose_name_conflict (tree, tree);
> tree
> lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> name_lookup lookup (name);
> - fns = lookup.search_adl (fns, args);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return fns;
> + return lookup.search_adl (fns, args);
> }
>
> /* FNS is an overload set of conversion functions. Return the
> @@ -2595,8 +2592,10 @@ anticipated_builtin_p (tree ovl)
> was successful. */
>
> static bool
> -supplement_binding_1 (cxx_binding *binding, tree decl)
> +supplement_binding (cxx_binding *binding, tree decl)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> tree bval = binding->value;
> bool ok = true;
> tree target_bval = strip_using_decl (bval);
> @@ -2736,18 +2735,6 @@ diagnose_name_conflict (tree decl, tree bval)
> inform (location_of (bval), "previous declaration %q#D", bval);
> }
>
> -/* Wrapper for supplement_binding_1. */
> -
> -static bool
> -supplement_binding (cxx_binding *binding, tree decl)
> -{
> - bool ret;
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - ret = supplement_binding_1 (binding, decl);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> /* Replace BINDING's current value on its scope's name list with
> NEWVAL. */
>
> @@ -3472,7 +3459,7 @@ push_local_extern_decl_alias (tree decl)
> /* Expected default linkage is from the namespace. */
> TREE_PUBLIC (alias) = TREE_PUBLIC (ns);
> push_nested_namespace (ns);
> - alias = do_pushdecl (alias, /* hiding= */true);
> + alias = pushdecl (alias, /* hiding= */true);
> pop_nested_namespace (ns);
> if (VAR_P (decl) && CP_DECL_THREAD_LOCAL_P (decl))
> set_decl_tls_model (alias, DECL_TLS_MODEL (decl));
> @@ -3618,16 +3605,20 @@ check_module_override (tree decl, tree mvec, bool hiding,
>
> /* Record DECL as belonging to the current lexical scope. Check for
> errors (such as an incompatible declaration for the same name
> - already seen in the same scope). IS_FRIEND is true if DECL is
> - declared as a friend.
> + already seen in the same scope).
> +
> + The new binding is hidden if HIDING is true (an anticipated builtin
> + or hidden friend).
>
> Returns either DECL or an old decl for the same name. If an old
> decl is returned, it may have been smashed to agree with what DECL
> says. */
>
> -static tree
> -do_pushdecl (tree decl, bool hiding)
> +tree
> +pushdecl (tree decl, bool hiding)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> if (decl == error_mark_node)
> return error_mark_node;
>
> @@ -3843,19 +3834,6 @@ do_pushdecl (tree decl, bool hiding)
> return decl;
> }
>
> -/* Record a decl-node X as belonging to the current lexical scope.
> - The new binding is hidden if HIDING is true (an anticipated builtin
> - or hidden friend). */
> -
> -tree
> -pushdecl (tree x, bool hiding)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = do_pushdecl (x, hiding);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> /* A mergeable entity is being loaded into namespace NS slot NAME.
> Create and return the appropriate vector slot for that. Either a
> GMF slot or a module-specific one. */
> @@ -4784,7 +4762,7 @@ do_pushdecl_with_scope (tree x, cp_binding_level *level, bool hiding = false)
> current_function_decl = NULL_TREE;
> b = current_binding_level;
> current_binding_level = level;
> - x = do_pushdecl (x, hiding);
> + x = pushdecl (x, hiding);
> current_binding_level = b;
> current_function_decl = function_decl;
> }
> @@ -4797,17 +4775,14 @@ tree
> pushdecl_outermost_localscope (tree x)
> {
> cp_binding_level *b = NULL;
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
>
> /* Find the scope just inside the function parms. */
> for (cp_binding_level *n = current_binding_level;
> n->kind != sk_function_parms; n = b->level_chain)
> b = n;
>
> - tree ret = b ? do_pushdecl_with_scope (x, b) : error_mark_node;
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> -
> - return ret;
> + return b ? do_pushdecl_with_scope (x, b) : error_mark_node;
> }
>
> /* Process a local-scope or namespace-scope using declaration. LOOKUP
> @@ -5196,7 +5171,7 @@ poplevel_class (void)
> size_t i;
> tree shadowed;
>
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> gcc_assert (level != 0);
>
> /* If we're leaving a toplevel class, cache its binding level. */
> @@ -5223,7 +5198,6 @@ poplevel_class (void)
> `pushlevel_class' routine. */
> gcc_assert (current_binding_level == level);
> leave_scope ();
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> }
>
> /* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
> @@ -5266,14 +5240,13 @@ bool
> pushdecl_class_level (tree x)
> {
> bool is_valid = true;
> - bool subtime;
>
> /* Do nothing if we're adding to an outer lambda closure type,
> outer_binding will add it later if it's needed. */
> if (current_class_type != class_binding_level->this_entity)
> return true;
>
> - subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> /* Get the name of X. */
> tree name = OVL_NAME (x);
>
> @@ -5313,7 +5286,6 @@ pushdecl_class_level (tree x)
> }
> input_location = save_location;
> }
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return is_valid;
> }
>
> @@ -5359,13 +5331,15 @@ get_class_binding (tree name, cp_binding_level *scope)
> /* Make the declaration(s) of X appear in CLASS scope under the name
> NAME. Returns true if the binding is valid. */
>
> -static bool
> -push_class_level_binding_1 (tree name, tree x)
> +bool
> +push_class_level_binding (tree name, tree x)
> {
> cxx_binding *binding;
> tree decl = x;
> bool ok;
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> /* The class_binding_level will be NULL if x is a template
> parameter name in a member template. */
> if (!class_binding_level)
> @@ -5537,18 +5511,6 @@ push_class_level_binding_1 (tree name, tree x)
> return ok;
> }
>
> -/* Wrapper for push_class_level_binding_1. */
> -
> -bool
> -push_class_level_binding (tree name, tree x)
> -{
> - bool ret;
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - ret = push_class_level_binding_1 (name, x);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> /* Process and lookup a using decl SCOPE::lookup.name, filling in
> lookup.values & lookup.type. Return a USING_DECL, or NULL_TREE on
> failure. */
> @@ -5792,7 +5754,7 @@ do_class_using_decl (tree scope, tree name)
> tree
> get_namespace_binding (tree ns, tree name)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> if (!ns)
> ns = global_namespace;
> gcc_checking_assert (!DECL_NAMESPACE_ALIAS (ns));
> @@ -5808,7 +5770,6 @@ get_namespace_binding (tree ns, tree name)
> ret = MAYBE_STAT_DECL (ret);
> }
>
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return ret;
> }
>
> @@ -5819,7 +5780,7 @@ get_namespace_binding (tree ns, tree name)
> void
> set_global_binding (tree decl)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
>
> tree *slot = find_namespace_slot (global_namespace, DECL_NAME (decl), true);
>
> @@ -5829,8 +5790,6 @@ set_global_binding (tree decl)
>
> /* Force the binding, so compiler internals continue to work. */
> *slot = decl;
> -
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> }
>
> /* Set the context of a declaration to scope. Complain if we are not
> @@ -6123,11 +6082,9 @@ do_namespace_alias (tree alias, tree name_space)
> tree
> pushdecl_namespace_level (tree decl, bool hiding)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree res = do_pushdecl_with_scope (decl, NAMESPACE_LEVEL (current_namespace),
> - hiding);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return res;
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> + return do_pushdecl_with_scope (decl, NAMESPACE_LEVEL (current_namespace),
> + hiding);
> }
>
> /* Wrapper around push_local_binding to push the bindings for
> @@ -7690,11 +7647,13 @@ innermost_non_namespace_value (tree name)
> WANT can also have LOOK_want::HIDDEN_FRIEND or
> LOOK_want::HIDDEN_LAMBDa added to it. */
>
> -static tree
> -lookup_name_1 (tree name, LOOK_where where, LOOK_want want)
> +tree
> +lookup_name (tree name, LOOK_where where, LOOK_want want)
> {
> tree val = NULL_TREE;
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> gcc_checking_assert (unsigned (where) != 0);
> /* If we're looking for hidden lambda things, we shouldn't be
> looking in namespace scope. */
> @@ -7795,17 +7754,6 @@ lookup_name_1 (tree name, LOOK_where where, LOOK_want want)
> return val;
> }
>
> -/* Wrapper for lookup_name_1. */
> -
> -tree
> -lookup_name (tree name, LOOK_where where, LOOK_want want)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = lookup_name_1 (name, where, want);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> tree
> lookup_name (tree name)
> {
> @@ -7825,9 +7773,11 @@ lookup_name (tree name)
> A TYPE_DECL best matching the NAME is returned. Catching error
> and issuing diagnostics are caller's responsibility. */
>
> -static tree
> -lookup_elaborated_type_1 (tree name, TAG_how how)
> +tree
> +lookup_elaborated_type (tree name, TAG_how how)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> cp_binding_level *b = current_binding_level;
>
> if (b->kind != sk_namespace)
> @@ -8011,17 +7961,6 @@ lookup_elaborated_type_1 (tree name, TAG_how how)
> return NULL_TREE;
> }
>
> -/* Wrapper for lookup_type_scope_1. */
> -
> -tree
> -lookup_elaborated_type (tree name, TAG_how how)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = lookup_elaborated_type_1 (name, how);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
> /* The type TYPE is being declared. If it is a class template, or a
> specialization of a class template, do any processing required and
> perform error-checking. If IS_FRIEND is nonzero, this TYPE is
> @@ -8099,13 +8038,15 @@ maybe_process_template_type_declaration (tree type, int is_friend,
>
> Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
>
> -static tree
> -do_pushtag (tree name, tree type, TAG_how how)
> +tree
> +pushtag (tree name, tree type, TAG_how how)
> {
> tree decl;
>
> gcc_assert (identifier_p (name));
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> cp_binding_level *b = current_binding_level;
> while (true)
> {
> @@ -8249,18 +8190,6 @@ do_pushtag (tree name, tree type, TAG_how how)
>
> return type;
> }
> -
> -/* Wrapper for do_pushtag. */
> -
> -tree
> -pushtag (tree name, tree type, TAG_how how)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - tree ret = do_pushtag (name, type, how);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> - return ret;
> -}
> -
>
> /* Subroutines for reverting temporarily to top-level for instantiation
> of templates and such. We actually need to clear out the class- and
> @@ -8309,7 +8238,7 @@ store_bindings (tree names, vec<cxx_saved_binding, va_gc> **old_bindings)
> tree t, id;
> size_t i;
>
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> for (t = names; t; t = TREE_CHAIN (t))
> {
> if (TREE_CODE (t) == TREE_LIST)
> @@ -8331,7 +8260,6 @@ store_bindings (tree names, vec<cxx_saved_binding, va_gc> **old_bindings)
> }
> bindings_need_stored.truncate (0);
> }
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> }
>
> /* Like store_bindings, but NAMES is a vector of cp_class_binding
> @@ -8362,8 +8290,8 @@ store_class_bindings (vec<cp_class_binding, va_gc> *names,
>
> static GTY((deletable)) struct saved_scope *free_saved_scope;
>
> -static void
> -do_push_to_top_level (void)
> +void
> +push_to_top_level (void)
> {
> struct saved_scope *s;
> cp_binding_level *b;
> @@ -8371,6 +8299,8 @@ do_push_to_top_level (void)
> size_t i;
> bool need_pop;
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> /* Reuse or create a new structure for this saved scope. */
> if (free_saved_scope != NULL)
> {
> @@ -8448,13 +8378,15 @@ do_push_to_top_level (void)
> suppress_location_wrappers = 0;
> }
>
> -static void
> -do_pop_from_top_level (void)
> +void
> +pop_from_top_level (void)
> {
> struct saved_scope *s = scope_chain;
> cxx_saved_binding *saved;
> size_t i;
>
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> +
> /* Clear out class-level bindings cache. */
> if (previous_class_level)
> invalidate_class_lookup_cache ();
> @@ -8489,14 +8421,15 @@ do_pop_from_top_level (void)
> /* Push into the scope of the namespace NS, even if it is deeply
> nested within another namespace. */
>
> -static void
> -do_push_nested_namespace (tree ns)
> +void
> +push_nested_namespace (tree ns)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> if (ns == global_namespace)
> - do_push_to_top_level ();
> + push_to_top_level ();
> else
> {
> - do_push_nested_namespace (CP_DECL_CONTEXT (ns));
> + push_nested_namespace (CP_DECL_CONTEXT (ns));
> resume_scope (NAMESPACE_LEVEL (ns));
> current_namespace = ns;
> }
> @@ -8505,9 +8438,10 @@ do_push_nested_namespace (tree ns)
> /* Pop back from the scope of the namespace NS, which was previously
> entered with push_nested_namespace. */
>
> -static void
> -do_pop_nested_namespace (tree ns)
> +void
> +pop_nested_namespace (tree ns)
> {
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> while (ns != global_namespace)
> {
> ns = CP_DECL_CONTEXT (ns);
> @@ -8515,7 +8449,7 @@ do_pop_nested_namespace (tree ns)
> leave_scope ();
> }
>
> - do_pop_from_top_level ();
> + pop_from_top_level ();
> }
>
> /* Add TARGET to USINGS, if it does not already exist there. We used
> @@ -8595,13 +8529,12 @@ finish_using_directive (tree target, tree attribs)
> tree
> pushdecl_top_level (tree x)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - do_push_to_top_level ();
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> + push_to_top_level ();
> gcc_checking_assert (!DECL_CONTEXT (x));
> DECL_CONTEXT (x) = FROB_CONTEXT (global_namespace);
> x = pushdecl_namespace_level (x);
> - do_pop_from_top_level ();
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> + pop_from_top_level ();
> return x;
> }
>
> @@ -8611,14 +8544,13 @@ pushdecl_top_level (tree x)
> tree
> pushdecl_top_level_and_finish (tree x, tree init)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - do_push_to_top_level ();
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> + push_to_top_level ();
> gcc_checking_assert (!DECL_CONTEXT (x));
> DECL_CONTEXT (x) = FROB_CONTEXT (global_namespace);
> x = pushdecl_namespace_level (x);
> cp_finish_decl (x, init, false, NULL_TREE, 0);
> - do_pop_from_top_level ();
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> + pop_from_top_level ();
> return x;
> }
>
> @@ -8728,7 +8660,7 @@ make_namespace_finish (tree ns, tree *slot, bool from_import = false)
> int
> push_namespace (tree name, bool make_inline)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
> int count = 0;
>
> /* We should not get here if the global_namespace is not yet constructed
> @@ -8875,7 +8807,6 @@ push_namespace (tree name, bool make_inline)
> count++;
> }
>
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> return count;
> }
>
> @@ -8884,14 +8815,12 @@ push_namespace (tree name, bool make_inline)
> void
> pop_namespace (void)
> {
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> + auto_cond_timevar tv (TV_NAME_LOOKUP);
>
> gcc_assert (current_namespace != global_namespace);
> current_namespace = CP_DECL_CONTEXT (current_namespace);
> /* The binding level is not popped, as it might be re-opened later. */
> leave_scope ();
> -
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> }
>
> /* An IMPORT is an import that is defining namespace NAME inside CTX. Find or
> @@ -8958,43 +8887,6 @@ add_imported_namespace (tree ctx, tree name, location_t loc, unsigned import,
> return decl;
> }
>
> -/* External entry points for do_{push_to/pop_from}_top_level. */
> -
> -void
> -push_to_top_level (void)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - do_push_to_top_level ();
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> -}
> -
> -void
> -pop_from_top_level (void)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - do_pop_from_top_level ();
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> -}
> -
> -/* External entry points for do_{push,pop}_nested_namespace. */
> -
> -void
> -push_nested_namespace (tree ns)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - do_push_nested_namespace (ns);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> -}
> -
> -void
> -pop_nested_namespace (tree ns)
> -{
> - bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
> - gcc_assert (current_namespace == ns);
> - do_pop_nested_namespace (ns);
> - timevar_cond_stop (TV_NAME_LOOKUP, subtime);
> -}
> -
> /* Pop off extraneous binding levels left over due to syntax errors.
> We don't pop past namespaces, as they might be valid. */
>
>
> base-commit: 582d43a48cb28e6ed36ea6388ca92f3d5d786a26
> --
> 2.27.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-10-19 6:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-18 14:22 [PATCH RFA] timevar: Add auto_cond_timevar class Jason Merrill
2021-10-19 6:53 ` Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).