Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Direct array element access on ByValue instructions #2827

Closed
wants to merge 2 commits into from

Conversation

HalidOdat
Copy link
Member

@HalidOdat HalidOdat commented Apr 16, 2023

Most of the time that we have a ByValue ( [ value ] syntax ) it is for arrays and the value is usually an index. This PR adds a fast path to the instructions (without calling .borrow() on the object to check if its an array)

For example, this code:

let a = [1, 2, 3]

for (let i = 0 ; i < 10000000; ++i) {
  a[i % 3] += a[ (i + 1) % 3 ]
}

Using hyperfine, it ran 1.38 times faster on this PR.

Benchmark 1: ./boa_main test.js
  Time (mean ± σ):     16.504 s ±  0.192 s    [User: 16.440 s, System: 0.020 s]
  Range (min … max):   16.328 s … 16.938 s    10 runs

Benchmark 2: ./boa_direct_array_access test.js
  Time (mean ± σ):     11.982 s ±  0.038 s    [User: 11.939 s, System: 0.013 s]
  Range (min … max):   11.914 s … 12.035 s    10 runs

Summary
  './boa_direct_array_access test.js' ran
    1.38 ± 0.02 times faster than './boa_main test.js'

@HalidOdat HalidOdat added performance Performance related changes and issues execution Issues or PRs related to code execution run-benchmark Label used to run banchmarks on PRs labels Apr 16, 2023
@HalidOdat HalidOdat added this to the v0.17.0 milestone Apr 16, 2023
@github-actions
Copy link

github-actions bot commented Apr 16, 2023

Test262 conformance changes

Test result main count PR count difference
Total 94,591 94,591 0
Passed 73,161 73,161 0
Ignored 17,530 17,530 0
Failed 3,900 3,900 0
Panics 0 0 0
Conformance 77.34% 77.34% 0.00%

@codecov
Copy link

codecov bot commented Apr 16, 2023

Codecov Report

Merging #2827 (c8b62c2) into main (54695cc) will increase coverage by 0.04%.
The diff coverage is 81.03%.

@@            Coverage Diff             @@
##             main    #2827      +/-   ##
==========================================
+ Coverage   50.92%   50.97%   +0.04%     
==========================================
  Files         419      419              
  Lines       41780    41837      +57     
==========================================
+ Hits        21278    21326      +48     
- Misses      20502    20511       +9     
Impacted Files Coverage Δ
boa_engine/src/object/internal_methods/mod.rs 87.00% <ø> (ø)
boa_engine/src/vm/opcode/get/property.rs 86.20% <53.33%> (-11.47%) ⬇️
boa_engine/src/object/property_map.rs 55.03% <66.66%> (+0.13%) ⬆️
boa_engine/src/vm/opcode/set/property.rs 70.83% <92.30%> (+6.49%) ⬆️
boa_engine/src/object/jsobject.rs 62.93% <100.00%> (+0.77%) ⬆️

... and 1 file with indirect coverage changes

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@HalidOdat HalidOdat force-pushed the optimization/direct-array-element-access branch from 74e2830 to 64c6d3a Compare April 16, 2023 01:10
@github-actions
Copy link

Benchmark for b07dddb

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 540.2±1.89ns 544.4±0.86ns +0.78%
Arithmetic operations (Execution) 465.5±0.21ns 466.8±0.16ns +0.28%
Arithmetic operations (Parser) 7.7±0.05µs 7.7±0.03µs 0.00%
Array access (Compiler) 1652.5±2.79ns 1657.1±2.15ns +0.28%
Array access (Execution) 8.8±4.86µs 7.5±0.02µs -14.77%
Array access (Parser) 17.2±0.03µs 17.0±0.08µs -1.16%
Array creation (Compiler) 2.5±0.01µs 2.5±0.01µs 0.00%
Array creation (Execution) 1217.7±343.54µs 1280.2±11.16µs +5.13%
Array creation (Parser) 21.0±0.07µs 20.6±0.04µs -1.90%
Array pop (Compiler) 3.9±0.01µs 4.0±0.01µs +2.56%
Array pop (Execution) 697.2±221.35µs 636.7±1.30µs -8.68%
Array pop (Parser) 170.9±0.19µs 171.4±0.18µs +0.29%
Boolean Object Access (Compiler) 1196.9±2.36ns 1191.9±4.94ns -0.42%
Boolean Object Access (Execution) 5.2±0.01µs 5.2±0.01µs 0.00%
Boolean Object Access (Parser) 21.3±0.14µs 20.6±0.04µs -3.29%
Clean js (Compiler) 5.1±0.01µs 5.1±0.01µs 0.00%
Clean js (Execution) 787.3±3.47µs 775.4±2.92µs -1.51%
Clean js (Parser) 43.4±0.15µs 42.4±0.06µs -2.30%
Create Realm 522.3±6.83µs 528.8±2.18µs +1.24%
Dynamic Object Property Access (Compiler) 1959.2±5.56ns 1956.1±3.44ns -0.16%
Dynamic Object Property Access (Execution) 4.9±0.00µs 4.9±0.01µs 0.00%
Dynamic Object Property Access (Parser) 15.7±0.04µs 15.4±0.06µs -1.91%
Fibonacci (Compiler) 3.0±0.01µs 3.1±0.01µs +3.33%
Fibonacci (Execution) 1125.8±3.60µs 1129.0±3.81µs +0.28%
Fibonacci (Parser) 24.4±0.08µs 24.0±0.11µs -1.64%
For loop (Compiler) 2.8±0.01µs 2.8±0.01µs 0.00%
For loop (Execution) 16.4±0.05µs 16.3±0.06µs -0.61%
For loop (Parser) 21.3±0.04µs 20.9±0.05µs -1.88%
Mini js (Compiler) 4.5±0.01µs 4.5±0.01µs 0.00%
Mini js (Execution) 742.1±4.63µs 726.0±2.27µs -2.17%
Mini js (Parser) 38.3±0.28µs 37.1±0.08µs -3.13%
Number Object Access (Compiler) 1118.0±2.47ns 1117.6±2.68ns -0.04%
Number Object Access (Execution) 4.0±0.03µs 4.1±0.01µs +2.50%
Number Object Access (Parser) 16.4±0.10µs 16.0±0.10µs -2.44%
Object Creation (Compiler) 1757.3±5.15ns 1737.7±3.44ns -1.12%
Object Creation (Execution) 4.6±0.02µs 4.6±0.01µs 0.00%
Object Creation (Parser) 13.8±0.03µs 13.5±0.02µs -2.17%
RegExp (Compiler) 1968.4±2.49ns 1980.4±3.20ns +0.61%
RegExp (Execution) 12.7±0.05µs 12.8±0.05µs +0.79%
RegExp (Parser) 14.9±0.03µs 14.7±0.02µs -1.34%
RegExp Creation (Compiler) 1751.1±6.86ns 1760.4±3.27ns +0.53%
RegExp Creation (Execution) 9.0±0.02µs 9.0±0.01µs 0.00%
RegExp Creation (Parser) 12.7±0.04µs 12.3±0.03µs -3.15%
RegExp Literal (Compiler) 1977.8±4.43ns 1979.2±4.43ns +0.07%
RegExp Literal (Execution) 12.7±0.03µs 12.8±0.05µs +0.79%
RegExp Literal (Parser) 15.7±0.04µs 15.5±0.03µs -1.27%
RegExp Literal Creation (Compiler) 1766.5±4.22ns 1763.8±2.94ns -0.15%
RegExp Literal Creation (Execution) 9.1±0.02µs 9.0±0.02µs -1.10%
RegExp Literal Creation (Parser) 13.3±0.02µs 13.1±0.02µs -1.50%
Static Object Property Access (Compiler) 1779.5±5.86ns 1752.9±4.09ns -1.49%
Static Object Property Access (Execution) 4.7±0.01µs 4.8±0.02µs +2.13%
Static Object Property Access (Parser) 14.9±0.07µs 14.5±0.03µs -2.68%
String Object Access (Compiler) 1539.9±6.40ns 1537.6±6.48ns -0.15%
String Object Access (Execution) 6.8±0.01µs 6.7±0.01µs -1.47%
String Object Access (Parser) 20.9±0.04µs 20.1±0.06µs -3.83%
String comparison (Compiler) 2.6±0.01µs 2.6±0.00µs 0.00%
String comparison (Execution) 4.3±1.17µs 4.1±0.01µs -4.65%
String comparison (Parser) 16.9±0.02µs 16.7±0.04µs -1.18%
String concatenation (Compiler) 2.0±0.01µs 2.0±0.00µs 0.00%
String concatenation (Execution) 4.0±0.60µs 3.9±0.01µs -2.50%
String concatenation (Parser) 11.5±0.02µs 11.3±0.02µs -1.74%
String copy (Compiler) 1668.1±2.13ns 1661.9±2.22ns -0.37%
String copy (Execution) 3.7±0.02µs 3.7±0.01µs 0.00%
String copy (Parser) 8.7±0.02µs 8.6±0.02µs -1.15%
Symbols (Compiler) 1192.8±3.59ns 1199.1±3.58ns +0.53%
Symbols (Execution) 3.8±0.02µs 3.8±0.02µs 0.00%
Symbols (Parser) 6.8±0.01µs 6.6±0.03µs -2.94%

