1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test
k0kubun 8a15857a7f mjit_compile.c: use local variables for stack
if catch_except_p is FALSE. If catch_except_p is TRUE, stack values
should be on VM's stack when exception is thrown and the JIT-ed frame
is re-executed by VM's exception handler. If it's FALSE, the JIT-ed
frame won't be re-executed and don't need to keep values on VM's stack.

Using local variables allows us to reduce cfp->sp motion. Moving cfp->sp
is needed only for insns whose handles_frame? is false. So it improves
performance.

_mjit_compile_insn.erb: Prepare `stack_size` variable for GET_SP,
STACK_ADDR_FROM_TOP, TOPN macros. Share pc and sp motion partial view.
Use cancel handler created in mjit_compile.c.

_mjit_compile_send.erb: ditto. Also, when iseq->body->catch_except_p is
TRUE, this stops to call mjit_exec directly. I described the reason in
vm_insnhelper.h's comment for EXEC_EC_CFP.

_mjit_compile_pc_and_sp.erb: Shared logic for moving sp and pc. As you
can see from thsi file, when status->local_stack_p is TRUE and
insn.handles_frame? is false, moving sp is skipped. But if
insn.handles_frame? is true, values should be rolled back to VM's stack.
common.mk: add dependency for the file

_mjit_compile_insn_body.erb: Set sp value before canceling JIT on
DISPATCH_ORIGINAL_INSN. Replace GET_SP, STACK_ADDR_FROM_TOP, TOPN macros
for the case ocal_stack_p is TRUE and insn.handles_frame? is false.
In that case, values are not available on VM's stack and those macros
should be replaced.

mjit_compile.inc.erb: updated comments of macros which are supported by
JIT compiler. All references to `cfp->sp` should be replaced and thus
INC_SP, SET_SV, PUSH are no longer supported for now, because they are
not used now.

vm_exec.h: moved EXEC_EC_CFP definition to vm_insnhelper.h because it's
tighly coupled to CALL_METHOD.

vm_insnhelper.h: Have revised EXEC_EC_CFP definition moved from vm_exec.h.
Now it triggers mjit_exec for VM, and has the guard for catch_except_p
on JIT-ed code. See comments for details. CALL_METHOD delegates
triggering mjit_exec to EXEC_EC_CFP.

insns.def: Stopped using EXEC_EC_CFP for the case we don't want to
trigger mjit_exec. Those insns (defineclass, opt_call_c_function) are
not supported by JIT and it's safe to use RESTORE_REGS(), NEXT_INSN().
expandarray is changed to pass GET_SP() to replace the macro in
_mjit_compile_insn_body.erb.

vm_insnhelper.c: change to take sp for the above reason.

