diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2022-12-27 23:57:16 -0800 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-05 22:11:20 -0800 |
commit | 5760f7fd3c977b610ed3c8281eb2533b0fde2cbe (patch) | |
tree | 4f5defa187656a3279ac6066e924a6791f459777 | |
parent | e4a824f7695a8de9afb90978ccda038b7d280372 (diff) | |
download | ruby-5760f7fd3c977b610ed3c8281eb2533b0fde2cbe.tar.gz |
Skip compiling at_exit without --mjit-stats
-rw-r--r-- | lib/ruby_vm/mjit/stats.rb | 6 | ||||
-rw-r--r-- | mjit.c | 8 | ||||
-rw-r--r-- | mjit.h | 6 | ||||
-rw-r--r-- | mjit.rb | 4 | ||||
-rw-r--r-- | ruby.c | 2 |
5 files changed, 16 insertions, 10 deletions
diff --git a/lib/ruby_vm/mjit/stats.rb b/lib/ruby_vm/mjit/stats.rb index 263948bc0e..684ca61f20 100644 --- a/lib/ruby_vm/mjit/stats.rb +++ b/lib/ruby_vm/mjit/stats.rb @@ -27,12 +27,6 @@ module RubyVM::MJIT stats end - at_exit do - if C.mjit_opts.stats - print_stats - end - end - class << self private @@ -63,6 +63,7 @@ struct mjit_options mjit_opts; // true if MJIT is enabled. bool mjit_enabled = false; +bool mjit_stats_enabled = false; // true if JIT-ed code should be called. When `ruby_vm_event_enabled_global_flags & ISEQ_TRACE_EVENTS` // and `mjit_call_p == false`, any JIT-ed code execution is cancelled as soon as possible. bool mjit_call_p = false; @@ -394,6 +395,13 @@ mjit_finish(bool close_handle_p) // TODO: implement } +// Same as `RubyVM::MJIT::C.enabled?`, but this is used before mjit_init. +static VALUE +mjit_stats_enabled_p(rb_execution_context_t *ec, VALUE self) +{ + return RBOOL(mjit_stats_enabled); +} + #include "mjit.rbinc" #endif // USE_MJIT @@ -125,11 +125,8 @@ extern void rb_mjit_before_ractor_spawn(void); extern void rb_mjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events); extern void rb_mjit_collect_vm_usage_insn(int insn); -# ifdef MJIT_HEADER -#define mjit_enabled true -# else // MJIT_HEADER extern bool mjit_enabled; -# endif // MJIT_HEADER +extern bool mjit_stats_enabled; VALUE mjit_pause(bool wait_p); VALUE mjit_resume(void); void mjit_finish(bool close_handle_p); @@ -150,6 +147,7 @@ static inline void rb_mjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic static inline void rb_mjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events) {} #define mjit_enabled false +#define mjit_stats_enabled false static inline VALUE mjit_pause(bool wait_p){ return Qnil; } // unreachable static inline VALUE mjit_resume(void){ return Qnil; } // unreachable static inline void mjit_finish(bool close_handle_p){} @@ -13,6 +13,10 @@ module RubyVM::MJIT def self.resume Primitive.cexpr! 'mjit_resume()' end + + if Primitive.mjit_stats_enabled_p + at_exit { print_stats } + end end if RubyVM::MJIT.enabled? @@ -1615,6 +1615,8 @@ ruby_opt_init(ruby_cmdline_options_t *opt) // rb_call_builtin_inits depends on RubyVM::MJIT.enabled? if (opt->mjit.on) mjit_enabled = true; + if (opt->mjit.stats) + mjit_stats_enabled = true; #endif Init_ext(); /* load statically linked extensions before rubygems */ |