mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* vm_insnhelper.c (INLINE): define as inline
when it is optimized.
define as `static inline` when it is not optimized to keep the symbol generated. * vm_insnhelper.c (vm_getivar): use `INLINE` to force inline so that a compiler inlines it into vm_getinstancevariable and optimizes out is_attr and related branches. * vm_insnhelper.c (vm_getivar): use `inline` to recommend inline. Without this vm1_ivar_set is degraded. benchmark results: minimum results in each 5 measurements. Execution time (sec) name ruby 2.4.0dev (2016-04-23 trunk 54727) [x86_64-linux] ruby 2.4.0dev (2016-04-23 trunk 54733) [x86_64-linux] built-ruby loop_whileloop 0.641 0.642 0.646 vm1_ivar* 1.002 0.999 0.831 vm1_ivar_set* 0.369 1.106 0.362 Speedup ratio: compare with the result of `ruby 2.4.0dev (2016-04-23 trunk 54727) [x86_64-linux]' (greater is better) name ruby 2.4.0dev (2016-04-23 trunk 54733) [x86_64-linux] built-ruby loop_whileloop 0.998 0.991 vm1_ivar* 1.003 1.205 vm1_ivar_set* 0.334 1.018 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9afc312b4f
commit
65a1cdafc8
2 changed files with 38 additions and 3 deletions
32
ChangeLog
32
ChangeLog
|
@ -1,3 +1,35 @@
|
|||
Sun Apr 24 04:21:27 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* vm_insnhelper.c (INLINE): define as `inline` when it is optimized.
|
||||
define as `static inline` when it is not optimized to keep
|
||||
the symbol generated.
|
||||
|
||||
* vm_insnhelper.c (vm_getivar): use `INLINE` to force inline
|
||||
so that a compiler inlines it into vm_getinstancevariable
|
||||
and optimizes out is_attr and related branches.
|
||||
|
||||
* vm_insnhelper.c (vm_getivar): use `inline` to recommend inline.
|
||||
Without this vm1_ivar_set is degraded.
|
||||
|
||||
benchmark results:
|
||||
minimum results in each 5 measurements.
|
||||
Execution time (sec)
|
||||
name ruby 2.4.0dev (2016-04-23 trunk 54727) [x86_64-linux] ruby 2.4.0dev (2016-04-23 trunk 54733) [x86_64-linux] built-ruby
|
||||
loop_whileloop 0.641 0.642 0.646
|
||||
vm1_ivar* 1.002 0.999 0.831
|
||||
vm1_ivar_set* 0.369 1.106 0.362
|
||||
|
||||
Speedup ratio: compare with the result of `ruby 2.4.0dev (2016-04-23
|
||||
trunk 54727) [x86_64-linux]' (greater is better)
|
||||
name ruby 2.4.0dev (2016-04-23 trunk 54733) [x86_64-linux]
|
||||
built-ruby
|
||||
loop_whileloop
|
||||
0.998 0.991
|
||||
vm1_ivar*
|
||||
1.003 1.205
|
||||
vm1_ivar_set*
|
||||
0.334 1.018
|
||||
|
||||
Sat Apr 23 18:01:21 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* vm_insnhelper.c (vm_getivar): specify inline instead of static inline.
|
||||
|
|
|
@ -18,8 +18,11 @@
|
|||
|
||||
/* control stack frame */
|
||||
|
||||
#ifndef INLINE
|
||||
#undef INLINE
|
||||
#ifdef __OPTIMIZE__
|
||||
#define INLINE inline
|
||||
#else
|
||||
#define INLINE static inline
|
||||
#endif
|
||||
|
||||
static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_thread_t *th, const rb_control_frame_t *cfp);
|
||||
|
@ -774,7 +777,7 @@ vm_search_const_defined_class(const VALUE cbase, ID id)
|
|||
#define USE_IC_FOR_IVAR 1
|
||||
#endif
|
||||
|
||||
static VALUE
|
||||
INLINE VALUE
|
||||
vm_getivar(VALUE obj, ID id, IC ic, struct rb_call_cache *cc, int is_attr)
|
||||
{
|
||||
#if USE_IC_FOR_IVAR
|
||||
|
@ -824,7 +827,7 @@ vm_getivar(VALUE obj, ID id, IC ic, struct rb_call_cache *cc, int is_attr)
|
|||
return rb_ivar_get(obj, id);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
static inline VALUE
|
||||
vm_setivar(VALUE obj, ID id, VALUE val, IC ic, struct rb_call_cache *cc, int is_attr)
|
||||
{
|
||||
#if USE_IC_FOR_IVAR
|
||||
|
|
Loading…
Add table
Reference in a new issue