ruby/tool
k0kubun ddb65f0b03 mjit_compile.inc.erb: replace opt_key insn
with opt_send_without_block insn if call cache has valid ISeq.
If the receiver is not optimized target of opt_key (i.e. Hash or Array),
it triggers JIT cancel and it would be slow.

This change allows JIT to drop the check for Hash/Array and continue to
execute JIT even if the receiver is not Hash or Array.

See the following benchmark results. It's not improved so much, but it
would be effective when we achieve Ruby method inlining in
_mjit_compile_send.erb.

* Micro benchmark

Given the following bench.rb,

```
class HashWithIndifferentAccess < Hash
  def []=(key, value)
    super(key.to_s, value)
  end

  def [](key)
    super(key.to_s)
  end
end

indhash = HashWithIndifferentAccess.new
indhash[:foo] = 'bar'
key = 'foo'

100000000.times do
  indhash[key]
end
```

** before

```
$ time ./ruby --disable-gems --jit-verbose=1 /tmp/bench.rb
JIT success (31.4ms): block in <main>@/tmp/bench.rb:15 -> /tmp/_ruby_mjit_p18206u0.c
JIT success (669.3ms): []@/tmp/bench.rb:6 -> /tmp/_ruby_mjit_p18206u1.c
Successful MJIT finish
./ruby --disable-gems --jit-verbose=1 /tmp/bench.rb  12.21s user 0.04s system 107% cpu 11.394 total
```

** after

```
$ time ./ruby --disable-gems --jit-verbose=1 /tmp/bench.rb
JIT success (41.0ms): block in <main>@/tmp/bench.rb:15 -> /tmp/_ruby_mjit_p17293u0.c
JIT success (679.0ms): []@/tmp/bench.rb:6 -> /tmp/_ruby_mjit_p17293u1.c
Successful MJIT finish
./ruby --disable-gems --jit-verbose=1 /tmp/bench.rb  11.54s user 0.06s system 108% cpu 10.726 total
```

The execution time is shortened.

* optcarrot benchmark

Optcarrot has no room to be improved by this change. Almost nothing is changed.

fps: 59.54 (before) -> 59.51 (after)

* discourse benchmark

I expected this to be improved a little, but it isn't too.

** before (JIT)

```
categories_admin:
  50: 12
  75: 13
  90: 14
  99: 22
home_admin:
  50: 12
  75: 13
  90: 16
  99: 22
topic_admin:
  50: 12
  75: 13
  90: 15
  99: 21
categories:
  50: 18
  75: 19
  90: 23
  99: 27
home:
  50: 3
  75: 4
  90: 4
  99: 12
topic:
  50: 11
  75: 11
  90: 14
  99: 20
```

** after (JIT)

