1938 Commits

Author SHA1 Message Date
Nobuyoshi Nakada
d1f50b9872
Initialize the class variable for Minitest::Unit.current_repeat_count 2020-04-23 10:44:27 +09:00
Nobuyoshi Nakada
2e87488d13
Expand retrying test file names to realpath
As well as worker processes do in Test::Unit::Worker#run.
2020-04-23 10:25:09 +09:00
Nobuyoshi Nakada
3cd3a507e3
[sync_default_gems.rb] Force reset conflict files to be ignored
[ci skip]
2020-04-20 21:27:02 +09:00
Nobuyoshi Nakada
aeb9d11594
Revert irrelevant change [ci skip] 2020-04-20 21:26:55 +09:00
Nobuyoshi Nakada
e571bb8436
Removed phony atomic operations for void* and VALUE 2020-04-20 21:14:04 +09:00
Takashi Kokubun
04e56958e6
Make sure newarraykwsplat accesses a correct index
on stack when local_stack_p is enabled.

This fixes `RB_FL_TEST_RAW:"RB_FL_ABLE(obj)"` assertion failure
on power_assert's test with JIT enabled.
2020-04-18 01:41:50 -07:00
Nobuyoshi Nakada
3152977b31
Rescue EPIPE in _report
Instead of letting callers rescue the error always.
2020-04-17 14:25:20 +09:00
Nobuyoshi Nakada
3cca0d1958 core_assertions.rb: fixed fd leak at timeout 2020-04-17 00:52:29 +09:00
Nobuyoshi Nakada
e231f8e8a8 envutil.rb: not try to close pipes twice 2020-04-17 00:52:29 +09:00
Takashi Kokubun
310ef9f40b
Make vm_call_cfunc_with_frame a fastpath (#3027)
when there's no need to call CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT
(i.e. !rb_splat_or_kwargs_p(ci) && !calling->kw_splat).

Micro benchmark:
```
$ benchmark-driver -v --rbenv 'before;after' benchmark/vm_send_cfunc.yml --repeat-count=4
before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux]
after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
Calculating -------------------------------------
                         before       after
       vm_send_cfunc    69.585M     88.724M i/s -    100.000M times in 1.437097s 1.127096s

Comparison:
                    vm_send_cfunc
               after:  88723605.2 i/s
              before:  69584737.1 i/s - 1.28x  slower
```

Optcarrot:
```
$ benchmark-driver -v --rbenv 'before;after' benchmark.yml --repeat-count=12 --output=all
before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux]
after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
Calculating -------------------------------------
                                       before                 after
Optcarrot Lan_Master.nes    50.76119601545175     42.73858236484051 fps
                            50.76388649761503     51.04211379912850
                            50.80930672252514     51.39455790755538
                            50.90236000778749     51.75656936556145
                            51.01744746340430     51.86875277356489
                            51.06495279015112     51.88692482485558
                            51.07785337168974     51.93429603190578
                            51.20163525187862     51.95768145071314
                            51.34671771913112     52.45577266040274
                            51.35918340835583     52.53163888762858
                            51.46641337418146     52.62172484121034
                            51.50835463462257     52.85064021113239
```
2020-04-13 20:32:59 -07:00
Takashi Kokubun
b9d3ceee8f
Unwrap vm_call_cfunc indirection on JIT
for VM_METHOD_TYPE_CFUNC.

This has been known to decrease optcarrot fps:

```
$ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark.yml --repeat-count=24 --output=all
before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux]
Calculating -------------------------------------
                                 before --jit           after --jit
Optcarrot Lan_Master.nes    66.38132676191719     67.41369177299630 fps
                            69.42728743772243     68.90327567263054
                            72.16028300263211     69.62605130880686
                            72.46631319102777     70.48818243767207
                            73.37078877002490     70.79522887347566
                            73.69422431217367     70.99021920193194
                            74.01471487018695     74.69931965402584
                            75.48685183295630     74.86714575949016
                            75.54445264507932     75.97864419721677
                            77.28089738169756     76.48908637569581
                            78.04183397891302     76.54320932488021
                            78.36807984096562     76.59407262898067
                            78.92898762543574     77.31316743361343
                            78.93576483233765     77.97153484180480
                            79.13754917503078     77.98478782102325
                            79.62648945850653     78.02263322726446
                            79.86334213878064     78.26333724045934
                            80.05100635898518     78.60056756355614
                            80.26186843769584     78.91082645644468
                            80.34205717020330     79.01226659142263
                            80.62286066044338     79.32733939423721
                            80.95883033058557     79.63793060542024
                            80.97376819251613     79.73108936622778
                            81.23050939202896     80.18280109433088
```

and I deleted this capability in an early stage of YARV-MJIT development:
0ab130feee

I suspect either of the following things could be the cause:

* Directly calling vm_call_cfunc requires more optimization effort in GCC,
  resulting in 30ms-ish compilation time increase for such methods and
  decreasing the number of methods compiled in a benchmarked period.

* Code size increase => icache miss hit

These hypotheses could be verified by some methodologies. However, I'd
like to introduce this regardless of the result because this blocks
inlining C method's definition.

I may revert this commit when I give up to implement inlining C method
definition, which requires this change.

Microbenchmark-wise, this gives slight performance improvement:

```
$ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_send_cfunc.yml --repeat-count=4
before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux]
Calculating -------------------------------------
                     before --jit  after --jit
     mjit_send_cfunc      41.961M      56.489M i/s -    100.000M times in 2.383143s 1.770244s

Comparison:
                  mjit_send_cfunc
         after --jit:  56489372.5 i/s
        before --jit:  41961388.1 i/s - 1.35x  slower
```
2020-04-13 16:45:05 -07:00
Hiroshi SHIBATA
55a5a4bc03
Fixed to initialize ruby-core repository when it has no master branch 2020-04-09 18:23:49 +09:00
Hiroshi SHIBATA
7a26021d1d
Support one repository for updating the latest commits 2020-04-09 16:34:25 +09:00
卜部昌平
9e6e39c351
Merge pull request #2991 from shyouhei/ruby.h
Split ruby.h
2020-04-08 13:28:13 +09:00
Takashi Kokubun
b66d7d9be5
Remove unused variable stack_size
_mjit_compile_send.erb doesn't use _mjit_compile_insn_body.erb
2020-04-06 02:00:23 -07:00
Takashi Kokubun
3194cd36e2
Delay definition of pc_moved_p
to unify the duplicated declarations and to make sure it's not used
until set properly.

Also changed it from legacy TRUE/FALSE to stdbool.
2020-04-06 01:55:18 -07:00
Takashi Kokubun
928bb17770
Fix -Wshorten-64-to-32 in 4f802828f4 2020-04-06 01:50:12 -07:00
Takashi Kokubun
4f802828f4
Refactor argc in mjit_compile_send
using sp_inc_of_sendish for consistency and to make it easier to
understand
2020-04-06 01:42:32 -07:00
Takashi Kokubun
1a33845215
Update outdated comments in mjit_compile_send
and simplify `v` variable references a little.

There's no CALL_METHOD anymore, and the original code lives in
vm_sendish instead of insns.def now.
2020-04-06 01:31:11 -07:00
Takashi Kokubun
f984975c4d
Collapse if conditions to decrease indentation
in mjit_compile_send to clarify it's not that deeply branched.
2020-04-06 00:45:43 -07:00
Nobuyoshi Nakada
ec03d13742
Fallback if Pathname#relative_path_from fails
It can fail due to different prefixes, e.g., drive letters or UNC
paths on DOSish platform.
2020-04-05 11:58:31 +09:00
Nobuyoshi Nakada
df275179bd
Revert "Moved aclocal.m4 to macro directory"
This reverts commit 4a6571dbc14ee4e88c12cd9931f7695077a3ee6e,
because chkbuild does not follow.
2020-04-05 11:53:07 +09:00
Nobuyoshi Nakada
4a6571dbc1 Moved aclocal.m4 to macro directory 2020-04-05 09:26:57 +09:00
Nobuyoshi Nakada
11fa1dcc23
Also scan rescue clauses 2020-04-04 12:38:00 +09:00
Kazuhiro NISHIYAMA
f70ca6a1f9
Remove unnecessary escape 2020-04-04 00:35:51 +09:00
Nobuyoshi Nakada
691a15ebc7
[sync_default_gems.rb] Reset files to be ignored
[ci skip]
2020-04-03 10:49:45 +09:00
Nobuyoshi Nakada
668c97b72c
[sync_default_gems.rb] Ignore files under .github directory
[ci skip]
2020-04-03 10:49:38 +09:00
Nobuyoshi Nakada
3df764721a
[sync_default_gems.rb] Use block form IO.popen to reap zombies
[ci skip]
2020-04-03 10:49:28 +09:00
Takashi Kokubun
151f8be40d
Make JIT-ed leave insn leaf
to eliminate sp / pc moves by cancelling JIT execution on interrupts.

$ benchmark-driver benchmark.yml -v --rbenv 'before --jit;after --jit' --repeat-count=12 --output=all
before --jit: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-04-01T04:58:01Z master 39beb26a27) +JIT [x86_64-linux]
Calculating -------------------------------------
                                 before --jit           after --jit
