summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zjit.rb2
-rw-r--r--zjit/src/codegen.rs6
-rw-r--r--zjit/src/stats.rs4
3 files changed, 12 insertions, 0 deletions
diff --git a/zjit.rb b/zjit.rb
index 42cfe1cb91..e3d9d4c728 100644
--- a/zjit.rb
+++ b/zjit.rb
@@ -64,6 +64,8 @@ class << RubyVM::ZJIT
:vm_write_sp_count,
:vm_write_locals_count,
:vm_write_stack_count,
+ :vm_write_to_parent_iseq_local_count,
+ :vm_read_from_parent_iseq_local_count,
:code_region_bytes,
:side_exit_count,
diff --git a/zjit/src/codegen.rs b/zjit/src/codegen.rs
index 165e68c791..e0fd6cf2bd 100644
--- a/zjit/src/codegen.rs
+++ b/zjit/src/codegen.rs
@@ -532,6 +532,9 @@ fn gen_defined(jit: &JITState, asm: &mut Assembler, op_type: usize, obj: VALUE,
/// We generate this instruction with level=0 only when the local variable is on the heap, so we
/// can't optimize the level=0 case using the SP register.
fn gen_getlocal_with_ep(asm: &mut Assembler, local_ep_offset: u32, level: u32) -> lir::Opnd {
+ if level > 0 {
+ gen_incr_counter(asm, Counter::vm_read_from_parent_iseq_local_count);
+ }
let ep = gen_get_ep(asm, level);
let offset = -(SIZEOF_VALUE_I32 * i32::try_from(local_ep_offset).unwrap_or_else(|_| panic!("Could not convert local_ep_offset {local_ep_offset} to i32")));
asm.load(Opnd::mem(64, ep, offset))
@@ -541,6 +544,9 @@ fn gen_getlocal_with_ep(asm: &mut Assembler, local_ep_offset: u32, level: u32) -
/// We generate this instruction with level=0 only when the local variable is on the heap, so we
/// can't optimize the level=0 case using the SP register.
fn gen_setlocal_with_ep(asm: &mut Assembler, val: Opnd, val_type: Type, local_ep_offset: u32, level: u32) {
+ if level > 0 {
+ gen_incr_counter(asm, Counter::vm_write_to_parent_iseq_local_count);
+ }
let ep = gen_get_ep(asm, level);
// When we've proved that we're writing an immediate,
diff --git a/zjit/src/stats.rs b/zjit/src/stats.rs
index 0a0daa5d9c..6fed5cf559 100644
--- a/zjit/src/stats.rs
+++ b/zjit/src/stats.rs
@@ -156,6 +156,10 @@ make_counters! {
vm_write_sp_count,
vm_write_locals_count,
vm_write_stack_count,
+ vm_write_to_parent_iseq_local_count,
+ vm_read_from_parent_iseq_local_count,
+ // TODO(max): Implement
+ // vm_reify_stack_count,
}
/// Increase a counter by a specified amount