summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2021-09-08 12:01:39 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:40 -0400
commit4b58d698b14752f4dfd405637df384c758cae396 (patch)
treeca3d3ae9e45d6ebba3aa78795c40d6ada9e5caf1
parent9bd6ce47454a03ad1cec422f36017bcae56790dd (diff)
Count interpreter instructions when -DYJIT_STATS=1
The interpreter instruction count was enabled based on RUBY_DEBUG as opposed to YJIT_STATS. In builds with YJIT_STATS=1 but RUBY_DEBUG=0, the count was not available. Move YJIT_STATS in yjit.h where declarations are expoed to code outside of YJIT. Also reduce the changes made to the interpreter for calling into YJIT's instruction counting function.
-rw-r--r--vm.c14
-rw-r--r--vm_insnhelper.h4
-rw-r--r--yjit.h6
3 files changed, 9 insertions, 15 deletions
diff --git a/vm.c b/vm.c
index 733c2c24d1..d4f555df6c 100644
--- a/vm.c
+++ b/vm.c
@@ -28,6 +28,7 @@
#include "internal/sanitizers.h"
#include "iseq.h"
#include "mjit.h"
+#include "yjit.h"
#include "ruby/st.h"
#include "ruby/vm.h"
#include "vm_core.h"
@@ -37,7 +38,6 @@
#include "vm_insnhelper.h"
#include "ractor_core.h"
#include "vm_sync.h"
-#include "yjit.h"
#include "builtin.h"
@@ -345,10 +345,6 @@ static void vm_collect_usage_insn(int insn);
static void vm_collect_usage_register(int reg, int isset);
#endif
-#if RUBY_DEBUG
-static void vm_yjit_collect_usage_insn(int insn);
-#endif
-
static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
@@ -4061,14 +4057,6 @@ MAYBE_UNUSED(static void (*ruby_vm_collect_usage_func_register)(int reg, int iss
#endif
-#if RUBY_DEBUG
-static void
-vm_yjit_collect_usage_insn(int insn)
-{
- rb_yjit_collect_vm_usage_insn(insn);
-}
-#endif
-
#if VM_COLLECT_USAGE_DETAILS
/* @param insn instruction number */
static void
diff --git a/vm_insnhelper.h b/vm_insnhelper.h
index 22a181f95a..459f567106 100644
--- a/vm_insnhelper.h
+++ b/vm_insnhelper.h
@@ -25,9 +25,9 @@ MJIT_SYMBOL_EXPORT_END
#define COLLECT_USAGE_OPERAND(insn, n, op) vm_collect_usage_operand((insn), (n), ((VALUE)(op)))
#define COLLECT_USAGE_REGISTER(reg, s) vm_collect_usage_register((reg), (s))
-#elif RUBY_DEBUG
+#elif YJIT_STATS
/* for --yjit-stats */
-#define COLLECT_USAGE_INSN(insn) vm_yjit_collect_usage_insn(insn)
+#define COLLECT_USAGE_INSN(insn) rb_yjit_collect_vm_usage_insn(insn)
#define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
#define COLLECT_USAGE_REGISTER(reg, s) /* none */
#else
diff --git a/yjit.h b/yjit.h
index 2844fb2511..e3dd3a2f05 100644
--- a/yjit.h
+++ b/yjit.h
@@ -5,6 +5,8 @@
#ifndef YJIT_H
#define YJIT_H 1
+#include "ruby/internal/config.h"
+#include "ruby_assert.h" // for RUBY_DEBUG
#include "vm_core.h"
#include "method.h"
@@ -26,6 +28,10 @@
#define YJIT_DUMP_MODE 0
#endif
+#ifndef YJIT_STATS
+# define YJIT_STATS RUBY_DEBUG
+#endif // ifndef YJIT_STATS
+
#ifndef rb_iseq_t
typedef struct rb_iseq_struct rb_iseq_t;
#define rb_iseq_t rb_iseq_t