@github-actions
Copy link

Benchmark for 767f9b5

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 553.0±1.45ns 550.8±1.55ns -0.40%
Arithmetic operations (Execution) 452.2±0.18ns 452.1±0.14ns -0.02%
Arithmetic operations (Parser) 7.4±0.03µs 7.4±0.03µs 0.00%
Array access (Compiler) 1630.2±2.30ns 1638.0±2.54ns +0.48%
Array access (Execution) 7.1±0.01µs 7.2±0.01µs +1.41%
Array access (Parser) 15.5±0.01µs 15.6±0.10µs +0.65%
Array creation (Compiler) 2.4±0.01µs 2.4±0.01µs 0.00%
Array creation (Execution) 1021.0±2.46µs 1201.2±12.18µs +17.65%
Array creation (Parser) 18.8±0.02µs 18.8±0.03µs 0.00%
Array pop (Compiler) 4.1±0.01µs 4.1±0.01µs 0.00%
Array pop (Execution) 584.4±6.26µs 593.4±11.94µs +1.54%
Array pop (Parser) 161.0±0.23µs 162.0±0.25µs +0.62%
Boolean Object Access (Compiler) 1192.8±2.88ns 1206.5±2.33ns +1.15%
Boolean Object Access (Execution) 4.8±0.01µs 4.9±0.01µs +2.08%
Boolean Object Access (Parser) 19.5±0.04µs 19.2±0.05µs -1.54%
Clean js (Compiler) 4.8±0.00µs 4.8±0.01µs 0.00%
Clean js (Execution) 753.4±3.76µs 756.4±10.24µs +0.40%
Clean js (Parser) 39.7±0.03µs 39.4±0.03µs -0.76%
Create Realm 538.1±1.37µs 590.8±110.10µs +9.79%
Dynamic Object Property Access (Compiler) 1925.2±4.88ns 1947.4±3.31ns +1.15%
Dynamic Object Property Access (Execution) 4.6±0.19µs 4.7±0.02µs +2.17%
Dynamic Object Property Access (Parser) 14.0±0.02µs 13.9±0.03µs -0.71%
Fibonacci (Compiler) 2.9±0.01µs 3.0±0.01µs +3.45%
Fibonacci (Execution) 1038.0±4.17µs 1044.7±4.49µs +0.65%
Fibonacci (Parser) 22.0±0.05µs 21.9±0.03µs -0.45%
For loop (Compiler) 2.7±0.01µs 2.7±0.01µs 0.00%
For loop (Execution) 15.3±0.02µs 15.6±0.03µs +1.96%
For loop (Parser) 19.2±0.02µs 19.1±0.03µs -0.52%
Mini js (Compiler) 4.3±0.01µs 4.3±0.01µs 0.00%
Mini js (Execution) 706.8±2.28µs 719.0±4.74µs +1.73%
Mini js (Parser) 34.6±0.03µs 34.6±0.07µs 0.00%
Number Object Access (Compiler) 1120.4±2.99ns 1134.1±1.90ns +1.22%
Number Object Access (Execution) 3.7±0.01µs 3.8±0.01µs +2.70%
Number Object Access (Parser) 14.9±0.03µs 14.8±0.05µs -0.67%
Object Creation (Compiler) 1736.8±3.76ns 1729.6±3.08ns -0.41%
Object Creation (Execution) 4.3±0.01µs 4.4±0.01µs +2.33%
Object Creation (Parser) 12.2±0.02µs 12.1±0.01µs -0.82%
RegExp (Compiler) 1956.8±5.21ns 1955.5±2.92ns -0.07%
RegExp (Execution) 12.0±0.03µs 12.0±0.03µs 0.00%
RegExp (Parser) 13.4±0.18µs 13.4±0.03µs 0.00%
RegExp Creation (Compiler) 1760.0±3.18ns 1749.5±3.46ns -0.60%
RegExp Creation (Execution) 8.4±0.04µs 8.5±0.03µs +1.19%
RegExp Creation (Parser) 11.3±0.01µs 11.2±0.02µs -0.88%
RegExp Literal (Compiler) 1952.9±4.16ns 1948.9±5.83ns -0.20%
RegExp Literal (Execution) 12.0±0.03µs 12.0±0.03µs 0.00%
RegExp Literal (Parser) 14.3±0.02µs 14.2±0.02µs -0.70%
RegExp Literal Creation (Compiler) 1771.1±28.25ns 1746.4±3.17ns -1.39%
RegExp Literal Creation (Execution) 8.4±0.02µs 8.5±0.04µs +1.19%
RegExp Literal Creation (Parser) 12.1±0.01µs 11.9±0.02µs -1.65%
Static Object Property Access (Compiler) 1753.2±3.80ns 1759.9±17.49ns +0.38%
Static Object Property Access (Execution) 4.4±0.01µs 4.5±0.03µs +2.27%
Static Object Property Access (Parser) 13.2±0.02µs 13.2±0.01µs 0.00%
String Object Access (Compiler) 1497.6±3.05ns 1524.8±5.25ns +1.82%
String Object Access (Execution) 6.5±0.01µs 6.4±0.01µs -1.54%
String Object Access (Parser) 18.7±0.02µs 18.7±0.04µs 0.00%
String comparison (Compiler) 2.5±0.00µs 2.5±0.01µs 0.00%
String comparison (Execution) 4.0±0.01µs 4.0±0.01µs 0.00%
String comparison (Parser) 15.2±0.01µs 15.1±0.02µs -0.66%
String concatenation (Compiler) 1952.6±3.79ns 1967.2±2.62ns +0.75%
String concatenation (Execution) 3.7±0.01µs 3.8±0.01µs +2.70%
String concatenation (Parser) 10.3±0.01µs 10.3±0.01µs 0.00%
String copy (Compiler) 1614.9±3.24ns 1624.3±3.05ns +0.58%
String copy (Execution) 3.5±0.01µs 3.6±0.01µs +2.86%
String copy (Parser) 7.7±0.01µs 7.7±0.01µs 0.00%
Symbols (Compiler) 1169.7±2.63ns 1176.0±3.14ns +0.54%
Symbols (Execution) 3.6±0.01µs 3.7±0.01µs +2.78%
Symbols (Parser) 6.1±0.01µs 6.0±0.01µs -1.64%

