summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2022-07-06 11:13:22 -0400
committerGitHub <noreply@github.com>2022-07-06 11:13:22 -0400
commit3c61e1e77f9e501dd5ef19d6c661ceba6b84cac8 (patch)
tree4df2e385dbf4bd8681f0f7cef552b12b6e240485
parent5ef3c7ea2d1968c87f361b6615699b92cc6e5a9a (diff)
YJIT: add a counter for gc object refs in the machine code (#6089)
Add a counter for gc object refs in the machine code This is to gather data for the eventual implementation of a constant pool.
Notes
Notes: Merged-By: maximecb <maximecb@ruby-lang.org>
-rw-r--r--yjit.rb1
-rw-r--r--yjit/src/codegen.rs2
-rw-r--r--yjit/src/stats.rs18
3 files changed, 13 insertions, 8 deletions
diff --git a/yjit.rb b/yjit.rb
index b3c1efdbd4..15c84d0c61 100644
--- a/yjit.rb
+++ b/yjit.rb
@@ -211,6 +211,7 @@ module RubyVM::YJIT
$stderr.puts "constant_state_bumps: " + ("%10d" % stats[:constant_state_bumps])
$stderr.puts "inline_code_size: " + ("%10d" % stats[:inline_code_size])
$stderr.puts "outlined_code_size: " + ("%10d" % stats[:outlined_code_size])
+ $stderr.puts "num_gc_obj_refs: " + ("%10d" % stats[:num_gc_obj_refs])
$stderr.puts "total_exit_count: " + ("%10d" % total_exits)
$stderr.puts "total_insns_count: " + ("%10d" % total_insns_count)
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index cdd01221d4..12c97411b0 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -121,6 +121,8 @@ impl JITState {
pub fn add_gc_object_offset(self: &mut JITState, ptr_offset: u32) {
let mut gc_obj_vec: RefMut<_> = self.block.borrow_mut();
gc_obj_vec.add_gc_object_offset(ptr_offset);
+
+ incr_counter!(num_gc_obj_refs);
}
pub fn get_pc(self: &JITState) -> *mut VALUE {
diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs
index 6bad8db7e7..4118f894b4 100644
--- a/yjit/src/stats.rs
+++ b/yjit/src/stats.rs
@@ -218,6 +218,14 @@ make_counters! {
opt_getinlinecache_miss,
+ expandarray_splat,
+ expandarray_postarg,
+ expandarray_not_array,
+ expandarray_rhs_too_small,
+
+ gbpp_block_param_modified,
+ gbpp_block_handler_not_iseq,
+
binding_allocations,
binding_set,
@@ -237,17 +245,11 @@ make_counters! {
constant_state_bumps,
- expandarray_splat,
- expandarray_postarg,
- expandarray_not_array,
- expandarray_rhs_too_small,
-
- gbpp_block_param_modified,
- gbpp_block_handler_not_iseq,
-
// Currently, it's out of the ordinary (might be impossible) for YJIT to leave gaps in
// executable memory, so this should be 0.
exec_mem_non_bump_alloc,
+
+ num_gc_obj_refs,
}
//===========================================================================