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)