summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashi.kokubun@shopify.com>2025-10-03 15:36:19 -0700
committerGitHub <noreply@github.com>2025-10-03 15:36:19 -0700
commit77331b99c606d187b6df32261bc99493484f36ac (patch)
tree647c61af2ae23e8b47ec154eb1a7406a7f0c3416
parent8eead759c1b2a93c66d80089ad9acf166f37d507 (diff)
ZJIT: Count CCallWithFrame as optimized_send_count (#14722)
-rw-r--r--zjit.rb1
-rw-r--r--zjit/src/codegen.rs2
-rw-r--r--zjit/src/stats.rs1
3 files changed, 4 insertions, 0 deletions
diff --git a/zjit.rb b/zjit.rb
index 1dccdefca2..b44154ad9c 100644
--- a/zjit.rb
+++ b/zjit.rb
@@ -172,6 +172,7 @@ class << RubyVM::ZJIT
:optimized_send_count,
:iseq_optimized_send_count,
:inline_cfunc_optimized_send_count,
+ :non_variadic_cfunc_optimized_send_count,
:variadic_cfunc_optimized_send_count,
], buf:, stats:, right_align: true, base: :send_count)
print_counters([
diff --git a/zjit/src/codegen.rs b/zjit/src/codegen.rs
index 0c720734da..b1a2cb6726 100644
--- a/zjit/src/codegen.rs
+++ b/zjit/src/codegen.rs
@@ -670,6 +670,8 @@ fn gen_patch_point(jit: &mut JITState, asm: &mut Assembler, invariant: &Invarian
/// Generate code for a C function call that pushes a frame
fn gen_ccall_with_frame(jit: &mut JITState, asm: &mut Assembler, cfunc: *const u8, args: Vec<Opnd>, cme: *const rb_callable_method_entry_t, state: &FrameState) -> lir::Opnd {
+ gen_incr_counter(asm, Counter::non_variadic_cfunc_optimized_send_count);
+
gen_prepare_non_leaf_call(jit, asm, state);
gen_push_frame(asm, args.len(), state, ControlFrame {
diff --git a/zjit/src/stats.rs b/zjit/src/stats.rs
index 3bfeb46e6c..323af0f3ed 100644
--- a/zjit/src/stats.rs
+++ b/zjit/src/stats.rs
@@ -157,6 +157,7 @@ make_counters! {
optimized_send {
iseq_optimized_send_count,
inline_cfunc_optimized_send_count,
+ non_variadic_cfunc_optimized_send_count,
variadic_cfunc_optimized_send_count,
}