```
categories_admin:
  50: 12
  75: 12
  90: 16
  99: 24
home_admin:
  50: 12
  75: 12
  90: 14
  99: 21
topic_admin:
  50: 12
  75: 13
  90: 16
  99: 21
categories:
  50: 17
  75: 18
  90: 23
  99: 32
home:
  50: 3
  75: 4
  90: 4
  99: 10
topic:
  50: 11
  75: 12
  90: 13
  99: 20
```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-13 15:58:38 +00:00
..
m4 deal with aclocal(1) 2018-02-06 02:08:13 +00:00
ruby_vm mjit_compile.inc.erb: replace opt_key insn 2018-02-13 15:58:38 +00:00
test * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
asm_parse.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
bisect.sh Fix cmd is referenced but not assigned 2016-10-06 12:15:00 +00:00
build-transcode
change_maker.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
checksum.rb checksum.rb: check the target 2015-05-07 07:09:43 +00:00
colorize.rb distinguish pass and fail by highlight [ci skip] 2017-10-14 02:17:07 +00:00
downloader.rb tool/downloader.rb: retry SocketError 2018-02-05 13:24:00 +00:00
enc-emoji-citrus-gen.rb * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
enc-emoji4unicode.rb * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
enc-unicode.rb support gperf 3.1 2017-12-08 05:51:19 +00:00
eval.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
expand-config.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
extlibs.rb downloader cache 2017-05-21 16:45:35 +00:00
fake.rb fake.rb: set libdir 2017-12-27 01:26:22 +00:00
fetch-bundled_gems.rb test-bundled-gems-fetch 2017-10-25 23:35:46 +00:00
file2lastrev.rb file2lastrev.rb: suppress_not_found 2017-12-06 11:18:53 +00:00
gem-unpack.rb * tool/downloader.rb: Removed verification of gem certification. 2016-10-12 06:24:59 +00:00
gen_dummy_probes.rb probes.dmyh: remove preprocessor directives 2016-07-06 05:03:14 +00:00
gen_ruby_tapset.rb get rid of ambiguous parentheses warnings 2016-11-29 16:06:54 +00:00
generate-backport-changelog.rb Missed `#` in usage 2017-08-09 08:17:52 +00:00
generic_erb.rb generic_erb.rb: -i option 2017-10-01 02:39:22 +00:00
git-refresh git-refresh: fix for Solaris 2017-04-30 10:53:42 +00:00
gperf.sed gperf.sed: static declarations 2017-12-15 14:42:43 +00:00
id2token.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
ifchange ifchange: --debug option 2018-02-08 02:08:27 +00:00
insns2vm.rb insns2vm.rb: make #generate_parser private 2018-01-27 02:14:20 +00:00
install-sh configure.ac 2017-09-29 13:21:17 +00:00
jisx0208.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
make-snapshot Fixed conflicted variables. v is already used another condition. 2017-10-25 06:58:24 +00:00
make_hgraph.rb * tool/make_hgraph.rb: added. 2015-05-29 08:39:50 +00:00
mdoc2man.rb Add support for the `Lk` macro to tool/mdoc2man.rb 2016-09-23 12:40:16 +00:00
merger.rb aliases 2017-12-16 01:56:14 +00:00
mk_call_iseq_optimized.rb mk_call_iseq_optimized.rb: add mode string [ci skip] 2017-11-09 23:02:52 +00:00
mkconfig.rb mkconfig.rb: hide MJIT configurations 2018-02-08 15:19:01 +00:00
mkrunnable.rb rename ruby-runner as bin/ruby 2017-09-15 17:42:00 +00:00
node_name.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
parse.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
prereq.status extract prereq.status 2017-05-07 13:06:34 +00:00
probes_to_wiki.rb probes_to_wiki.rb: fix comment and reduce unnecessary array 2013-07-11 01:46:40 +00:00
pull-latest-mspec-spec Adapt tools to follow spec/rubyspec => spec/ruby rename 2017-09-20 20:19:54 +00:00
rbinstall.rb tool/rbinstall.rb: allow owner to have write permissions 2018-01-05 09:41:21 +00:00
rbuninstall.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
redmine-backporter.rb * tool/redmine-backporter.rb (show): just report and ignore if a feature ticket 2017-07-07 02:14:57 +00:00
release.sh * tool/release.sh: BRE accepts \{m,\} expression. use it for future many-digits 2016-04-01 03:27:17 +00:00
rmdirs tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
run-gcov.rb tool/run-gcov.rb: ignore rubyspec_temp directory 2017-07-04 16:02:18 +00:00
run-lcov.rb Revamp method coverage to support define_method 2017-12-05 07:16:42 +00:00
runruby.rb tool/runruby.rb: fix RUNRUBY_USE_GDB case 2017-11-07 11:21:09 +00:00
strip-rdoc.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
sync_default_gems.rb Postponing the Bundler merge. 2017-12-22 23:08:05 +00:00
test-coverage.rb ext/coverage/coverage.c: remove COVERAGE_EXPERIMENTAL_MODE 2017-12-12 00:20:58 +00:00
transcode-tblgen.rb transcode-tblgen.rb: dup literal string 2016-10-28 14:18:50 +00:00
transform_mjit_header.rb common.mk: add comments about r62355 [ci skip] 2018-02-11 05:29:13 +00:00
update-deps mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
vcs.rb vcs.rb: dryrun: option of GIT::SVN#commit 2018-02-10 06:42:35 +00:00
vpath.rb prelude.c.tmpl: strip prefix 2014-11-19 01:08:00 +00:00
vtlh.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
ytab.sed more ytab.sed fixes 2018-01-15 02:39:32 +00:00