From 7561db8c009bb79a75024fa4ed0350bfb3d0626c Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sat, 20 Jun 2020 17:13:03 -0700 Subject: Introduce Primitive.attr! to annotate 'inline' (#3242) [Feature #15589] --- mjit_compile.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'mjit_compile.c') diff --git a/mjit_compile.c b/mjit_compile.c index fe5c2413e4..c4c31aa251 100644 --- a/mjit_compile.c +++ b/mjit_compile.c @@ -374,7 +374,12 @@ inlinable_iseq_p(const struct rb_iseq_constant_body *body) // * Do not require `cfp->sp` motion // * Do not move `cfp->pc` // * Do not read any `cfp->pc` - if (insn != BIN(leave) && insn_may_depend_on_sp_or_pc(insn, body->iseq_encoded + (pos + 1))) + if (insn == BIN(invokebuiltin) || insn == BIN(opt_invokebuiltin_delegate) || insn == BIN(opt_invokebuiltin_delegate_leave)) { + // builtin insn's inlinability is handled by `Primitive.attr! 'inline'` per iseq + if (!body->builtin_inline_p) + return false; + } + else if (insn != BIN(leave) && insn_may_depend_on_sp_or_pc(insn, body->iseq_encoded + (pos + 1))) return false; // At this moment, `cfp->ep` in an inlined method is not working. switch (insn) { -- cgit v1.2.3