Copy link
Member

@Razican Razican left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good optimization!!

boa_engine/src/vm/opcode/get/property.rs Show resolved Hide resolved
@github-actions
Copy link

Benchmark for d708c8c

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 540.0±0.68ns 548.4±1.10ns +1.56%
Arithmetic operations (Execution) 470.7±0.26ns 469.4±0.29ns -0.28%
Arithmetic operations (Parser) 7.8±0.10µs 7.8±0.14µs 0.00%
Array access (Compiler) 1660.3±2.68ns 1646.8±2.41ns -0.81%
Array access (Execution) 7.5±0.02µs 7.6±0.05µs +1.33%
Array access (Parser) 17.4±0.40µs 17.1±0.08µs -1.72%
Array creation (Compiler) 2.5±0.01µs 2.5±0.01µs 0.00%
Array creation (Execution) 1112.1±3.33µs 1265.8±5.72µs +13.82%
Array creation (Parser) 21.3±0.04µs 20.8±0.05µs -2.35%
Array pop (Compiler) 4.0±0.01µs 4.0±0.02µs 0.00%
Array pop (Execution) 627.9±9.96µs 626.7±1.85µs -0.19%
Array pop (Parser) 171.5±0.64µs 171.4±2.51µs -0.06%
Boolean Object Access (Compiler) 1191.5±3.92ns 1202.1±2.43ns +0.89%
Boolean Object Access (Execution) 5.2±0.01µs 5.3±0.01µs +1.92%
Boolean Object Access (Parser) 21.3±0.16µs 20.9±0.02µs -1.88%
Clean js (Compiler) 5.1±0.01µs 5.1±0.01µs 0.00%
Clean js (Execution) 801.5±3.40µs 793.7±5.01µs -0.97%
Clean js (Parser) 43.8±0.06µs 42.8±0.14µs -2.28%
Create Realm 531.9±6.54µs 524.6±2.91µs -1.37%
Dynamic Object Property Access (Compiler) 1944.5±5.45ns 1974.1±3.28ns +1.52%
Dynamic Object Property Access (Execution) 4.9±0.01µs 4.8±0.01µs -2.04%
Dynamic Object Property Access (Parser) 15.7±0.03µs 15.4±0.04µs -1.91%
Fibonacci (Compiler) 3.0±0.00µs 3.1±0.01µs +3.33%
Fibonacci (Execution) 1138.4±6.71µs 1134.3±3.88µs -0.36%
Fibonacci (Parser) 24.6±0.03µs 24.0±0.10µs -2.44%
For loop (Compiler) 2.8±0.01µs 2.8±0.00µs 0.00%
For loop (Execution) 16.3±0.05µs 16.0±0.05µs -1.84%
For loop (Parser) 21.7±0.05µs 21.2±0.08µs -2.30%
Mini js (Compiler) 4.5±0.01µs 4.5±0.01µs 0.00%
Mini js (Execution) 749.6±2.88µs 735.2±5.27µs -1.92%
Mini js (Parser) 38.8±0.11µs 37.9±1.19µs -2.32%
Number Object Access (Compiler) 1114.0±3.37ns 1129.7±3.26ns +1.41%
Number Object Access (Execution) 4.0±0.04µs 4.1±0.01µs +2.50%
Number Object Access (Parser) 16.5±0.12µs 16.0±0.05µs -3.03%
Object Creation (Compiler) 1751.5±3.02ns 1765.7±3.59ns +0.81%
Object Creation (Execution) 4.5±0.01µs 4.6±0.01µs +2.22%
Object Creation (Parser) 13.9±0.03µs 13.6±0.03µs -2.16%
RegExp (Compiler) 1981.9±4.29ns 2.0±0.00µs +0.91%
RegExp (Execution) 12.8±0.04µs 12.7±0.04µs -0.78%
RegExp (Parser) 15.1±0.10µs 14.8±0.03µs -1.99%
RegExp Creation (Compiler) 1750.4±3.46ns 1786.9±4.94ns +2.09%
RegExp Creation (Execution) 9.0±0.01µs 9.0±0.16µs 0.00%
RegExp Creation (Parser) 12.8±0.03µs 12.4±0.02µs -3.13%
RegExp Literal (Compiler) 1974.8±4.64ns 1983.5±6.91ns +0.44%
RegExp Literal (Execution) 12.8±0.04µs 12.8±0.03µs 0.00%
RegExp Literal (Parser) 15.8±0.03µs 15.6±0.03µs -1.27%
RegExp Literal Creation (Compiler) 1764.7±3.49ns 1781.3±2.92ns +0.94%
RegExp Literal Creation (Execution) 9.0±0.02µs 9.0±0.11µs 0.00%
RegExp Literal Creation (Parser) 13.4±0.03µs 13.0±0.05µs -2.99%
Static Object Property Access (Compiler) 1774.6±5.48ns 1792.0±58.24ns +0.98%
Static Object Property Access (Execution) 4.7±0.01µs 4.8±0.02µs +2.13%
Static Object Property Access (Parser) 15.0±0.03µs 14.6±0.04µs -2.67%
String Object Access (Compiler) 1533.6±7.16ns 1542.0±6.19ns +0.55%
String Object Access (Execution) 6.9±0.06µs 7.1±0.15µs +2.90%
String Object Access (Parser) 21.1±0.08µs 20.1±0.08µs -4.74%
String comparison (Compiler) 2.6±0.00µs 2.6±0.01µs 0.00%
String comparison (Execution) 4.2±0.01µs 4.2±0.01µs 0.00%
String comparison (Parser) 17.3±0.02µs 16.8±0.03µs -2.89%
String concatenation (Compiler) 2.0±0.00µs 2.0±0.01µs 0.00%
String concatenation (Execution) 3.9±0.01µs 3.9±0.01µs 0.00%
String concatenation (Parser) 11.8±0.03µs 11.5±0.03µs -2.54%
String copy (Compiler) 1682.9±6.34ns 1656.1±2.49ns -1.59%
String copy (Execution) 3.8±0.01µs 3.7±0.01µs -2.63%
String copy (Parser) 8.9±0.02µs 8.7±0.02µs -2.25%
Symbols (Compiler) 1196.8±2.54ns 1214.5±3.73ns +1.48%
Symbols (Execution) 3.8±0.03µs 3.8±0.01µs 0.00%
Symbols (Parser) 6.9±0.03µs 6.6±0.01µs -4.35%

