This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, committed] jit: option-logging


It seems prudent to have the jit's log files contain information on
the values of the various options in use.

This patch adds logging when options are changed, and logs the value
of all options when a compile is started (and no-ops for the common
case when no logging is enabled).

Tested via "make check-jit".

Committed to trunk as r220375.

gcc/jit/ChangeLog:
	* jit-logging.h (gcc::jit::log_user::log): Make const.
	* jit-recording.c (gcc::jit::recording::context::set_str_option):
	Log the new value of the option.
	(gcc::jit::recording::context::set_int_option): Likewise.
	(gcc::jit::recording::context::set_bool_option): Likewise.
	(gcc::jit::recording::context::compile): Log the value of all
	options.
	(gcc::jit::recording::context::compile_to_file): Likewise.
	(gcc::jit::recording::context::log_all_options): New function.
	(gcc::jit::recording::context::log_str_option): New function.
	(gcc::jit::recording::context::log_int_option): New function.
	(gcc::jit::recording::context::log_bool_option): New function.
	* jit-recording.h (gcc::jit::recording::context::log_all_options):
	New function.
	(gcc::jit::recording::context::log_str_option): New function.
	(gcc::jit::recording::context::log_int_option): New function.
	(gcc::jit::recording::context::log_bool_option): New function.
	* docs/internals/test-hello-world.exe.log.txt: Update for above
	changes.
---
 .../docs/internals/test-hello-world.exe.log.txt    | 17 +++++
 gcc/jit/jit-logging.h                              |  4 +-
 gcc/jit/jit-recording.c                            | 73 ++++++++++++++++++++++
 gcc/jit/jit-recording.h                            |  5 ++
 4 files changed, 97 insertions(+), 2 deletions(-)

diff --git a/gcc/jit/docs/internals/test-hello-world.exe.log.txt b/gcc/jit/docs/internals/test-hello-world.exe.log.txt
index a9abc10..5cb3aef 100644
--- a/gcc/jit/docs/internals/test-hello-world.exe.log.txt
+++ b/gcc/jit/docs/internals/test-hello-world.exe.log.txt
@@ -1,18 +1,25 @@
 JIT: libgccjit (GCC) version 5.0.0 20150123 (experimental) (x86_64-unknown-linux-gnu)
 JIT:	compiled by GNU C version 4.8.3 20140911 (Red Hat 4.8.3-7), GMP version 5.1.2, MPFR version 3.1.2, MPC version 1.0.1
 JIT: entering: gcc_jit_context_set_str_option
+JIT:  GCC_JIT_STR_OPTION_PROGNAME: "./test-hello-world.c.exe"
 JIT: exiting: gcc_jit_context_set_str_option
 JIT: entering: gcc_jit_context_set_int_option
+JIT:  GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL: 3
 JIT: exiting: gcc_jit_context_set_int_option
 JIT: entering: gcc_jit_context_set_bool_option
+JIT:  GCC_JIT_BOOL_OPTION_DEBUGINFO: true
 JIT: exiting: gcc_jit_context_set_bool_option
 JIT: entering: gcc_jit_context_set_bool_option
+JIT:  GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE: false
 JIT: exiting: gcc_jit_context_set_bool_option
 JIT: entering: gcc_jit_context_set_bool_option
+JIT:  GCC_JIT_BOOL_OPTION_DUMP_INITIAL_GIMPLE: false
 JIT: exiting: gcc_jit_context_set_bool_option
 JIT: entering: gcc_jit_context_set_bool_option
+JIT:  GCC_JIT_BOOL_OPTION_SELFCHECK_GC: true
 JIT: exiting: gcc_jit_context_set_bool_option
 JIT: entering: gcc_jit_context_set_bool_option
+JIT:  GCC_JIT_BOOL_OPTION_DUMP_SUMMARY: false
 JIT: exiting: gcc_jit_context_set_bool_option
 JIT: entering: gcc_jit_context_get_type
 JIT: exiting: gcc_jit_context_get_type
@@ -47,6 +54,16 @@ JIT: exiting: gcc_jit_context_dump_reproducer_to_file
 JIT: entering: gcc_jit_context_compile
 JIT:  in-memory compile of ctxt: 0x1283e20
 JIT:  entering: gcc::jit::result* gcc::jit::recording::context::compile()
+JIT:   GCC_JIT_STR_OPTION_PROGNAME: "./test-hello-world.c.exe"
+JIT:   GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL: 3
+JIT:   GCC_JIT_BOOL_OPTION_DEBUGINFO: true
+JIT:   GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE: false
+JIT:   GCC_JIT_BOOL_OPTION_DUMP_INITIAL_GIMPLE: false
+JIT:   GCC_JIT_BOOL_OPTION_DUMP_GENERATED_CODE: false
+JIT:   GCC_JIT_BOOL_OPTION_DUMP_SUMMARY: false
+JIT:   GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING: false
+JIT:   GCC_JIT_BOOL_OPTION_SELFCHECK_GC: true
+JIT:   GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES: false
 JIT:   entering: void gcc::jit::recording::context::validate()
 JIT:   exiting: void gcc::jit::recording::context::validate()
 JIT:   entering: gcc::jit::playback::context::context(gcc::jit::recording::context*)
diff --git a/gcc/jit/jit-logging.h b/gcc/jit/jit-logging.h
index 48f223d..9ece0df 100644
--- a/gcc/jit/jit-logging.h
+++ b/gcc/jit/jit-logging.h
@@ -127,7 +127,7 @@ class log_user
   logger * get_logger () const { return m_logger; }
   void set_logger (logger * logger);
 
-  void log (const char *fmt, ...)
+  void log (const char *fmt, ...) const
     GNU_PRINTF(2, 3);
 
   void enter_scope (const char *scope_name);
@@ -141,7 +141,7 @@ class log_user
    case where the underlying logger is NULL via a no-op.  */
 
 inline void
-log_user::log (const char *fmt, ...)
+log_user::log (const char *fmt, ...) const
 {
   if (m_logger)
     {
diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c
index 9f6e5fd..fb0b0a9 100644
--- a/gcc/jit/jit-recording.c
+++ b/gcc/jit/jit-recording.c
@@ -1093,6 +1093,7 @@ recording::context::set_str_option (enum gcc_jit_str_option opt,
     }
   free (m_str_options[opt]);
   m_str_options[opt] = value ? xstrdup (value) : NULL;
+  log_str_option (opt);
 }
 
 /* Set the given integer option for this context, or add an error if
@@ -1112,6 +1113,7 @@ recording::context::set_int_option (enum gcc_jit_int_option opt,
       return;
     }
   m_int_options[opt] = value;
+  log_int_option (opt);
 }
 
 /* Set the given boolean option for this context, or add an error if
@@ -1131,6 +1133,7 @@ recording::context::set_bool_option (enum gcc_jit_bool_option opt,
       return;
     }
   m_bool_options[opt] = value ? true : false;
+  log_bool_option (opt);
 }
 
 /* Add the given dumpname/out_ptr pair to this context's list of requested
@@ -1164,6 +1167,8 @@ recording::context::compile ()
 {
   JIT_LOG_SCOPE (get_logger ());
 
+  log_all_options ();
+
   validate ();
 
   if (errors_occurred ())
@@ -1192,6 +1197,8 @@ recording::context::compile_to_file (enum gcc_jit_output_kind output_kind,
 {
   JIT_LOG_SCOPE (get_logger ());
 
+  log_all_options ();
+
   validate ();
 
   if (errors_occurred ())
@@ -1378,6 +1385,72 @@ static const char * const
   "GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES"
 };
 
+
+/* Write the current value of all options to the log file (if any).  */
+
+void
+recording::context::log_all_options () const
+{
+  int opt_idx;
+
+  if (!get_logger ())
+    return;
+
+  for (opt_idx = 0; opt_idx < GCC_JIT_NUM_STR_OPTIONS; opt_idx++)
+    log_str_option ((enum gcc_jit_str_option)opt_idx);
+
+  for (opt_idx = 0; opt_idx < GCC_JIT_NUM_INT_OPTIONS; opt_idx++)
+    log_int_option ((enum gcc_jit_int_option)opt_idx);
+
+  for (opt_idx = 0; opt_idx < GCC_JIT_NUM_BOOL_OPTIONS; opt_idx++)
+    log_bool_option ((enum gcc_jit_bool_option)opt_idx);
+}
+
+/* Write the current value of the given string option to the
+   log file (if any).  */
+
+void
+recording::context::log_str_option (enum gcc_jit_str_option opt) const
+{
+  gcc_assert (opt < GCC_JIT_NUM_STR_OPTIONS);
+  if (get_logger ())
+    {
+      if (m_str_options[opt])
+	log ("%s: \"%s\"",
+	     str_option_reproducer_strings[opt],
+	     m_str_options[opt]);
+      else
+	log ("%s: NULL",
+	     str_option_reproducer_strings[opt]);
+    }
+}
+
+/* Write the current value of the given int option to the
+   log file (if any).  */
+
+void
+recording::context::log_int_option (enum gcc_jit_int_option opt) const
+{
+  gcc_assert (opt < GCC_JIT_NUM_INT_OPTIONS);
+  if (get_logger ())
+    log ("%s: %i",
+	 int_option_reproducer_strings[opt],
+	 m_int_options[opt]);
+}
+
+/* Write the current value of the given bool option to the
+   log file (if any).  */
+
+void
+recording::context::log_bool_option (enum gcc_jit_bool_option opt) const
+{
+  gcc_assert (opt < GCC_JIT_NUM_BOOL_OPTIONS);
+  if (get_logger ())
+    log ("%s: %s",
+	 bool_option_reproducer_strings[opt],
+	 m_bool_options[opt] ? "true" : "false");
+}
+
 /* Write C source code to PATH that attempts to replay the API
    calls made to this context (and its parents), for use in
    minimizing test cases for libgccjit.
diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h
index 0dd3164..439e7ce 100644
--- a/gcc/jit/jit-recording.h
+++ b/gcc/jit/jit-recording.h
@@ -256,6 +256,11 @@ public:
   get_all_requested_dumps (vec <recording::requested_dump> *out);
 
 private:
+  void log_all_options () const;
+  void log_str_option (enum gcc_jit_str_option opt) const;
+  void log_int_option (enum gcc_jit_int_option opt) const;
+  void log_bool_option (enum gcc_jit_bool_option opt) const;
+
   void validate ();
 
 private:
-- 
1.8.5.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]