1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/tool/ruby_vm/views
shyouhei d46ab95376 insns.def: refactor to avoid CALL_METHOD macro
These send and its variant instructions are the most frequently called
paths in the entire process.  Reducing macro expansions to make them
dedicated function called vm_sendish() is the main goal of this
changeset.  It reduces the size of vm_exec_coref from 25,552 bytes to
23,728 bytes on my machine.

I see no significant slowdown.

Fix: [GH-2056]

vanilla: ruby 2.6.0dev (2018-12-19 trunk 66449) [x86_64-darwin15]
ours: ruby 2.6.0dev (2018-12-19 refactor-send 66449) [x86_64-darwin15]
last_commit=insns.def: refactor to avoid CALL_METHOD macro
Calculating -------------------------------------
                         vanilla        ours
   vm2_defined_method     2.645M      2.823M i/s -      6.000M times in 5.109888s 4.783254s
           vm2_method     8.553M      8.873M i/s -      6.000M times in 1.579892s 1.524026s
   vm2_method_missing     3.772M      3.858M i/s -      6.000M times in 3.579482s 3.499220s
vm2_method_with_block     8.494M      8.944M i/s -      6.000M times in 1.589774s 1.509463s
      vm2_poly_method      0.571       0.607 i/s -       1.000 times in 3.947570s 3.733528s
   vm2_poly_method_ov      5.514       5.168 i/s -       1.000 times in 0.408156s 0.436169s
 vm3_clearmethodcache      2.875       2.837 i/s -       1.000 times in 0.783018s 0.793493s

Comparison:
                vm2_defined_method
                 ours:   2822555.4 i/s
              vanilla:   2644878.1 i/s - 1.07x  slower

                        vm2_method
                 ours:   8872947.8 i/s
              vanilla:   8553433.1 i/s - 1.04x  slower

                vm2_method_missing
                 ours:   3858192.3 i/s
              vanilla:   3772296.3 i/s - 1.02x  slower

             vm2_method_with_block
                 ours:   8943825.1 i/s
              vanilla:   8493955.0 i/s - 1.05x  slower

                   vm2_poly_method
                 ours:         0.6 i/s
              vanilla:         0.6 i/s - 1.06x  slower

                vm2_poly_method_ov
              vanilla:         5.5 i/s
                 ours:         5.2 i/s - 1.07x  slower

              vm3_clearmethodcache
              vanilla:         2.9 i/s
                 ours:         2.8 i/s - 1.01x  slower



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-26 00:59:37 +00:00
..
_attributes.erb
_c_expr.erb
_copyright.erb
_insn_entry.erb
_insn_len_info.erb
_insn_name_info.erb
_insn_operand_info.erb
_insn_stack_increase.erb
_insn_type_chars.erb
_leaf_helpers.erb Use friendlier terminology in leaf helpers 2018-11-11 01:25:33 +00:00
_mjit_compile_insn.erb insns.def: refactor to avoid CALL_METHOD macro 2018-12-26 00:59:37 +00:00
_mjit_compile_insn_body.erb insns.def: refactor to avoid CALL_METHOD macro 2018-12-26 00:59:37 +00:00
_mjit_compile_ivar.erb _mjit_compile_ivar.erb: cancel on undefined ivar 2018-10-24 15:41:14 +00:00
_mjit_compile_pc_and_sp.erb
_mjit_compile_send.erb Support targetting TracePoint [Feature #15289] 2018-11-26 18:16:39 +00:00
_notice.erb
_sp_inc_helpers.erb add _sp_inc_helpers.erb [ci skip] 2018-12-26 00:58:26 +00:00
_trace_instruction.erb
insns.inc.erb
insns_info.inc.erb add _sp_inc_helpers.erb [ci skip] 2018-12-26 00:58:26 +00:00
mjit_compile.inc.erb
opt_sc.inc.erb
optinsn.inc.erb
optunifs.inc.erb
vm.inc.erb
vmtc.inc.erb