This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] New flag for dumping information about constexpr function calls memoization (GCC 5.2.0)
- From: Andres Tiraboschi <andres dot tiraboschi at tallertechnologies dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 28 Jan 2016 17:20:17 -0300
- Subject: [PATCH] New flag for dumping information about constexpr function calls memoization (GCC 5.2.0)
- Authentication-results: sourceware.org; auth=none
Hi,
This patch adds a flag (-fdump-memoization-hits) in order to dump
information about wich constexpr functions calls are memoized.
This is patch is for gcc-5.2.0.
If OK, please commit it for me since I don't have write access.
patch:
diff --git a/gcc/common.opt b/gcc/common.opt
index 1218a71..bf0c7df 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1168,6 +1168,10 @@ fdump-passes
Common Var(flag_dump_passes) Init(0)
Dump optimization passes
+fdump-memoization-hits
+Common Var(flag_dump_memoization_hits) Init(0)
+Dump info about constexpr calls memoized.
+
fdump-unnumbered
Common Report Var(flag_dump_unnumbered)
Suppress output of instruction numbers, line number notes and
addresses in debugging dumps
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index e250726..41ae5b3 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -42,6 +42,8 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "tree-inline.h"
#include "ubsan.h"
+#include "tree-pretty-print.h"
+#include "dumpfile.h"
static bool verify_constant (tree, bool, bool *, bool *);
#define VERIFY_CONSTANT(X) \
@@ -1173,6 +1175,14 @@ cx_error_context (void)
return r;
}
+static void
+dump_memoization_hit (FILE *file, tree call, int flags)
+{
+ fprintf(file, "Memoized call:\n");
+ print_generic_decl(file, call, flags);
+ fprintf(file, "\n");
+}
+
/* Subroutine of cxx_eval_constant_expression.
Evaluate the call expression tree T in the context of OLD_CALL expression
evaluation. */
@@ -1338,7 +1348,11 @@ cxx_eval_call_expression (const constexpr_ctx
*ctx, tree t,
entry->result = result = error_mark_node;
}
else
- result = entry->result;
+ {
+ if (flag_dump_memoization_hits)
+ dump_memoization_hit(stderr, t, 0);
+ result = entry->result;
+ }
}
if (!depth_ok)