@github-actions
Copy link

Benchmark for acc2314

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 641.2±11.92ns 653.7±13.09ns +1.95%
Arithmetic operations (Execution) 526.0±17.44ns 537.9±10.58ns +2.26%
Arithmetic operations (Parser) 7.8±0.35µs 8.1±0.16µs +3.85%
Array access (Compiler) 1810.3±66.42ns 1925.3±48.75ns +6.35%
Array access (Execution) 8.6±0.07µs 8.2±0.21µs -4.65%
Array access (Parser) 15.2±0.52µs 16.3±0.41µs +7.24%
Array creation (Compiler) 2.6±0.12µs 2.9±0.08µs +11.54%
Array creation (Execution) 1156.8±14.43µs 1297.6±25.09µs +12.17%
Array creation (Parser) 19.6±0.53µs 19.5±0.60µs -0.51%
Array pop (Compiler) 4.4±0.18µs 5.0±0.09µs +13.64%
Array pop (Execution) 670.6±16.10µs 665.5±10.31µs -0.76%
Array pop (Parser) 170.2±3.18µs 175.6±3.75µs +3.17%
Boolean Object Access (Compiler) 1323.0±16.42ns 1309.9±29.79ns -0.99%
Boolean Object Access (Execution) 5.7±0.17µs 5.6±0.14µs -1.75%
Boolean Object Access (Parser) 19.9±1.38µs 20.8±0.41µs +4.52%
Clean js (Compiler) 5.7±0.07µs 5.7±0.13µs 0.00%
Clean js (Execution) 858.8±19.42µs 871.1±19.79µs +1.43%
Clean js (Parser) 40.9±1.47µs 42.4±0.14µs +3.67%
Create Realm 597.3±19.15µs 630.7±16.02µs +5.59%
Dynamic Object Property Access (Compiler) 2.1±0.11µs 2.3±0.04µs +9.52%
Dynamic Object Property Access (Execution) 5.5±0.15µs 5.3±0.14µs -3.64%
Dynamic Object Property Access (Parser) 14.4±0.29µs 14.4±0.29µs 0.00%
Fibonacci (Compiler) 3.1±0.15µs 3.5±0.03µs +12.90%
Fibonacci (Execution) 1242.7±44.55µs 1229.1±26.07µs -1.09%
Fibonacci (Parser) 22.8±0.56µs 23.7±0.43µs +3.95%
For loop (Compiler) 2.8±0.13µs 3.2±0.04µs +14.29%
For loop (Execution) 17.6±0.65µs 18.2±0.39µs +3.41%
For loop (Parser) 19.9±0.50µs 20.3±0.86µs +2.01%
Mini js (Compiler) 4.9±0.14µs 4.9±0.16µs 0.00%
Mini js (Execution) 810.7±15.28µs 784.2±19.19µs -3.27%
Mini js (Parser) 32.8±1.55µs 36.9±0.74µs +12.50%
Number Object Access (Compiler) 1215.2±40.01ns 1271.4±25.87ns +4.62%
Number Object Access (Execution) 4.4±0.09µs 4.2±0.13µs -4.55%
Number Object Access (Parser) 14.7±0.72µs 15.6±0.50µs +6.12%
Object Creation (Compiler) 2.1±0.05µs 2.1±0.03µs 0.00%
Object Creation (Execution) 5.2±0.12µs 4.9±0.16µs -5.77%
Object Creation (Parser) 12.5±0.33µs 13.0±0.34µs +4.00%
RegExp (Compiler) 2.1±0.10µs 2.3±0.04µs +9.52%
RegExp (Execution) 14.5±0.11µs 13.8±0.53µs -4.83%
RegExp (Parser) 13.5±0.47µs 14.2±0.30µs +5.19%
RegExp Creation (Compiler) 1846.0±90.79ns 2.1±0.04µs +13.76%
RegExp Creation (Execution) 9.9±0.18µs 10.2±0.22µs +3.03%
RegExp Creation (Parser) 11.6±0.32µs 11.4±0.42µs -1.72%
RegExp Literal (Compiler) 2.1±0.11µs 2.3±0.04µs +9.52%
RegExp Literal (Execution) 14.3±0.22µs 14.0±0.47µs -2.10%
RegExp Literal (Parser) 15.0±0.46µs 15.7±0.46µs +4.67%
RegExp Literal Creation (Compiler) 1933.5±70.51ns 2.1±0.04µs +8.61%
RegExp Literal Creation (Execution) 9.9±0.20µs 10.3±0.18µs +4.04%
RegExp Literal Creation (Parser) 12.7±0.35µs 13.4±0.33µs +5.51%
Static Object Property Access (Compiler) 1966.1±88.40ns 2.1±0.06µs +6.81%
Static Object Property Access (Execution) 5.2±0.16µs 5.2±0.10µs 0.00%
Static Object Property Access (Parser) 13.7±0.40µs 13.8±0.34µs +0.73%
String Object Access (Compiler) 1676.2±27.34ns 1693.3±44.59ns +1.02%
String Object Access (Execution) 7.3±0.20µs 7.6±0.19µs +4.11%
String Object Access (Parser) 19.8±0.53µs 20.1±0.45µs +1.52%
String comparison (Compiler) 2.9±0.10µs 2.9±0.05µs 0.00%
String comparison (Execution) 4.8±0.11µs 4.5±0.14µs -6.25%
String comparison (Parser) 15.6±0.62µs 16.3±0.30µs +4.49%
String concatenation (Compiler) 2.2±0.10µs 2.3±0.05µs +4.55%
String concatenation (Execution) 4.5±0.12µs 4.1±0.17µs -8.89%
String concatenation (Parser) 10.7±0.33µs 11.1±0.20µs +3.74%
String copy (Compiler) 1972.5±41.75ns 1916.0±34.36ns -2.86%
String copy (Execution) 4.2±0.09µs 4.0±0.12µs -4.76%
String copy (Parser) 7.6±0.37µs 8.3±0.11µs +9.21%
Symbols (Compiler) 1249.7±61.14ns 1416.3±13.09ns +13.33%
Symbols (Execution) 4.3±0.13µs 4.3±0.10µs 0.00%
Symbols (Parser) 5.9±0.26µs 6.3±0.16µs +6.78%

