summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Gibbs <noah.gibbs@shopify.com>2021-09-22 16:04:37 +0100
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:41 -0400
commita0790e6335094e0124bae3d5b53ed2264fc7a791 (patch)
tree4784e4483616cfc56a5f9b2115c6d1814a0a5f7b
parent0c1aa17556357ca3cb5802d7a23965ed820973e4 (diff)
Break up callsite_not_simple into multiple cases.
-rw-r--r--yjit_codegen.c28
-rw-r--r--yjit_iface.h4
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
// 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)
// 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__;
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,