[前][次][番号順一覧][スレッド一覧]

ruby-changes:69211

From: Noah <ko1@a...>
Date: Thu, 21 Oct 2021 08:23:44 +0900 (JST)
Subject: [ruby-changes:69211] a0790e6335 (master): Break up callsite_not_simple into multiple cases.

https://git.ruby-lang.org/ruby.git/commit/?id=a0790e6335

From a0790e6335094e0124bae3d5b53ed2264fc7a791 Mon Sep 17 00:00:00 2001
From: Noah Gibbs <noah.gibbs@s...>
Date: Wed, 22 Sep 2021 16:04:37 +0100
Subject: Break up callsite_not_simple into multiple cases.

---
 yjit_codegen.c | 28 ++++++++++++++++++++++++----
 yjit_iface.h   |  4 +++-
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/yjit_codegen.c b/yjit_codegen.c
index 29b9d21781..9045dffa2b 100644
--- a/yjit_codegen.c
+++ b/yjit_codegen.c
@@ -3574,8 +3574,16 @@ gen_send_general(jitstate_t *jit, ctx_t *ctx, struct rb_call_data *cd, rb_iseq_t https://github.com/ruby/ruby/blob/trunk/yjit_codegen.c#L3574
 
     // Don't JIT calls that aren't simple
     // Note, not using VM_CALL_ARGS_SIMPLE because sometimes we pass a block.
-    if ((vm_ci_flag(ci) & (VM_CALL_KW_SPLAT | VM_CALL_KWARG | VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG)) != 0) {
-        GEN_COUNTER_INC(cb, send_callsite_not_simple);
+    if ((vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT) != 0) {
+        GEN_COUNTER_INC(cb, send_callsite_args_splat);
+        return YJIT_CANT_COMPILE;
+    }
+    if ((vm_ci_flag(ci) & VM_CALL_KWARG) != 0) {
+        GEN_COUNTER_INC(cb, send_kw_block_arg);
+        return YJIT_CANT_COMPILE;
+    }
+    if ((vm_ci_flag(ci) & VM_CALL_ARGS_BLOCKARG) != 0) {
+        GEN_COUNTER_INC(cb, send_block_arg);
         return YJIT_CANT_COMPILE;
     }
 
@@ -3745,8 +3753,20 @@ gen_invokesuper(jitstate_t* jit, ctx_t* ctx, codeblock_t* cb) https://github.com/ruby/ruby/blob/trunk/yjit_codegen.c#L3753
 
     // Don't JIT calls that aren't simple
     // Note, not using VM_CALL_ARGS_SIMPLE because sometimes we pass a block.
-    if ((vm_ci_flag(ci) & (VM_CALL_KW_SPLAT | VM_CALL_KWARG | VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG)) != 0) {
-        GEN_COUNTER_INC(cb, send_callsite_not_simple);
+    if ((vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT) != 0) {
+        GEN_COUNTER_INC(cb, send_callsite_args_splat);
+        return YJIT_CANT_COMPILE;
+    }
+    if ((vm_ci_flag(ci) & VM_CALL_KWARG) != 0) {
+        GEN_COUNTER_INC(cb, send_kw_block_arg);
+        return YJIT_CANT_COMPILE;
+    }
+    if ((vm_ci_flag(ci) & VM_CALL_KW_SPLAT) != 0) {
+        GEN_COUNTER_INC(cb, send_kw_splat);
+        return YJIT_CANT_COMPILE;
+    }
+    if ((vm_ci_flag(ci) & VM_CALL_ARGS_BLOCKARG) != 0) {
+        GEN_COUNTER_INC(cb, send_block_arg);
         return YJIT_CANT_COMPILE;
     }
 
diff --git a/yjit_iface.h b/yjit_iface.h
index 946ab5bb85..ea57dc1282 100644
--- a/yjit_iface.h
+++ b/yjit_iface.h
@@ -38,8 +38,10 @@ static char yjit_counter_names[] = #__VA_ARGS__; https://github.com/ruby/ruby/blob/trunk/yjit_iface.h#L38
 YJIT_DECLARE_COUNTERS(
     exec_instruction,
 
-    send_callsite_not_simple,
+    send_keywords,
     send_kw_splat,
+    send_args_splat,
+    send_block_arg,
     send_ivar_set_method,
     send_zsuper_method,
     send_undef_method,
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]