Commit b830c28b by Jason Merrill Committed by Jason Merrill

Improve C++ fold caching efficiency.

While looking at concepts caching I noticed that we were clearing the caches
unnecessarily for non-constant initialization, which shouldn't affect
folding.

	* typeck2.c (store_init_value): Only clear_cv_and_fold_caches if the
	value is constant.

From-SVN: r276487
parent c89844e5
2019-10-02 Jason Merrill <jason@redhat.com>
* typeck2.c (store_init_value): Only clear_cv_and_fold_caches if the
value is constant.
2019-09-30 Jason Merrill <jason@redhat.com>
Use hash_map_safe_* functions.
......
......@@ -907,9 +907,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
/* Handle aggregate NSDMI in non-constant initializers, too. */
value = replace_placeholders (value, decl);
/* DECL may change value; purge caches. */
clear_cv_and_fold_caches ();
/* If the initializer is not a constant, fill in DECL_INITIAL with
the bits that are constant, and then return an expression that
will perform the dynamic initialization. */
......@@ -918,6 +915,10 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
|| vla_type_p (type)
|| ! reduced_constant_expression_p (value)))
return split_nonconstant_init (decl, value);
/* DECL may change value; purge caches. */
clear_cv_and_fold_caches ();
/* If the value is a constant, just put it in DECL_INITIAL. If DECL
is an automatic variable, the middle end will turn this into a
dynamic initialization later. */
......
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