Optcarrot Lan_Master.nes    75.06409603894944     76.06422026555558 fps
                            75.12025067279242     78.48161731616810
                            77.42020273492177     79.78958240950033
                            79.07253675128945     79.88645902325614
                            79.99179109732327     80.33743931749331
                            80.07633091008627     80.53790081529166
                            80.15450942667547     80.99048270668010
                            80.48372803283709     81.70497146081003
                            80.57410149187352     82.79494539467382
                            81.80449157081202     82.85797792223954
                            82.24629397834902     83.00603891515506
                            82.63708148686703     83.23221006969828

$ benchmark-driver -v --rbenv 'before;before --jit;after --jit' benchmark/mjit_leave.yml --repeat-count=4
before: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) [x86_64-linux]
before --jit: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-04-01T04:58:01Z master 39beb26a27) +JIT [x86_64-linux]
Calculating -------------------------------------
                         before  before --jit  after --jit
          mjit_leave   106.656M       82.786M      91.635M i/s -    200.000M times in 1.875183s 2.415881s 2.182569s

Comparison:
                       mjit_leave
              before: 106656239.9 i/s
         after --jit:  91635143.7 i/s - 1.16x  slower
        before --jit:  82785537.2 i/s - 1.29x  slower
2020-03-31 22:10:16 -07:00
Takashi Kokubun
b736ea63bd
Optimize exivar access on JIT-ed getivar
JIT support of dd723771c11.

