diff mbox series

[C++] Improve C++ fold caching efficiency.

Message ID 20191002200117.11287-1-jason@redhat.com
State New
Headers show
Series [C++] Improve C++ fold caching efficiency. | expand

Commit Message

Jason Merrill Oct. 2, 2019, 8:01 p.m. UTC
While looking at concepts caching I noticed that we were clearing the caches
unnecessarily for non-constant initialization, which shouldn't affect
folding.

Tested x86_64-pc-linux-gnu, applying to trunk.

	* typeck2.c (store_init_value): Only clear_cv_and_fold_caches if the
	value is constant.
---
 gcc/cp/typeck2.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)


base-commit: d07428e896b5cfc7d78435de6ea08aad4e5ccfa5
diff mbox series

Patch

diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 58fa54f40af..ec0e6a7e33d 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -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.  */