From 44916ec448373c56b02a8430da7f87af7febfe0f Mon Sep 17 00:00:00 2001 From: tarui Date: Wed, 11 May 2016 12:50:38 +0000 Subject: * 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 --- iseq.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'iseq.c') diff --git a/iseq.c b/iseq.c index 184e56d08d..2a4d58e611 100644 --- a/iseq.c +++ b/iseq.c @@ -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)) { -- cgit v1.2.3