$ benchmark-driver -v --rbenv 'before;before --jit;after --jit' benchmark/mjit_exivar.yml --repeat-count=4
before: ruby 2.8.0dev (2020-03-30T12:32:26Z master e5db3da9d3) [x86_64-linux]
before --jit: ruby 2.8.0dev (2020-03-30T12:32:26Z master e5db3da9d3) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-03-31T05:57:24Z mjit-exivar 128625baec) +JIT [x86_64-linux]
Calculating -------------------------------------
                         before  before --jit  after --jit
         mjit_exivar    57.944M       53.579M      54.471M i/s -    200.000M times in 3.451588s 3.732772s 3.671687s

Comparison:
                      mjit_exivar
              before:  57944345.1 i/s
         after --jit:  54470876.7 i/s - 1.06x  slower
        before --jit:  53579483.4 i/s - 1.08x  slower
2020-03-30 23:16:35 -07:00
Hiroshi SHIBATA
e5db3da9d3
Migrate {assert,refute}_patch_exits for compatibility with Minitest5 2020-03-30 21:32:26 +09:00
Nobuyoshi Nakada
9552fa9c0d
[DOC] Updated module name [ci skip] 2020-03-30 15:53:55 +09:00
Nobuyoshi Nakada
4adb2d655d
Make RbConfig::CONFIG values mutable [Bug #16738]
As `RbConfig.expand` modifies the argument and involved `CONFIG`
values, its values should be mutable.
2020-03-25 22:09:28 +09:00
Takashi Kokubun
5b3157a511
Make file names and variable names consistent 2020-03-23 22:33:01 -07:00
Takashi Kokubun
13e9551b97
Change the filename like make variable
for consistency
2020-03-22 23:15:50 -07:00
Takashi Kokubun
d578f1d3ea
Change the run_without_tabs switching to dedicated
variable of make instead of d059714746 as requested.

You can disable this like `make MJIT_WITHOUT_TABS=false` or
`export MJIT_WITHOUT_TABS=false`.
2020-03-22 23:12:54 -07:00
Takashi Kokubun
d059714746
Disable run_without_tabs when there's no -ggdb3
in debugflags, as requested by nobu

I actually wanted to check debugflags directly rather than MJIT_DEBUGFLAGS
because debugflags is always used but MJIT_DEBUGFLAGS may not be always used.
But I couldn't find a better way to check debugflags.
2020-03-22 20:20:27 -07:00
Takashi Kokubun
c4e3d9e953
Expand tabs of include/ruby/ruby.h in MJIT header
rb_class_of is indented with tabs
2020-03-22 16:37:19 -07:00
Takashi Kokubun
3cf3427c99
Try asserting no static decl rather than warning
This didn't exist in my machine, but it may exist in some CI
environments.
2020-03-22 15:49:55 -07:00
Takashi Kokubun
a55f670757
Reduce the number of lines used by transform_mjit_header 2020-03-22 15:46:53 -07:00
Takashi Kokubun
dec0f582e4
Workaround an encoding problem in run_without_tabs
It's to be fixed properly later. But this should be able to avoid the failure.

https://travis-ci.org/github/ruby/ruby/jobs/665580361
https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20200322T190003Z.fail.html.gz
2020-03-22 12:19:24 -07:00
Takashi Kokubun
9ebf74fd78
Expand tabs for rb_mjit_header.h (#2975)
This is necessary to avoid converting a hard tab to just 1 space in
preprocessor to generate rb_mjit_header.h, which is helpful when using
gdb or perf report.

See also: [Misc #16112]

This reverts commit 91acdd17c4b4bb69a8fa3ada46e09dad46b9362e.
Fixed permission failure on Travis, encoding, and added SKIPPED_FILES.
2020-03-22 11:50:45 -07:00
Takashi Kokubun
91acdd17c4
Revert "Expand tabs for rb_mjit_header.h"
This reverts commit 57119dd561418c917b885db5f5af7f129a96d1ec.

Temporarily reverting for Travis failures
2020-03-22 00:53:05 -07:00
Takashi Kokubun
57119dd561
Expand tabs for rb_mjit_header.h
I can't live without this when using gdb or perf report.

See also: [Misc #16112]
2020-03-22 00:37:31 -07:00
taki
b2041c8b70 [ci skip]Fix return type on RbConfig.fire_update! 2020-03-21 16:38:04 +09:00
Jun Aruga
86ca640287 Enablie IPv6 on Travis s390s case again.
It seems the issue was fixed by Travis.
See https://travis-ci.community/t/6719/5 .
2020-03-21 11:51:32 +09:00
Hiroshi SHIBATA
4be2a891cc
The upstream repository of bundler was changed rubygems/rubygems now.
https://github.com/rubygems/rubygems/pull/3166
2020-03-16 19:28:52 +09:00
Nobuyoshi Nakada
8a6ba10f9d
Do not make disabled directories at installation [Bug #12392] 2020-03-16 17:26:10 +09:00
NARUSE, Yui
de15a26e9e tool/redmine-backporter.rb: fix typo 2020-03-13 22:27:54 +09:00
Takashi Kokubun
0cd7be99e9
Avoid referring to an old value of realloc
OpenBSD RubyCI has failed with SEGV since 4bcd5981e80d3e1852c8723741a0069779464128.
https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20200312T223005Z.fail.html.gz

This was because `status->cc_entries` could be stale after `realloc` call
for inlined iseqs.
2020-03-12 22:51:34 -07:00