@raskad
Copy link
Member

raskad commented Apr 19, 2023

To me this looks like it should be faster, but the "Array creation" benchmark seems to be slower in the ci. I checked it locally and also got a pretty consistent +12% on that one. Do you know why that may be @HalidOdat?

@HalidOdat
Copy link
Member Author

HalidOdat commented Apr 20, 2023

To me this looks like it should be faster, but the "Array creation" benchmark seems to be slower in the ci. I checked it locally and also got a pretty consistent +12% on that one. Do you know why that may be @HalidOdat?

😕 Yes, It's weird since the first benchmark had a -14% increase in performance on array benchmarks, and I didn't change something that should effect performance, will rebase this and see if it persists :)

EDIT:

The problem is that this optimizes for access and set of pre-existing indexed properties, not creating new ones like in the benchmark:

(function () {
  let testArr = [];
  for (let a = 0; a <= 500; a++) {
    testArr[a] = "p" + a;
  }
  return testArr;
})();

Will work on adding a fast path for this :)

@HalidOdat HalidOdat force-pushed the optimization/direct-array-element-access branch from b879fc1 to 8a82406 Compare April 20, 2023 03:02
@github-actions
Copy link

Benchmark for 5305637

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 554.8±0.88ns 556.0±0.93ns +0.22%
Arithmetic operations (Execution) 450.5±0.15ns 450.9±0.18ns +0.09%
Arithmetic operations (Parser) 7.3±0.01µs 7.4±0.02µs +1.37%
Array access (Compiler) 1695.2±7.43ns 1611.9±2.24ns -4.91%
Array access (Execution) 7.0±0.01µs 7.0±0.02µs 0.00%
Array access (Parser) 15.2±0.03µs 15.1±0.02µs -0.66%
Array creation (Compiler) 2.5±0.01µs 2.5±0.01µs 0.00%
Array creation (Execution) 1010.8±4.25µs 1179.4±3.03µs +16.68%
Array creation (Parser) 18.7±0.03µs 18.6±0.02µs -0.53%
Array pop (Compiler) 4.2±0.02µs 4.3±0.01µs +2.38%
Array pop (Execution) 581.2±3.05µs 586.3±2.91µs +0.88%
Array pop (Parser) 158.5±0.19µs 162.6±0.33µs +2.59%
Boolean Object Access (Compiler) 1209.2±1.90ns 1195.8±2.32ns -1.11%
Boolean Object Access (Execution) 4.8±0.01µs 4.8±0.01µs 0.00%
Boolean Object Access (Parser) 19.3±1.06µs 18.8±0.02µs -2.59%
Clean js (Compiler) 5.0±0.01µs 5.0±0.01µs 0.00%
Clean js (Execution) 760.0±1.92µs 759.7±3.67µs -0.04%
Clean js (Parser) 38.9±0.04µs 38.5±0.05µs -1.03%
Create Realm 540.5±5.86µs 537.1±1.77µs -0.63%
Dynamic Object Property Access (Compiler) 2.0±0.00µs 1968.6±3.22ns -1.57%
Dynamic Object Property Access (Execution) 4.5±0.02µs 4.5±0.01µs 0.00%
Dynamic Object Property Access (Parser) 13.9±0.03µs 13.5±0.02µs -2.88%
Fibonacci (Compiler) 3.1±0.00µs 3.0±0.01µs -3.23%
Fibonacci (Execution) 1041.5±3.14µs 1036.7±4.74µs -0.46%
Fibonacci (Parser) 21.8±0.04µs 21.5±0.03µs -1.38%
For loop (Compiler) 2.8±0.01µs 2.7±0.01µs -3.57%
For loop (Execution) 15.2±0.03µs 15.2±0.02µs 0.00%
For loop (Parser) 19.2±0.04µs 18.9±0.07µs -1.56%
Mini js (Compiler) 4.4±0.01µs 4.4±0.01µs 0.00%
Mini js (Execution) 716.9±3.02µs 713.2±2.85µs -0.52%
Mini js (Parser) 34.1±0.03µs 33.6±0.05µs -1.47%
Number Object Access (Compiler) 1127.9±1.84ns 1120.5±7.21ns -0.66%
Number Object Access (Execution) 3.7±0.01µs 3.7±0.00µs 0.00%
Number Object Access (Parser) 14.7±0.04µs 14.3±0.03µs -2.72%
Object Creation (Compiler) 1823.1±5.43ns 1737.5±3.50ns -4.70%
Object Creation (Execution) 4.3±0.01µs 4.2±0.01µs -2.33%
Object Creation (Parser) 12.2±0.04µs 11.9±0.01µs -2.46%
RegExp (Compiler) 2.1±0.01µs 2.0±0.00µs -4.76%
RegExp (Execution) 12.2±0.02µs 12.5±0.03µs +2.46%
RegExp (Parser) 13.3±0.04µs 13.1±0.02µs -1.50%
RegExp Creation (Compiler) 1831.8±4.11ns 1787.5±8.03ns -2.42%
RegExp Creation (Execution) 8.4±0.03µs 8.9±0.02µs +5.95%
RegExp Creation (Parser) 11.1±0.03µs 11.0±0.01µs -0.90%
RegExp Literal (Compiler) 2.0±0.00µs 2.0±0.00µs 0.00%
RegExp Literal (Execution) 12.2±0.03µs 12.4±0.06µs +1.64%
RegExp Literal (Parser) 14.0±0.03µs 14.3±0.01µs +2.14%
RegExp Literal Creation (Compiler) 1830.8±4.88ns 1785.4±5.26ns -2.48%
RegExp Literal Creation (Execution) 8.4±0.02µs 8.8±0.02µs +4.76%
RegExp Literal Creation (Parser) 11.9±0.03µs 12.2±0.02µs +2.52%
Static Object Property Access (Compiler) 1835.9±2.54ns 1759.3±3.43ns -4.17%
Static Object Property Access (Execution) 4.4±0.01µs 4.4±0.04µs 0.00%
Static Object Property Access (Parser) 13.1±0.05µs 12.9±0.02µs -1.53%
String Object Access (Compiler) 1538.6±5.70ns 1515.0±5.64ns -1.53%
String Object Access (Execution) 6.4±0.01µs 6.3±0.01µs -1.56%
String Object Access (Parser) 18.5±0.01µs 18.3±0.03µs -1.08%
String comparison (Compiler) 2.6±0.01µs 2.4±0.00µs -7.69%
String comparison (Execution) 4.0±0.07µs 3.9±0.01µs -2.50%
String comparison (Parser) 15.1±0.01µs 14.8±0.06µs -1.99%
String concatenation (Compiler) 2.1±0.00µs 1957.6±4.69ns -6.78%
String concatenation (Execution) 3.7±0.01µs 3.7±0.01µs 0.00%
String concatenation (Parser) 10.3±0.01µs 10.1±0.01µs -1.94%
String copy (Compiler) 1708.9±2.37ns 1615.5±2.53ns -5.47%
String copy (Execution) 3.5±0.01µs 3.5±0.01µs 0.00%
String copy (Parser) 7.7±0.02µs 7.6±0.02µs -1.30%
Symbols (Compiler) 1234.2±1.63ns 1195.6±2.49ns -3.13%
Symbols (Execution) 3.6±0.01µs 3.6±0.00µs 0.00%
Symbols (Parser) 6.0±0.03µs 5.9±0.01µs -1.67%

