aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* Use designated initializers for compile_statusk0kubun2019-03-181-15/+10
| | | | | | | to make it easier to understand what values are grouped. Just cosmetic changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Use alloca for stack_size_for_pos as wellk0kubun2019-03-181-5/+1
| | | | | | to eliminate necessity of error check and `free` git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Use alloca again instead of malloc and freek0kubun2019-03-182-33/+25
| | | | | | | | by changing interface of `mjit_copy_cache_from_main_thread`. This is also fixing deadlock introduced by r67299. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67300 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Resurrect r67287 and r67288k0kubun2019-03-183-50/+78
| | | | | | | | | I noticed that r67287 was illegal because memory allocated by `alloca` was used after the stack is expired. So I just replaced that with `malloc` and `free` for now. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-19svn2019-03-181-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "Eliminate mjit_copy_job_t reference from mjit_worker"k0kubun2019-03-182-54/+37
| | | | | | | | This reverts commit ba51ae0109ee1d1fa7ca90b43da115ea68d7214a. CI is failing again... git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Eliminate mjit_copy_job_t reference from mjit_workerk0kubun2019-03-182-37/+54
| | | | | | | | | | | | | | Take 2 of r67287. For some reasons, passing pointer of pointer on stack to a function and assigning an addresse to a pointer dereferenced from the pointer seems not working on mswin. So I achieved to return multiple values by returning struct instead of taking pointers. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y: numbered parameter in lambdanobu2019-03-182-5/+33
| | | | | | | | * parse.y (lambda): support numbered parameters, only when no argument list including empty parentheses, like empty vertical bars. [ruby-core:91859] [Bug #15672] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "Try disabling Travis cache on darwin"k0kubun2019-03-181-8/+0
| | | | | | | | | This reverts commit 6b136a044205f6e6b66df68cd2da2a9c3e952a7d. This does not seem to work: https://travis-ci.org/ruby/ruby/jobs/507646193#L2478 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Merge https://github.com/rubygems/rubygems/pull/2684k0kubun2019-03-181-1/+1
| | | | | | to make CI stable. See the PR for details. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y: continue after invalid namenobu2019-03-181-3/+8
| | | | | | | | * parse.y (set_yylval_noname): continue after an invalid global, instance, class variable name, without "unexpected end-of-file" error. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "Request inline cache values from mjit_compile"k0kubun2019-03-183-69/+50
| | | | | | | | | | | | This reverts commit 4161674b2fbea6bdd01783ac5d3b39d88db22972. Revert "Eliminate mjit_copy_job_t reference from mjit_worker" This reverts commit d86a1aa045959dfbf5cd472eae0d043180259727. Reverting them because of CI failures git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Pack rb_iseq_constant_body from 296 to 288 bytesnobu2019-03-181-1/+2
| | | | | | | | [Fix GH-2099] From: Lourens Naudé <lourens@bearmetal.eu> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y: parser_numbered_paramnobu2019-03-181-9/+17
| | | | | | | * parse.y (parser_numbered_param): hoisted out the contextual check for numbered parameters. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Request inline cache values from mjit_compilek0kubun2019-03-173-24/+25
| | | | | | | | | | rather than preparing beforehand. By having this change, implementing inlining by calling `mjit_copy_cache_from_main_thread` for inlined methods was made possible. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Eliminate mjit_copy_job_t reference from mjit_workerk0kubun2019-03-171-39/+57
| | | | | | | | | and make `copy_cache_from_main_thread` easier to use. For implementing inlining later, I'll use `copy_cache_from_main_thread` inside `mjit_compile`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Drop rb_mjit_unit from mjit_copy_jobk0kubun2019-03-172-16/+23
| | | | | | | | | and guard iseq from GC by marking iseq in mjit_copy_job. This is a refactoring for implementing inlining later and should not be fixing or introducing any bugs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix a typo [ci skip]kazu2019-03-171-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-18svn2019-03-171-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix typos [ci skip]kazu2019-03-171-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix a typo [ci skip]kazu2019-03-171-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Try disabling Travis cache on darwink0kubun2019-03-171-0/+8
| | | | | | | | | | | | to check if it resolves "Permission denied" problem. https://travis-ci.org/ruby/ruby/jobs/507381339 https://travis-ci.org/ruby/ruby/jobs/507392198 TBH I'm not exactly sure why it happens, but I don't have infinite time to understand this. It would be appreciated to identify the root cause and remove `DISABLE_CACHE` again if you're sure your patch fixes the problem. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Roughly increase Azure Pipelines fetch depthk0kubun2019-03-171-4/+4
| | | | | | | because --depth=1 may randomly break checkout: https://dev.azure.com/rubylang/ruby/_build/results?buildId=208&view=logs&jobId=7ded14dc-7a77-59da-f40a-71e137ad96c0&taskId=2045950f-1dcd-54a4-4c23-fae2521239c1&lineStart=1554&lineEnd=1555&colStart=1&colEnd=1 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Update NEWS for --jit option changes [ci skip]k0kubun2019-03-171-0/+6
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Numbered parameters [Feature #4475]nobu2019-03-178-12/+159
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Change defaults of --jit optionsk0kubun2019-03-172-9/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * --jit-min-calls: 5 -> 10000 --jit-min-calls=5 obviously can compile non hotspot. This was not a problem for MJIT-benchmarks and Optcarrot because the former has very few hot optimiziable methods and the latter is likely to trigger compilation of hotspot by its intensive calls to optimizable hotspot methods and has a very short window to allow limited compilations. In real-world applications, it has more time to compile more methods and it pressures computer's limited resources like icache. We should avoid compiling too many methods. Also compiling many methods exhausts time budget for compilation in one ruby process lifetime and delays the "JIT compaction" of Ruby 2.6. JVM is known to use 1,500 for C1 (client) compiler and 10,000 for C2 (server) compiler for -XX:CompileThreshold by default. https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm When things are called X,000 times, requiring 10,000 can eliminate compilation of methods which are called only once in these X,000 iterations and obviously not hotspot. And in fact things like unicorn-worker-killer restarts unicorn process every 4096 requests. So I felt 10,000 is good for such an environment. * --jit-max-cache: 1000 -> 100 By the same reason stated above, we should not allow compiling many methods especially on MJIT which has a larger overhead due to poor code locality by dlopen and whose code is also likely to be bigger by just inlining many VM instructions with -O3 rather than directly generating low-level code. In JVM -XX:ReservedCodeCacheSize is 32M for reserved and 48M for maximum. --jit-max-cache=1,000 could be closer to it, but in this case MJIT's compilation is slow due to data synchronization between threads (to be improved in Ruby 2.7 though) and we do not want to delay the "JIT compaction" for a long time. So I chose a really conservative number for this, but by having method inlining in the future, wider range could be optimized even with this value. * Optcarrot --disable-gems, --benchmark Lan_Master.nes 12 attempts. No significant impact. | r67276 | r67276 --jit | after --jit | |:-------------------|:------------------|:------------------| | 50.44369263063978 | 72.87390680773056 | 73.47873485047297 | | 50.58788746124193 | 78.06820808947026 | 78.29723420171945 | | 50.77509250801378 | 80.29010348842613 | 78.94689404460769 | | 50.935361702064405 | 80.42796829926374 | 80.39539527351525 | | 51.27352672981195 | 81.98758158033202 | 81.6754198664817 | | 51.720715743242124 | 82.00118535811626 | 82.22960569251283 | | 51.89643169822524 | 82.2290091613556 | 82.5013636146388 | | 51.95895898113868 | 82.37318990939565 | 82.74002377794454 | | 52.10124886807968 | 82.48796686037502 | 83.23354941183932 | | 52.292280637519376 | 83.0265226541066 | 84.01552618012572 | | 52.51856237784144 | 83.8797360318052 | 84.8588319093393 | | 52.65076845986818 | 84.80037351256634 | 85.13577756273656 | * Railsbench `WARMUP=20000 BENCHMARK=1000 bin/bench` of https://github.com/k0kubun/railsbench. It gets closer to --disable=jit. | | r67276 | r67276 | after | | | | --jit | --jit | |:----------|:-------|:-------|:-------| | req/s | 891.3 | 742.2 | 841.5 | |:----------|:-------|:-------|:-------| | 50%ile ms | 1.00 | 1.21 | 1.08 | | 66%ile ms | 1.02 | 1.24 | 1.09 | | 75%ile ms | 1.03 | 1.28 | 1.10 | | 80%ile ms | 1.03 | 1.30 | 1.11 | | 90%ile ms | 1.09 | 1.42 | 1.15 | | 95%ile ms | 1.32 | 1.65 | 1.27 | | 98%ile ms | 4.79 | 2.23 | 1.81 | | 99%ile ms | 5.68 | 7.52 | 6.64 | |100%ile ms | 6.52 | 9.69 | 8.59 | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Drop invalid trailing comma in JSON objectk0kubun2019-03-171-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67276 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Ignore test-bundled-gems failure on CI for nowk0kubun2019-03-161-0/+2
| | | | | | | | ktsj-san recognizes this issue and it's intentionally left failing now. As failure notification of this task is NOT indicating ruby is broken, let's stop notifying the failure fo rnow. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67275 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-17svn2019-03-161-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Do not build Azure Pipelines on Pull Requestk0kubun2019-03-161-0/+1
| | | | | | | | | | For 2 reasons: * bundled_gems tend to be left broken (like now) * We don't want Slack notification for pull request and it can't be disabled on Azure Pipelines git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Notify AppVeyor results to multiple channelsk0kubun2019-03-161-30/+46
| | | | | | | | | | | | and simplified config by using dedicated webhook URL. Sadly AppVeyor YAML does not support alias and so we need to copy-paste the request body. memo: https://slack-files2.s3-us-west-2.amazonaws.com/bot_icons/2018-02-10/314363543719_48.png is the URL used by `provider: Slack` git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-16svn2019-03-161-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* dsym should be treated as string [ruby-core:91852] [Bug #15670]ktsj2019-03-162-1/+9
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Increase the number of curl retriesk0kubun2019-03-151-1/+1
| | | | | | | Because retrying 5 times failed. https://ci.appveyor.com/project/ruby/ruby/builds/23063048/job/k9lykaagfaex74gg git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * expand tabs.svn2019-03-152-4/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* node.h: introduce nd_brace to determine if a hash literal is a keywordmame2019-03-153-5/+7
| | | | | | | | | NODE_HASH#nd_brace is a flag that is 1 for `foo({ k: 1 })` and 0 for `foo(k: 1)`. nd_alen had been abused for the flag (and the implementation is completely the same), but an explicit name is better to read. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* NEWS: adjust indents and escape brackets not to be labeled listsnobu2019-03-151-5/+5
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Show the source line at an invalid class/instance variablenobu2019-03-153-5/+14
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-15svn2019-03-141-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot: Use 6-spaces indent for SIZE and digestsnagachika2019-03-141-2/+2
| | | | | | to align with release note markdown. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Skip Bundler's test made fail by r67226k0kubun2019-03-141-0/+1
| | | | | | | Possible fix would be https://github.com/bundler/bundler/pull/7038, but Ruby script ending with `^~~` could be wrongly stripped by that? git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* compile.c: fix the corner case of rest and keyword argumentsmame2019-03-142-2/+21
| | | | | | See https://bugs.ruby-lang.org/issues/10856#note-20 . [Bug #10856] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* compile.c (setup_args): process arguments forwardmame2019-03-141-117/+73
| | | | | | | | | | | | | | For unknown reason, setup_args processed the arguments from the last to the first. This is not only difficult to read, but also inefficient in some cases. For example, the arguments of `foo(*a1, *a2, *a3)` was compiled like `a1.dup << (a2.dup << a3)`. The second dup (`a2.dup`) is not needed. This change refactors the function so that it processes the arguments forward: `foo(*a1, *a2, *a3)` is compiled as `a1.dup << a2 << a3`, and in my opinion, the source code is now much more readable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y: no punctuation instance/class variablesnobu2019-03-143-9/+12
| | | | | | | | * parse.y (parse_atmark): exclude punctuation follows @ marks, whereas it is inclusive after $ mark as some punctuation global variables exist. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * expand tabs.svn2019-03-141-8/+8
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* compile.c: factor out "compile_args" from "compile_array"mame2019-03-141-23/+34
| | | | | | | | | | | | | compile_array function had three usages: array literal, hash literal, and method arguments. I think the third is completely different than the first and second. For example, method arguments and popped are meaningless; keywords_ptr and flag parameter for array/hash literal is also unused. This change refactors them: a function "compile_args" is created for the third, and removes no longer used parameters of "compile_array". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y: show invalid global variable linenobu2019-03-142-3/+9
| | | | | | | | * parse.y (parse_gvar): show the source line erred by invalid global variable, and indicate the variable including the wrong punctuation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Hoisted out ruby_show_error_linenobu2019-03-141-54/+86
| | | | | | | | | * parse.y (ruby_show_error_line): hoisted out from parser_yyerror. * parse.y (regx_options): revert r67226 and show the error line separately. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* More initializations of YYLTYPEnobu2019-03-141-10/+16
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2019-03-14svn2019-03-141-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67248 b2dd03c8-39d4-4d8f-98ff-823fe69b080e