Commit 82c0cb9
committed
Add a specialized instruction for
This commit adds a specialized instruction for called to `.nil?`. It is
about 27% faster than master. Here is a benchmark:
```
[aaron@TC ~/g/ruby (specialized-nilp)]$ cat compil.rb
require "benchmark/ips"
not_nil = Object.new
xnil = nil
Benchmark.ips do |x|
x.report("nil?") { xnil.nil? }
x.report("not nil") { not_nil.nil? }
end
```
On Ruby master:
```
[aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 450.695k i/100ms
not nil 443.863k i/100ms
Calculating -------------------------------------
nil? 20.829M (± 7.6%) i/s - 103.660M in 5.015627s
not nil 20.700M (± 7.9%) i/s - 102.976M in 5.015786s
[aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 412.899k i/100ms
not nil 420.359k i/100ms
Calculating -------------------------------------
nil? 17.882M (±15.1%) i/s - 87.122M in 5.010014s
not nil 18.445M (± 7.6%) i/s - 91.638M in 5.006561s
[aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 423.562k i/100ms
not nil 446.841k i/100ms
Calculating -------------------------------------
nil? 20.547M (± 7.8%) i/s - 102.078M in 5.009083s
not nil 20.050M (±12.8%) i/s - 98.305M in 5.007470s
```
On this branch:
```
[aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 475.495k i/100ms
not nil 406.826k i/100ms
Calculating -------------------------------------
nil? 27.379M (±12.1%) i/s - 134.565M in 5.009041s
not nil 26.911M (± 8.0%) i/s - 133.439M in 5.001739s
[aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 448.738k i/100ms
not nil 443.743k i/100ms
Calculating -------------------------------------
nil? 27.265M (±12.4%) i/s - 133.724M in 5.004383s
not nil 27.125M (± 5.8%) i/s - 135.342M in 5.012178s
[aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb
Warming up --------------------------------------
nil? 461.641k i/100ms
not nil 465.173k i/100ms
Calculating -------------------------------------
nil? 27.170M (±12.3%) i/s - 133.414M in 5.008517s
not nil 26.930M (± 8.6%) i/s - 133.505M in 5.006783s
```.nil? calls1 parent c9b74f9 commit 82c0cb9
7 files changed
+39
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3251 | 3251 | | |
3252 | 3252 | | |
3253 | 3253 | | |
| 3254 | + | |
3254 | 3255 | | |
3255 | 3256 | | |
3256 | 3257 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
808 | 808 | | |
809 | 809 | | |
810 | 810 | | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
811 | 825 | | |
812 | 826 | | |
813 | 827 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1664 | 1664 | | |
1665 | 1665 | | |
1666 | 1666 | | |
1667 | | - | |
| 1667 | + | |
1668 | 1668 | | |
1669 | 1669 | | |
1670 | 1670 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1657 | 1657 | | |
1658 | 1658 | | |
1659 | 1659 | | |
| 1660 | + | |
1660 | 1661 | | |
1661 | 1662 | | |
1662 | 1663 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
547 | 547 | | |
548 | 548 | | |
549 | 549 | | |
| 550 | + | |
550 | 551 | | |
551 | 552 | | |
552 | 553 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4239 | 4239 | | |
4240 | 4240 | | |
4241 | 4241 | | |
| 4242 | + | |
| 4243 | + | |
| 4244 | + | |
| 4245 | + | |
| 4246 | + | |
| 4247 | + | |
| 4248 | + | |
| 4249 | + | |
| 4250 | + | |
| 4251 | + | |
| 4252 | + | |
| 4253 | + | |
| 4254 | + | |
| 4255 | + | |
| 4256 | + | |
| 4257 | + | |
| 4258 | + | |
| 4259 | + | |
| 4260 | + | |
| 4261 | + | |
4242 | 4262 | | |
4243 | 4263 | | |
4244 | 4264 | | |
| |||
0 commit comments