зеркало из https://github.com/github/ruby.git
Skip mjit_wait if iseq is not a target
This commit is contained in:
Родитель
758ac834a2
Коммит
095972e799
14
mjit.c
14
mjit.c
|
@ -263,12 +263,26 @@ create_unit(const rb_iseq_t *iseq)
|
|||
iseq->body->jit_unit = unit;
|
||||
}
|
||||
|
||||
// Return true if given ISeq body should be compiled by MJIT
|
||||
static inline int
|
||||
mjit_target_iseq_p(struct rb_iseq_constant_body *body)
|
||||
{
|
||||
return (body->type == ISEQ_TYPE_METHOD || body->type == ISEQ_TYPE_BLOCK)
|
||||
&& !body->builtin_inline_p
|
||||
&& body->iseq_size < JIT_ISEQ_SIZE_THRESHOLD;
|
||||
}
|
||||
|
||||
static void
|
||||
mjit_add_iseq_to_process(const rb_iseq_t *iseq, const struct rb_mjit_compile_info *compile_info)
|
||||
{
|
||||
if (!mjit_enabled || pch_status == PCH_FAILED)
|
||||
return;
|
||||
|
||||
if (!mjit_target_iseq_p(iseq->body)) {
|
||||
iseq->body->jit_func = (mjit_func_t)NOT_COMPILED_JIT_ISEQ_FUNC; // skip mjit_wait
|
||||
return;
|
||||
}
|
||||
|
||||
RB_DEBUG_COUNTER_INC(mjit_add_iseq_to_process);
|
||||
iseq->body->jit_func = (mjit_func_t)NOT_READY_JIT_ISEQ_FUNC;
|
||||
create_unit(iseq);
|
||||
|
|
11
mjit.h
11
mjit.h
|
@ -107,15 +107,6 @@ extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body)
|
|||
// takes too much time to be compiled.
|
||||
#define JIT_ISEQ_SIZE_THRESHOLD 1000
|
||||
|
||||
// Return TRUE if given ISeq body should be compiled by MJIT
|
||||
static inline int
|
||||
mjit_target_iseq_p(struct rb_iseq_constant_body *body)
|
||||
{
|
||||
return (body->type == ISEQ_TYPE_METHOD || body->type == ISEQ_TYPE_BLOCK)
|
||||
&& !body->builtin_inline_p
|
||||
&& body->iseq_size < JIT_ISEQ_SIZE_THRESHOLD;
|
||||
}
|
||||
|
||||
# ifdef MJIT_HEADER
|
||||
NOINLINE(static COLDFUNC VALUE mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body));
|
||||
# else
|
||||
|
@ -129,7 +120,7 @@ mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_
|
|||
switch ((enum rb_mjit_iseq_func)func_i) {
|
||||
case NOT_ADDED_JIT_ISEQ_FUNC:
|
||||
RB_DEBUG_COUNTER_INC(mjit_exec_not_added);
|
||||
if (body->total_calls == mjit_opts.min_calls && mjit_target_iseq_p(body)) {
|
||||
if (body->total_calls == mjit_opts.min_calls) {
|
||||
rb_mjit_add_iseq_to_process(iseq);
|
||||
if (UNLIKELY(mjit_opts.wait)) {
|
||||
return rb_mjit_wait_call(ec, body);
|
||||
|
|
Загрузка…
Ссылка в новой задаче