summaryrefslogtreecommitdiff
path: root/tool
AgeCommit message (Collapse)Author
2020-08-21Promote erb to default gemsHiroshi SHIBATA
2020-08-21Promote rinda to default gemsHiroshi SHIBATA
2020-08-20Promote find to default gemsHiroshi SHIBATA
2020-08-20Promote set to default gemsHiroshi SHIBATA
2020-08-11Use colorize.rb for non-capable terminalsNobuyoshi Nakada
2020-08-11Add default color for each instanceNobuyoshi Nakada
2020-08-11tool/prelude.c.tmpl: use RubyVM::CEscape卜部昌平
Do not repeat yourself. Notes: Merged: https://github.com/ruby/ruby/pull/3405
2020-08-11RubyVM::CEscape#rstring2cstr: do not escape '卜部昌平
A single quote "is representable either by itself or by the escape sequence", according to ISO/IEC 9899 (checked all versions). So this is not a bug fix. But the generated output is a bit readable without backslashes. Notes: Merged: https://github.com/ruby/ruby/pull/3405
2020-08-05Fixed the inconsistency gemspec location with net-* gems.Hiroshi SHIBATA
2020-08-03Followed up b2d96abb42abbe2e01f010ffc9ac51f0f9a50002 for net-ftp.Hiroshi SHIBATA
2020-07-30Promote io-nonblock to the default gems.Hiroshi SHIBATA
2020-07-30Promote io-wait to the default gemsHiroshi SHIBATA
2020-07-29rbinstall.rb: fix generated script name to set modeNobuyoshi Nakada
2020-07-29rbinstall.rb: fix dry-run modeNobuyoshi Nakada
2020-07-28Use https instead of httpKazuhiro NISHIYAMA
2020-07-28Remove `EnvUtil.rubyexec`, because it is not used anywhere.Vít Ondruch
Notes: Merged: https://github.com/ruby/ruby/pull/3351
2020-07-22Promote optparse to default gemsHiroshi SHIBATA
2020-07-16skip inlining cexpr! that are not attr! inline卜部昌平
Requested by ko1. Notes: Merged: https://github.com/ruby/ruby/pull/3314
2020-07-15Check warning flags only if available to run with old versionsNobuyoshi Nakada
2020-07-14_mjit_compile_invokebuiltin: sp_inc can be negative卜部昌平
Was my bad to assume sp_inc was positive. Real criteria is the calculated sp is non-negative. We have to assert that.
2020-07-13mk_builtin_loader.rb: STACK_ADDR_FROM_TOP unusable卜部昌平
Stacks are emulated in MJIT, must not touch the original VM stack. See also http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/3061353
2020-07-13builtin.h: avoid copy&paste卜部昌平
Instead of doubling the invokebuiltin logic here and there, use the same insns.def definition for both MJIT/non-JIT situations. Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13%p is not portable accross platforms卜部昌平
This commit fixes compiler error on MSVC. %p on that platform is not suitable to represent a compile-time constant. https://ci.appveyor.com/project/ruby/ruby/builds/34017163/job/vj2a8uk3gwv9yxak#L24381 Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13add comments卜部昌平
Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13fix typo卜部昌平
Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13inline Primitive.cexpr!卜部昌平
We can obtain the verbatim source code of Primitive.cexpr!. Why not paste that content into the JITed program. Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13precalc invokebuiltin destinations卜部昌平
Noticed that struct rb_builtin_function is a purely compile-time constant. MJIT can eliminate some runtime calculations by statically generate dedicated C code generator for each builtin functions. Notes: Merged: https://github.com/ruby/ruby/pull/3305
2020-07-13sync_default_gems.rb: Updated commentsNobuyoshi Nakada
* removed out-of-date and duplicate list * stated that everything synced from github
2020-07-13sync_default_gems.rb: Added `list` subcommandNobuyoshi Nakada
2020-07-13sync_default_gems.rb: Ignore conflicted files in toplevel moreNobuyoshi Nakada
2020-07-12sync_default_gems.rb: Added -e option to edit when conflictedNobuyoshi Nakada
2020-07-10Show messages around the line when replacing failed in format_changelogKazuhiro NISHIYAMA
2020-07-10Make sure vm_call_cfunc uses inlined ccTakashi Kokubun
which is checked by the first guard. When JIT-inlined cc and operand cd->cc are different, the JIT-ed code might wrongly dispatch cd->cc even while class check is done with another cc inlined by JIT. This fixes SEGV on railsbench.
2020-07-06tool/sync_default_gems.rb: Accept multiple commit rangesNobuyoshi Nakada
2020-07-05tool/sync_default_gems.rb: Added bigdecimalNobuyoshi Nakada
2020-07-05Skip comment and empty lines in gems/bundled_gems fileNobuyoshi Nakada
2020-07-05fix up Primitive.cinit! codeKoichi Sasada
Recent changes break Primitive.cinit!(c_code) so fix it.
2020-07-04Check ROBJECT_EMBED on guards-merged ivar accessTakashi Kokubun
Fix CI failure like http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/3043247 introduced by a69dd699ee630dd1086627dbca15a218a8538b6f
2020-07-04support all locals for cexpr!, cstmt!Koichi Sasada
Primitve.cexpr! and .cstmt! can access Ruby's parameter and *local variables* (note that local parameters are also local variables). However recent changes only allow to access parameters. This patch fix it. For example, the following code can work: def foo a, b, k: :kw, **kwrest c = a + b d = k e = kwrest p Primitive.cstmt!(%q(rb_p(rb_ary_new_from_args(5, a, b, c, d, e)); return Qnil;)) end
2020-07-03Merge ivar guards on JIT (#3284)Takashi Kokubun
when an ISeq has multiple ivar accesses. Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2020-07-03Use ID instead of GENTRY for gvars. (#3278)Koichi Sasada
Use ID instead of GENTRY for gvars. Global variables are compiled into GENTRY (a pointer to struct rb_global_entry). This patch replace this GENTRY to ID and make the code simple. We need to search GENTRY from ID every time (st_lookup), so additional overhead will be introduced. However, the performance of accessing global variables is not important now a day and this simplicity helps Ractor development. Notes: Merged-By: ko1 <ko1@atdot.net>
2020-07-02Expose `assert_pattern_list` for drb test with test-unit gem.Hiroshi SHIBATA
2020-06-30Extract correct processor name for ARM64 MacsSamuel Giddins
Notes: Merged: https://github.com/ruby/ruby/pull/3272
2020-06-28Calculate header line count instead of hardcodingNobuyoshi Nakada
2020-06-28Replace separators in input file name in header tooNobuyoshi Nakada
2020-06-28Replace ALT_SEPARATOR with SEPARATOR also in output file nameNobuyoshi Nakada
To suppress warnings by Visual C. ``` ./integer.rb(5) : warning C4129: 'i' : unrecognized character escape sequence ./kernel.rb(21) : warning C4129: 'k' : unrecognized character escape sequence ```
2020-06-25Show what's inlined first in "JIT inline" logTakashi Kokubun
and add a debug log
2020-06-25Decide JIT-ed insn based on cached cfuncTakashi Kokubun
for opt_* insns. opt_eq handles rb_obj_equal inside opt_eq, and all other cfunc is handled by opt_send_without_block. Therefore we can't decide which insn should be generated by checking whether it's cfunc cc or not. ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_opt_cc_insns.yml --repeat-count=4 before --jit: ruby 2.8.0dev (2020-06-26T05:21:43Z master 9dbc2294a6) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-06-26T06:30:18Z master 75cece1b0b) +JIT [x86_64-linux] last_commit=Decide JIT-ed insn based on cached cfunc Calculating ------------------------------------- before --jit after --jit mjit_nil?(1) 73.878M 74.021M i/s - 40.000M times in 0.541432s 0.540391s mjit_not(1) 72.635M 74.601M i/s - 40.000M times in 0.550702s 0.536187s mjit_eq(1, nil) 7.331M 7.445M i/s - 8.000M times in 1.091211s 1.074596s mjit_eq(nil, 1) 49.450M 64.711M i/s - 8.000M times in 0.161781s 0.123627s Comparison: mjit_nil?(1) after --jit: 74020528.4 i/s before --jit: 73878185.9 i/s - 1.00x slower mjit_not(1) after --jit: 74600882.0 i/s before --jit: 72634507.6 i/s - 1.03x slower mjit_eq(1, nil) after --jit: 7444657.4 i/s before --jit: 7331304.3 i/s - 1.02x slower mjit_eq(nil, 1) after --jit: 64710790.6 i/s before --jit: 49449507.4 i/s - 1.31x slower ```
2020-06-23Avoid generating opt_send with cfunc cc with JITTakashi Kokubun
only for opt_nil_p and opt_not. While vm_method_cfunc_is is used for opt_eq too, many fast paths of it don't call it. So if it's populated, it should generate opt_send, regardless of cfunc or not. And again, opt_neq isn't relevant due to the difference in operands. So opt_nil_p and opt_not are the only variants using vm_method_cfunc_is like they use. ``` $ benchmark-driver -v --rbenv 'before2 --jit::ruby --jit;before --jit;after --jit' benchmark/mjit_opt_cc_insns.yml --repeat-count=4 before2 --jit: ruby 2.8.0dev (2020-06-22T08:37:37Z master 3238641750) +JIT [x86_64-linux] before --jit: ruby 2.8.0dev (2020-06-23T01:01:24Z master 9ce2066209) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-06-23T06:58:37Z master 17e9df3157) +JIT [x86_64-linux] last_commit=Avoid generating opt_send with cfunc cc with JIT Calculating ------------------------------------- before2 --jit before --jit after --jit mjit_nil?(1) 54.204M 75.536M 75.031M i/s - 40.000M times in 0.737947s 0.529548s 0.533110s mjit_not(1) 53.822M 70.921M 71.920M i/s - 40.000M times in 0.743195s 0.564007s 0.556171s mjit_eq(1, nil) 7.367M 6.496M 7.331M i/s - 8.000M times in 1.085882s 1.231470s 1.091327s Comparison: mjit_nil?(1) before --jit: 75536059.3 i/s after --jit: 75031409.4 i/s - 1.01x slower before2 --jit: 54204431.6 i/s - 1.39x slower mjit_not(1) after --jit: 71920324.1 i/s before --jit: 70921063.1 i/s - 1.01x slower before2 --jit: 53821697.6 i/s - 1.34x slower mjit_eq(1, nil) before2 --jit: 7367280.0 i/s after --jit: 7330527.4 i/s - 1.01x slower before --jit: 6496302.8 i/s - 1.13x slower ```
2020-06-22Compile opt_send for opt_* only when cc has ISeqTakashi Kokubun
because opt_nil/opt_not/opt_eq populates cc even when it doesn't fallback to opt_send_without_block because of vm_method_cfunc_is. ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_opt_cc_insns.yml --repeat-count=4 before --jit: ruby 2.8.0dev (2020-06-22T08:11:24Z master d231b8f95b) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-06-22T08:53:27Z master e1125879ed) +JIT [x86_64-linux] last_commit=Compile opt_send for opt_* only when cc has ISeq Calculating ------------------------------------- before --jit after --jit mjit_nil?(1) 54.106M 73.693M i/s - 40.000M times in 0.739288s 0.542795s mjit_not(1) 53.398M 74.477M i/s - 40.000M times in 0.749090s 0.537075s mjit_eq(1, nil) 7.427M 6.497M i/s - 8.000M times in 1.077136s 1.231326s Comparison: mjit_nil?(1) after --jit: 73692594.3 i/s before --jit: 54106108.4 i/s - 1.36x slower mjit_not(1) after --jit: 74477487.9 i/s before --jit: 53398125.0 i/s - 1.39x slower mjit_eq(1, nil) before --jit: 7427105.9 i/s after --jit: 6497063.0 i/s - 1.14x slower ``` Actually opt_eq becomes slower by this. Maybe it's indeed using opt_send_without_block, but I'll approach that one in another commit.