@HalidOdat HalidOdat force-pushed the optimization/direct-array-element-access branch from 8a82406 to 75af983 Compare April 20, 2023 08:21
@github-actions
Copy link

Benchmark for cef443f

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 546.6±0.83ns 554.4±0.91ns +1.43%
Arithmetic operations (Execution) 469.4±0.16ns 500.7±19.07ns +6.67%
Arithmetic operations (Parser) 7.6±0.01µs 7.5±0.07µs -1.32%
Array access (Compiler) 1748.2±58.07ns 1835.3±3.95ns +4.98%
Array access (Execution) 7.6±0.02µs 7.5±0.05µs -1.32%
Array access (Parser) 16.7±0.06µs 16.6±0.05µs -0.60%
Array creation (Compiler) 2.5±0.01µs 2.7±0.01µs +8.00%
Array creation (Execution) 1107.2±1.76µs 654.0±1.17µs -40.93%
Array creation (Parser) 19.9±0.05µs 19.9±0.04µs 0.00%
Array pop (Compiler) 4.2±0.01µs 4.3±0.02µs +2.38%
Array pop (Execution) 645.4±1.16µs 631.7±0.91µs -2.12%
Array pop (Parser) 167.8±0.15µs 167.8±0.10µs 0.00%
Boolean Object Access (Compiler) 1218.2±6.59ns 1193.1±3.56ns -2.06%
Boolean Object Access (Execution) 5.2±0.01µs 5.1±0.01µs -1.92%
Boolean Object Access (Parser) 20.3±0.15µs 20.2±0.10µs -0.49%
Clean js (Compiler) 5.2±0.01µs 5.3±0.01µs +1.92%
Clean js (Execution) 781.9±2.44µs 804.7±3.42µs +2.92%
Clean js (Parser) 41.7±0.07µs 41.3±0.09µs -0.96%
Create Realm 547.0±2.05µs 516.5±2.78µs -5.58%
Dynamic Object Property Access (Compiler) 2.1±0.06µs 2.1±0.01µs 0.00%
Dynamic Object Property Access (Execution) 4.9±0.01µs 4.8±0.01µs -2.04%
Dynamic Object Property Access (Parser) 15.1±0.04µs 14.7±0.06µs -2.65%
Fibonacci (Compiler) 3.1±0.01µs 3.3±0.01µs +6.45%
Fibonacci (Execution) 1138.0±3.12µs 1115.8±3.15µs -1.95%
Fibonacci (Parser) 23.5±0.04µs 23.3±0.05µs -0.85%
For loop (Compiler) 2.8±0.02µs 2.9±0.02µs +3.57%
For loop (Execution) 16.4±0.04µs 16.1±0.04µs -1.83%
For loop (Parser) 20.4±0.07µs 20.1±0.10µs -1.47%
Mini js (Compiler) 4.6±0.01µs 4.7±0.01µs +2.17%
Mini js (Execution) 742.8±3.62µs 749.0±3.57µs +0.83%
Mini js (Parser) 36.3±0.11µs 36.3±0.06µs 0.00%
Number Object Access (Compiler) 1124.3±4.77ns 1107.5±4.58ns -1.49%
Number Object Access (Execution) 4.0±0.03µs 3.9±0.01µs -2.50%
Number Object Access (Parser) 15.8±0.09µs 15.5±0.10µs -1.90%
Object Creation (Compiler) 1890.7±81.67ns 1915.5±7.51ns +1.31%
Object Creation (Execution) 4.5±0.01µs 4.5±0.02µs 0.00%
Object Creation (Parser) 13.2±0.04µs 13.1±0.05µs -0.76%
RegExp (Compiler) 2.2±0.05µs 2.2±0.01µs 0.00%
RegExp (Execution) 12.6±0.03µs 12.6±0.04µs 0.00%
RegExp (Parser) 14.4±0.04µs 14.1±0.05µs -2.08%
RegExp Creation (Compiler) 1979.1±50.06ns 1955.2±3.03ns -1.21%
RegExp Creation (Execution) 8.8±0.02µs 8.9±0.02µs +1.14%
RegExp Creation (Parser) 12.1±0.03µs 11.9±0.02µs -1.65%
RegExp Literal (Compiler) 2.2±0.05µs 2.2±0.01µs 0.00%
RegExp Literal (Execution) 12.5±0.03µs 12.6±0.03µs +0.80%
RegExp Literal (Parser) 15.3±0.03µs 15.1±0.02µs -1.31%
RegExp Literal Creation (Compiler) 1987.2±47.48ns 1938.9±8.13ns -2.43%
RegExp Literal Creation (Execution) 8.9±0.02µs 8.9±0.02µs 0.00%
RegExp Literal Creation (Parser) 12.9±0.01µs 12.8±0.03µs -0.78%
Static Object Property Access (Compiler) 1896.4±85.61ns 1938.6±9.10ns +2.23%
Static Object Property Access (Execution) 4.8±0.03µs 4.6±0.03µs -4.17%
Static Object Property Access (Parser) 14.3±0.02µs 14.2±0.04µs -0.70%
String Object Access (Compiler) 1565.8±5.80ns 1531.8±6.20ns -2.17%
String Object Access (Execution) 6.8±0.03µs 6.8±0.01µs 0.00%
String Object Access (Parser) 19.9±0.18µs 19.6±0.06µs -1.51%
String comparison (Compiler) 2.6±0.04µs 2.7±0.01µs +3.85%
String comparison (Execution) 4.1±0.01µs 4.2±0.01µs +2.44%
String comparison (Parser) 16.3±0.06µs 16.0±0.03µs -1.84%
String concatenation (Compiler) 2.2±0.06µs 2.2±0.01µs 0.00%
String concatenation (Execution) 3.9±0.01µs 4.0±0.01µs +2.56%
String concatenation (Parser) 11.1±0.04µs 10.9±0.03µs -1.80%
String copy (Compiler) 1871.1±47.38ns 1814.4±14.82ns -3.03%
String copy (Execution) 3.7±0.00µs 3.7±0.01µs 0.00%
String copy (Parser) 8.4±0.03µs 8.3±0.03µs -1.19%
Symbols (Compiler) 1392.5±41.70ns 1318.6±2.28ns -5.31%
Symbols (Execution) 3.8±0.02µs 3.8±0.01µs 0.00%
Symbols (Parser) 6.7±0.04µs 6.5±0.02µs -2.99%

