diff options
author | Noah Gibbs <noah.gibbs@shopify.com> | 2021-09-22 16:04:37 +0100 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:41 -0400 |
commit | a0790e6335094e0124bae3d5b53ed2264fc7a791 (patch) | |
tree | 4784e4483616cfc56a5f9b2115c6d1814a0a5f7b /yjit_codegen.c | |
parent | 0c1aa17556357ca3cb5802d7a23965ed820973e4 (diff) | |
download | ruby-a0790e6335094e0124bae3d5b53ed2264fc7a791.tar.gz |
Break up callsite_not_simple into multiple cases.
Diffstat (limited to 'yjit_codegen.c')
-rw-r--r-- | yjit_codegen.c | 28 |
1 files changed, 24 insertions, 4 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; } |