summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/views/mjit_compile.inc.erb
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-16 17:02:16 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-16 17:02:16 +0000
commitd71b78575b08f55d35194b2c091719b2c4463ea3 (patch)
treedd0dba7549e3bc80ddc70c24c7e10120b5acf54e /tool/ruby_vm/views/mjit_compile.inc.erb
parentb914166fcdba3faf5d4cb5e3a18d49691546ce21 (diff)
Introduce frame-omitted method inlining
for ISeq including only leaf and no-handles_sp insns except leaf. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool/ruby_vm/views/mjit_compile.inc.erb')
-rw-r--r--tool/ruby_vm/views/mjit_compile.inc.erb6
1 files changed, 6 insertions, 0 deletions
diff --git a/tool/ruby_vm/views/mjit_compile.inc.erb b/tool/ruby_vm/views/mjit_compile.inc.erb
index a3e29116cf..1812dabf4a 100644
--- a/tool/ruby_vm/views/mjit_compile.inc.erb
+++ b/tool/ruby_vm/views/mjit_compile.inc.erb
@@ -71,6 +71,12 @@ switch (insn) {
fprintf(stderr, "MJIT warning: Unexpected JIT stack_size on leave: %d\n", b->stack_size);
status->success = false;
}
+% # Special leave for an inlined call.
+ if (status->inlined_iseqs == NULL) { // the current ISeq is being inlined
+ fprintf(f, " return stack[0];\n");
+ b->stack_size += <%= insn.call_attribute('sp_inc') %>;
+ break;
+ }
% end
%
% # Main insn implementation generated by insns.def