@HalidOdat HalidOdat marked this pull request as draft April 21, 2023 00:58
@HalidOdat
Copy link
Member Author

Will fix the bug then mark this as ready for review :)

@HalidOdat HalidOdat force-pushed the optimization/direct-array-element-access branch from 75af983 to c8b62c2 Compare April 21, 2023 02:57
@github-actions
Copy link

Benchmark for 5aa8053

Click to view benchmark
Test Base PR %
Arithmetic operations (Compiler) 651.9±46.82ns 731.8±86.90ns +12.26%
Arithmetic operations (Execution) 430.2±26.37ns 427.2±33.04ns -0.70%
Arithmetic operations (Parser) 7.0±0.39µs 6.9±0.40µs -1.43%
Array access (Compiler) 1968.3±185.10ns 1967.3±183.79ns -0.05%
Array access (Execution) 8.0±0.84µs 8.0±0.60µs 0.00%
Array access (Parser) 14.1±0.72µs 15.0±1.40µs +6.38%
Array creation (Compiler) 3.2±0.38µs 2.9±0.34µs -9.38%
Array creation (Execution) 1018.6±109.62µs 630.8±44.96µs -38.07%
Array creation (Parser) 17.2±1.03µs 20.2±2.21µs +17.44%
Array pop (Compiler) 4.5±0.29µs 5.1±0.59µs +13.33%
Array pop (Execution) 547.1±35.25µs 550.1±42.02µs +0.55%
Array pop (Parser) 157.7±9.65µs 166.2±15.58µs +5.39%
Boolean Object Access (Compiler) 1299.0±53.05ns 1430.0±75.98ns +10.08%
Boolean Object Access (Execution) 5.4±0.39µs 5.3±0.31µs -1.85%
Boolean Object Access (Parser) 18.8±2.08µs 17.9±0.99µs -4.79%
Clean js (Compiler) 5.7±0.62µs 6.4±1.09µs +12.28%
Clean js (Execution) 746.4±37.54µs 741.6±55.64µs -0.64%
Clean js (Parser) 36.6±2.47µs 39.7±2.87µs +8.47%
Create Realm 586.2±44.41µs 667.2±101.65µs +13.82%
Dynamic Object Property Access (Compiler) 2.2±0.16µs 2.4±0.11µs +9.09%
Dynamic Object Property Access (Execution) 5.4±0.38µs 5.4±0.36µs 0.00%
Dynamic Object Property Access (Parser) 13.2±1.08µs 13.7±0.69µs +3.79%
Fibonacci (Compiler) 3.4±0.27µs 3.3±0.16µs -2.94%
Fibonacci (Execution) 1181.5±42.33µs 1187.2±53.30µs +0.48%
Fibonacci (Parser) 21.1±2.75µs 25.1±3.37µs +18.96%
For loop (Compiler) 3.0±0.14µs 3.2±0.37µs +6.67%
For loop (Execution) 17.0±0.91µs 17.1±0.98µs +0.59%
For loop (Parser) 18.0±1.16µs 18.3±0.94µs +1.67%
Mini js (Compiler) 5.1±0.55µs 5.2±0.34µs +1.96%
Mini js (Execution) 684.6±60.03µs 664.7±27.37µs -2.91%
Mini js (Parser) 31.2±1.44µs 35.1±3.99µs +12.50%
Number Object Access (Compiler) 1227.0±80.01ns 1310.7±63.48ns +6.82%
Number Object Access (Execution) 4.1±0.15µs 4.2±0.19µs +2.44%
Number Object Access (Parser) 13.4±0.76µs 13.8±0.79µs +2.99%
Object Creation (Compiler) 2.0±0.19µs 2.2±0.12µs +10.00%
Object Creation (Execution) 5.5±0.65µs 5.2±0.42µs -5.45%
Object Creation (Parser) 11.1±0.45µs 12.0±0.75µs +8.11%
RegExp (Compiler) 2.2±0.11µs 2.5±0.18µs +13.64%
RegExp (Execution) 13.0±0.65µs 14.7±0.97µs +13.08%
RegExp (Parser) 12.4±0.80µs 13.0±0.66µs +4.84%
RegExp Creation (Compiler) 2.0±0.12µs 2.1±0.18µs +5.00%
RegExp Creation (Execution) 9.1±0.51µs 10.6±1.04µs +16.48%
RegExp Creation (Parser) 10.3±0.59µs 12.5±2.14µs +21.36%
RegExp Literal (Compiler) 2.3±0.16µs 2.7±0.32µs +17.39%
RegExp Literal (Execution) 13.2±0.86µs 16.4±1.88µs +24.24%
RegExp Literal (Parser) 14.0±0.86µs 14.7±0.64µs +5.00%
RegExp Literal Creation (Compiler) 2.0±0.10µs 2.0±0.07µs 0.00%
RegExp Literal Creation (Execution) 9.2±0.73µs 10.1±0.67µs +9.78%
RegExp Literal Creation (Parser) 13.1±1.70µs 13.1±1.66µs 0.00%
Static Object Property Access (Compiler) 1998.0±108.84ns 2.3±0.20µs +15.12%
Static Object Property Access (Execution) 5.7±0.88µs 5.6±0.67µs -1.75%
Static Object Property Access (Parser) 12.2±0.62µs 12.9±0.74µs +5.74%
String Object Access (Compiler) 1689.8±104.35ns 1865.5±214.62ns +10.40%
String Object Access (Execution) 7.2±0.56µs 7.2±0.45µs 0.00%
String Object Access (Parser) 18.8±3.01µs 18.5±2.08µs -1.60%
String comparison (Compiler) 2.8±0.30µs 2.7±0.13µs -3.57%
String comparison (Execution) 4.5±0.39µs 4.5±0.23µs 0.00%
String comparison (Parser) 13.5±0.76µs 14.8±1.51µs +9.63%
String concatenation (Compiler) 2.2±0.11µs 2.3±0.12µs +4.55%
String concatenation (Execution) 4.2±0.19µs 4.4±0.24µs +4.76%
String concatenation (Parser) 9.4±0.81µs 9.9±0.63µs +5.32%
String copy (Compiler) 2.2±0.29µs 1937.5±97.88ns -11.93%
String copy (Execution) 4.4±0.48µs 4.3±0.39µs -2.27%
String copy (Parser) 6.9±0.38µs 7.2±0.50µs +4.35%
Symbols (Compiler) 1407.7±56.17ns 1473.5±139.25ns +4.67%
Symbols (Execution) 4.8±0.70µs 4.2±0.21µs -12.50%
Symbols (Parser) 5.5±0.27µs 5.6±0.26µs +1.82%

