diff options
author | Jeremy Evans <[email protected]> | 2021-11-18 15:10:20 -0800 |
---|---|---|
committer | <[email protected]> | 2021-11-18 15:10:20 -0800 |
commit | b08dacfea39ad8da3f1fd7fdd0e4538cc892ec44 () | |
tree | 0e3ab7e2f068ce840aaa4e3cbb46e2561a7c153e /benchmark/vm_dstr_sym.rb | |
parent | 4adb012926f8bd6011168327d8832cf19976de40 (diff) |
Optimize dynamic string interpolation for symbol/true/false/nil/0-9
This provides a significant speedup for symbol, true, false, nil, and 0-9, class/module, and a small speedup in most other cases. Speedups (using included benchmarks): :symbol :: 60% 0-9 :: 50% Class/Module :: 50% nil/true/false :: 20% integer :: 10% [] :: 10% "" :: 3% One reason this approach is faster is it reduces the number of VM instructions for each interpolated value. Initial idea, approach, and benchmarks from Eric Wong. I applied the same approach against the master branch, updating it to handle the significant internal changes since this was first proposed 4 years ago (such as CALL_INFO/CALL_CACHE -> CALL_DATA). I also expanded it to optimize true/false/nil/0-9/class/module, and added handling of missing methods, refined methods, and RUBY_DEBUG. This renames the tostring insn to anytostring, and adds an objtostring insn that implements the optimization. This requires making a few functions non-static, and adding some non-static functions. This disables 4 YJIT tests. Those tests should be reenabled after YJIT optimizes the new objtostring insn. Implements [Feature #13715] Co-authored-by: Eric Wong <[email protected]> Co-authored-by: Alan Wu <[email protected]> Co-authored-by: Yusuke Endoh <[email protected]> Co-authored-by: Koichi Sasada <[email protected]>
Notes: Merged: https://.com/ruby/ruby/pull/5002 Merged-By: jeremyevans <[email protected]>
-rw-r--r-- | benchmark/vm_dstr_sym.rb | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -0,0 +1,6 @@ |