summaryrefslogtreecommitdiff
path: root/tool
Commit message (Collapse)AuthorAgeFilesLines
* Promote io-nonblock to the default gems.Hiroshi SHIBATA2020-07-301-0/+7
|
* Promote io-wait to the default gemsHiroshi SHIBATA2020-07-301-0/+7
|
* rbinstall.rb: fix generated script name to set modeNobuyoshi Nakada2020-07-291-5/+3
|
* rbinstall.rb: fix dry-run modeNobuyoshi Nakada2020-07-291-20/+52
|
* Use https instead of httpKazuhiro NISHIYAMA2020-07-281-1/+1
|
* Remove `EnvUtil.rubyexec`, because it is not used anywhere.Vít Ondruch2020-07-281-5/+0
|
* Promote optparse to default gemsHiroshi SHIBATA2020-07-221-0/+1
|
* skip inlining cexpr! that are not attr! inline卜部昌平2020-07-162-23/+27
| | | | Requested by ko1.
* Check warning flags only if available to run with old versionsNobuyoshi Nakada2020-07-151-1/+1
|
* _mjit_compile_invokebuiltin: sp_inc can be negative卜部昌平2020-07-141-1/+1
| | | | | Was my bad to assume sp_inc was positive. Real criteria is the calculated sp is non-negative. We have to assert that.
* mk_builtin_loader.rb: STACK_ADDR_FROM_TOP unusable卜部昌平2020-07-132-3/+3
| | | | | | 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
* builtin.h: avoid copy&paste卜部昌平2020-07-133-22/+24
| | | | | Instead of doubling the invokebuiltin logic here and there, use the same insns.def definition for both MJIT/non-JIT situations.
* %p is not portable accross platforms卜部昌平2020-07-131-1/+1
| | | | | | | 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
* add comments卜部昌平2020-07-131-1/+1
|
* fix typo卜部昌平2020-07-131-1/+1
|
* inline Primitive.cexpr!卜部昌平2020-07-132-28/+55
| | | | | We can obtain the verbatim source code of Primitive.cexpr!. Why not paste that content into the JITed program.
* precalc invokebuiltin destinations卜部昌平2020-07-134-7/+49
| | | | | | 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.
* sync_default_gems.rb: Updated commentsNobuyoshi Nakada2020-07-131-56/+1
| | | | | * removed out-of-date and duplicate list * stated that everything synced from github
* sync_default_gems.rb: Added `list` subcommandNobuyoshi Nakada2020-07-131-0/+13
|
* sync_default_gems.rb: Ignore conflicted files in toplevel moreNobuyoshi Nakada2020-07-131-1/+6
|
* sync_default_gems.rb: Added -e option to edit when conflictedNobuyoshi Nakada2020-07-121-4/+20
|
* Show messages around the line when replacing failed in format_changelogKazuhiro NISHIYAMA2020-07-101-1/+13
|
* Make sure vm_call_cfunc uses inlined ccTakashi Kokubun2020-07-101-2/+2
| | | | | | | | 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.
* tool/sync_default_gems.rb: Accept multiple commit rangesNobuyoshi Nakada2020-07-061-9/+12
|
* tool/sync_default_gems.rb: Added bigdecimalNobuyoshi Nakada2020-07-051-0/+1
|
* Skip comment and empty lines in gems/bundled_gems fileNobuyoshi Nakada2020-07-053-0/+3
|
* fix up Primitive.cinit! codeKoichi Sasada2020-07-051-2/+2
| | | | Recent changes break Primitive.cinit!(c_code) so fix it.
* Check ROBJECT_EMBED on guards-merged ivar accessTakashi Kokubun2020-07-041-18/+9
| | | | | | Fix CI failure like http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/3043247 introduced by a69dd699ee630dd1086627dbca15a218a8538b6f
* support all locals for cexpr!, cstmt!Koichi Sasada2020-07-041-27/+50
| | | | | | | | | | | | | | | | | 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
* Merge ivar guards on JIT (#3284)Takashi Kokubun2020-07-031-11/+40
| | | when an ISeq has multiple ivar accesses.
* Use ID instead of GENTRY for gvars. (#3278)Koichi Sasada2020-07-032-58/+0
| | | | | | | | | | | | 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.
* Expose `assert_pattern_list` for drb test with test-unit gem.Hiroshi SHIBATA2020-07-022-43/+43
|
* Extract correct processor name for ARM64 MacsSamuel Giddins2020-06-301-0/+3
|
* Calculate header line count instead of hardcodingNobuyoshi Nakada2020-06-281-1/+2
|
* Replace separators in input file name in header tooNobuyoshi Nakada2020-06-281-4/+4
|
* Replace ALT_SEPARATOR with SEPARATOR also in output file nameNobuyoshi Nakada2020-06-281-1/+5
| | | | | | | | 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 ```
* Show what's inlined first in "JIT inline" logTakashi Kokubun2020-06-251-0/+3
| | | | and add a debug log
* Decide JIT-ed insn based on cached cfuncTakashi Kokubun2020-06-251-7/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 ```
* Avoid generating opt_send with cfunc cc with JITTakashi Kokubun2020-06-232-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 ```
* Compile opt_send for opt_* only when cc has ISeqTakashi Kokubun2020-06-222-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Verify builtin inline annotation with VM_CHECK_MODE (#3244)Takashi Kokubun2020-06-211-2/+2
| | | | | * Verify builtin inline annotation with VM_CHECK_MODE * Remove static to fix the link issue on MJIT
* Prefer ruby_install_name as runnerNobuyoshi Nakada2020-06-211-2/+3
| | | | | `Gem::Commands::EnvironmentCommand` expects that `Gem.ruby` has the transformed basename.
* Introduce Primitive.attr! to annotate 'inline' (#3242)Takashi Kokubun2020-06-202-1/+22
| | | [Feature #15589]
* [Feature #16254] Allow `Primitive.func` styleNobuyoshi Nakada2020-06-191-0/+5
|
* [Feature #16254] Allow `__builtin.func` styleNobuyoshi Nakada2020-06-191-3/+20
|
* Removed sdbm entries from toolchaninsHiroshi SHIBATA2020-06-191-8/+0
|
* Remove obsoleted opt_call_c_function insn (#3232)Takashi Kokubun2020-06-171-2/+1
| | | | | * Remove obsoleted opt_call_c_function insn * Keep opt_call_c_function with DEFINE_INSN_IF
* Prefer String#each_byte when using a blockNobuyoshi Nakada2020-06-151-1/+1
|
* tool/lib/minitest/unit.rb: Reproducible shuffle of test suitesYusuke Endoh2020-06-151-1/+12
| | | | | | | | | | | ... based on CRC32 of names of the test suites. Formerly, `make test-all` randomized the order of the test suites by using `Array#shuffle`. It also shows `--seed N` to reproduce the order, but it was not reproducible when a suite set is different. This change sorts the suites by CRC32 hash of the suite names with a salt generated by the seed.
* A help message to `tool/sync_default_gems.rb`David Rodríguez2020-06-151-8/+15
|