diff options
| author | Max Bernstein <ruby@bernsteinbear.com> | 2025-09-19 09:01:05 -0400 |
|---|---|---|
| committer | Max Bernstein <tekknolagi@gmail.com> | 2025-09-19 12:00:39 -0400 |
| commit | d7ad44613723201a4c218aabae5baa7585a9867e (patch) | |
| tree | 4476ddae9524d318488a16906eab6ba3e498409a | |
| parent | f0702c5aa32aa7092a4bb6c0c3e5863c4411e22d (diff) | |
ZJIT: Count method sends where method lookup fails
| -rw-r--r-- | zjit/src/hir.rs | 4 | ||||
| -rw-r--r-- | zjit/src/stats.rs | 2 |
2 files changed, 6 insertions, 0 deletions
diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs index 1fdef0e404..08bdd5311f 100644 --- a/zjit/src/hir.rs +++ b/zjit/src/hir.rs @@ -481,6 +481,7 @@ pub enum MethodType { Optimized, Missing, Refined, + Null, } impl From<u32> for MethodType { @@ -1852,6 +1853,9 @@ impl Function { // Do method lookup let mut cme = unsafe { rb_callable_method_entry(klass, mid) }; if cme.is_null() { + if let Insn::SendWithoutBlock { def_type: insn_def_type, .. } = &mut self.insns[insn_id.0] { + *insn_def_type = Some(MethodType::Null); + } self.push_insn_id(block, insn_id); continue; } // Load an overloaded cme if applicable. See vm_search_cc(). diff --git a/zjit/src/stats.rs b/zjit/src/stats.rs index 6fed5cf559..012b8be250 100644 --- a/zjit/src/stats.rs +++ b/zjit/src/stats.rs @@ -150,6 +150,7 @@ make_counters! { send_fallback_optimized, send_fallback_missing, send_fallback_refined, + send_fallback_null, // Writes to the VM frame vm_write_pc_count, @@ -263,6 +264,7 @@ pub fn send_fallback_counter(def_type: crate::hir::MethodType) -> Counter { Optimized => send_fallback_optimized, Missing => send_fallback_missing, Refined => send_fallback_refined, + Null => send_fallback_null, } } |