@HalidOdat HalidOdat marked this pull request as ready for review April 21, 2023 18:40
Copy link
Member

@raskad raskad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks very good now

@raskad
Copy link
Member

raskad commented Apr 25, 2023

bors r+

bors bot pushed a commit that referenced this pull request Apr 25, 2023
Most of the time that we have a `ByValue` ( `[ value ]` syntax ) it is for arrays and the value is usually an index. This PR adds a fast path to the instructions (without calling `.borrow()` on the object to check if its an array)

For example, this code:
```js
let a = [1, 2, 3]

for (let i = 0 ; i < 10000000; ++i) {
  a[i % 3] += a[ (i + 1) % 3 ]
}
```
Using `hyperfine`, it ran `1.38` times faster on this PR.

```bash
Benchmark 1: ./boa_main test.js
  Time (mean ± σ):     16.504 s ±  0.192 s    [User: 16.440 s, System: 0.020 s]
  Range (min … max):   16.328 s … 16.938 s    10 runs

Benchmark 2: ./boa_direct_array_access test.js
  Time (mean ± σ):     11.982 s ±  0.038 s    [User: 11.939 s, System: 0.013 s]
  Range (min … max):   11.914 s … 12.035 s    10 runs

Summary
  './boa_direct_array_access test.js' ran
    1.38 ± 0.02 times faster than './boa_main test.js'
```
@bors
Copy link

bors bot commented Apr 25, 2023

Pull request successfully merged into main.

Build succeeded:

@bors bors bot changed the title Direct array element access on ByValue instructions [Merged by Bors] - Direct array element access on ByValue instructions Apr 25, 2023
@bors bors bot closed this Apr 25, 2023
@bors bors bot deleted the optimization/direct-array-element-access branch April 25, 2023 22:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
execution Issues or PRs related to code execution performance Performance related changes and issues run-benchmark Label used to run banchmarks on PRs
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants