1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Annotate Kernel#class as inline (#3250)

```
$ benchmark-driver -v --rbenv 'before;after;before --jit;after --jit' benchmark/mjit_class.yml --repeat-count=4
before: ruby 2.8.0dev (2020-06-23T07:09:54Z master 37a2e48d76) [x86_64-linux]
after: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class 0ff147c007) [x86_64-linux]
before --jit: ruby 2.8.0dev (2020-06-23T07:09:54Z master 37a2e48d76) +JIT [x86_64-linux]
after --jit: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class 0ff147c007) +JIT [x86_64-linux]
Calculating -------------------------------------
                         before       after  before --jit  after --jit
    mjit_class(self)    39.219M     40.060M       53.502M      69.202M i/s -     40.000M times in 1.019915s 0.998495s 0.747631s 0.578021s
       mjit_class(1)    39.567M     41.242M       52.100M      68.895M i/s -     40.000M times in 1.010935s 0.969885s 0.767749s 0.580591s

Comparison:
                 mjit_class(self)
         after --jit:  69201690.7 i/s
        before --jit:  53502336.4 i/s - 1.29x  slower
               after:  40060289.1 i/s - 1.73x  slower
              before:  39218939.2 i/s - 1.76x  slower

                    mjit_class(1)
         after --jit:  68895358.6 i/s
        before --jit:  52100353.0 i/s - 1.32x  slower
               after:  41241993.6 i/s - 1.67x  slower
              before:  39567314.0 i/s - 1.74x  slower
```
This commit is contained in:
Takashi Kokubun 2020-06-23 23:49:03 -07:00 committed by GitHub
parent 3e02cd518f
commit 946e5cc668
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
Notes: git 2020-06-24 15:49:27 +09:00
Merged-By: k0kubun <takashikkbn@gmail.com>
5 changed files with 34 additions and 24 deletions

View file

@ -1,4 +1,25 @@
module Kernel
#
# call-seq:
# obj.class -> class
#
# Returns the class of <i>obj</i>. This method must always be called
# with an explicit receiver, as #class is also a reserved word in
# Ruby.
#
# 1.class #=> Integer
# self.class #=> Object
#--
# Equivalent to \c Object\#class in Ruby.
#
# Returns the class of \c obj, skipping singleton classes or module inclusions.
#++
#
def class
Primitive.attr! 'inline'
Primitive.cexpr! 'rb_obj_class(self)'
end
#
# call-seq:
# obj.clone(freeze: nil) -> an_object