From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16342 invoked by alias); 3 Feb 2015 19:33:27 -0000 Mailing-List: contact jit-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Subscribe: Sender: jit-owner@gcc.gnu.org Received: (qmail 16320 invoked by uid 89); 3 Feb 2015 19:33:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.98.5 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-Spam-User: qpsmtpd, 2 recipients X-HELO: mx1.redhat.com From: David Malcolm To: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [PATCH, committed] jit: option-logging Date: Thu, 01 Jan 2015 00:00:00 -0000 Message-Id: <1422992583-64184-1-git-send-email-dmalcolm@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-SW-Source: 2015-q1/txt/msg00056.txt.bz2 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 *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