[close https://github.com/ruby/ruby/pull/1828]

This patch resurrects the performance which was attached in
[Feature #14235].

* Benchmark

Optcarrot (with configuration for benchmark_driver.gem)
https://github.com/benchmark-driver/optcarrot

$ benchmark-driver benchmark.yml --verbose 1 --rbenv 'before;before+JIT::before,--jit;after;after+JIT::after,--jit' --repeat-count 10
before: ruby 2.6.0dev (2018-03-04 trunk 62652) [x86_64-linux]
before+JIT: ruby 2.6.0dev (2018-03-04 trunk 62652) +JIT [x86_64-linux]
after: ruby 2.6.0dev (2018-03-04 local-variable.. 62652) [x86_64-linux]
last_commit=mjit_compile.c: use local variables for stack
after+JIT: ruby 2.6.0dev (2018-03-04 local-variable.. 62652) +JIT [x86_64-linux]
last_commit=mjit_compile.c: use local variables for stack
Calculating -------------------------------------
                         before  before+JIT       after   after+JIT
           optcarrot     53.552      59.680      53.697      63.358 fps

Comparison:
                        optcarrot
           after+JIT:        63.4 fps
          before+JIT:        59.7 fps - 1.06x  slower
               after:        53.7 fps - 1.18x  slower
              before:        53.6 fps - 1.18x  slower

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-04 07:04:40 +00:00
..
-ext- mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
base64
benchmark
bigdecimal $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
cgi
coverage test/coverage/test_coverage.rb: make the expected value the same as 2.4 2017-12-20 04:45:05 +00:00
csv test_features.rb: fix unused variable warning 2017-09-26 10:45:14 +00:00
date date_core.c: defensive code 2018-02-25 04:28:11 +00:00
dbm skip some tests so that no failure occurs in root privilege 2018-01-10 10:39:09 +00:00
digest Fix tests which fail with extra stderr output when a Thread dies 2017-12-12 18:44:21 +00:00
drb drb: use \A and \z 2017-12-30 12:10:43 +00:00
dtrace rename ruby-runner as bin/ruby 2017-09-15 17:42:00 +00:00
erb lib/erb.rb: Add uplevel to warn 2018-02-24 08:54:19 +00:00
etc test_etc.rb: fix test_getgrnam for duplicated group names 2017-09-29 17:19:37 +00:00
excludes
fiddle long long is a C99ism 2018-02-17 09:51:23 +00:00
fileutils Fix test-all tests to avoid creating report_on_exception warnings 2017-12-12 18:44:49 +00:00
gdbm Fix indent and use as skipped message instead of comment 2018-01-11 13:56:04 +00:00
io test/io/console/test_io_console.rb (test_oflush): Avoid race condition 2018-02-15 05:34:20 +00:00
irb skip some tests so that no failure occurs in root privilege 2018-01-10 10:39:09 +00:00
json
lib test_rubyoptions.rb: don't test --jit if not supported 2018-02-22 15:11:12 +00:00
logger revert r60999 2017-12-04 00:23:31 +00:00
matrix lib/matrix: Add hadamard_product/entrywise_product. 2017-11-20 02:18:43 +00:00
minitest
misc
mkmf a C source code must end with EOL 2018-02-17 10:04:22 +00:00
monitor Remove unnecessary require 'thread' 2017-10-08 07:00:01 +00:00
net net/pop: make modified strings mutable 2018-01-30 00:22:22 +00:00
nkf Fix test code of kconv 2017-09-15 16:56:16 +00:00
objspace io.c: encoding of ARGF.inplace_mode 2017-10-10 12:30:42 +00:00
open-uri open-uri defines URI.open defined as an alias. 2017-12-21 14:15:04 +00:00
openssl openssl: suppress report_on_exception warning 2017-12-15 08:19:32 +00:00
optparse optparse.rb: froze string literals 2018-01-26 03:41:04 +00:00
ostruct lib/ostruct.rb: Use FrozenError instead of RuntimeError. 2018-02-06 23:52:30 +00:00
pathname skip some tests so that no failure occurs in root privilege 2018-01-10 10:39:09 +00:00
psych Merge psych-3.0.2 from ruby/psych. 2017-12-19 09:44:33 +00:00
rdoc skip some tests so that no failure occurs in root privilege 2018-01-10 10:39:09 +00:00
readline $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
resolv fix for IPv6 env 2018-01-11 19:41:49 +00:00
rexml REXML: Fix a bug that unexpected methods can be called as a XPath function 2017-08-13 12:14:24 +00:00
rinda Fix test-all tests to avoid creating report_on_exception warnings 2017-12-12 18:44:49 +00:00
ripper Fix CMDARG manipulation 2018-02-22 12:51:41 +00:00
rss rss itunes: fix a bug that <itunes:explicit> value isn't fully supported 2017-10-22 16:03:57 +00:00
ruby mjit_compile.c: use local variables for stack 2018-03-04 07:04:40 +00:00
rubygems Remove unnecessary []s 2018-02-17 14:03:52 +00:00
scanf Fix bug about String#scanf("%a") 2017-10-21 12:34:13 +00:00
sdbm skip some tests so that no failure occurs in root privilege 2018-01-10 10:39:09 +00:00
shell
socket init.c: encode socket error message 2018-01-23 15:31:22 +00:00
stringio Add FrozenError as a subclass of RuntimeError 2017-12-12 00:46:34 +00:00
strscan strscan.c: add MatchData-like methods 2017-11-29 07:57:48 +00:00
syslog
testunit assertions.rb: fix return in assert_raise 2017-11-02 12:29:33 +00:00
thread mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
uri Allow empty path components in a URI [Bug #8352] 2017-12-14 01:11:28 +00:00
webrick mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
win32ole $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
yaml
zlib zlib.c: multiple arguments to write 2017-10-23 07:06:12 +00:00
colors
runner.rb the working directory may not be srcdir 2017-09-07 17:45:34 +00:00
test_abbrev.rb
test_cmath.rb
test_delegate.rb Add FrozenError as a subclass of RuntimeError 2017-12-12 00:46:34 +00:00
test_extlibs.rb
test_find.rb Fix indent and use as skipped message instead of comment 2018-01-11 13:56:04 +00:00
test_forwardable.rb Add test for Forwardable#def_delegator with r55366. 2018-02-01 09:07:16 +00:00
test_ipaddr.rb Import ipaddr 1.2.0 2017-10-21 13:34:19 +00:00
test_mutex_m.rb Remove unnecessary require 'thread' 2017-10-08 07:00:01 +00:00
test_observer.rb
test_open3.rb lib/open3.rb: accept IO-like object for :stdin_data argument. 2017-10-21 07:00:58 +00:00
test_pp.rb
test_prettyprint.rb
test_prime.rb
test_pstore.rb
test_pty.rb
test_rbconfig.rb
test_securerandom.rb Use \A and \z instead of ^ and $ 2017-10-22 09:16:54 +00:00
test_set.rb Add a new #filter alias for #select 2018-02-25 13:52:07 +00:00
test_shellwords.rb
test_singleton.rb
test_syslog.rb
test_tempfile.rb $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
test_time.rb Make Time.parse respect timezone offset seconds 2017-10-20 01:03:18 +00:00
test_timeout.rb Remove unnecessary require 'thread' 2017-10-08 07:00:01 +00:00
test_tmpdir.rb $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
test_tracer.rb
test_tsort.rb
test_unicode_normalize.rb
test_weakref.rb
test_win32api.rb