diff options
author | tarui <tarui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-05-11 12:50:38 +0000 |
---|---|---|
committer | tarui <tarui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-05-11 12:50:38 +0000 |
commit | 938f9066cb0a2eca20ced81b82f23a9444b8c5d5 (patch) | |
tree | 94e8ea351d2be63dac3c3918b4005a12f6e9b79f /iseq.c | |
parent | ddd9f2310a476cfcd24d854466b7d0eac5216607 (diff) | |
download | ruby-938f9066cb0a2eca20ced81b82f23a9444b8c5d5.tar.gz |
* compile.c (iseq_compile_each): share InlineCache during same
instance variable accesses. Reducing memory consumption,
rasing cache hit rate and rasing branch prediction hit rate
are expected. A part of [Bug #12274].
* iseq.h (struct iseq_compile_data): introduce instance
variable IC table for sharing.
* iseq.c (prepare_iseq_build, compile_data_free):
construct/destruct above table.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -58,6 +58,8 @@ compile_data_free(struct iseq_compile_data *compile_data) ruby_xfree(cur); cur = next; } + st_free_table(compile_data->ivar_cache_table); + ruby_xfree(compile_data); } } @@ -298,6 +300,8 @@ prepare_iseq_build(rb_iseq_t *iseq, ISEQ_COMPILE_DATA(iseq)->option = option; ISEQ_COMPILE_DATA(iseq)->last_coverable_line = -1; + ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = st_init_numtable(); + if (option->coverage_enabled) { VALUE coverages = rb_get_coverages(); if (RTEST(coverages)) { |