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

RegExp specialization #592

Merged
merged 5 commits into from
Jul 29, 2020
Merged

RegExp specialization #592

merged 5 commits into from
Jul 29, 2020

Conversation

HalidOdat
Copy link
Member

@HalidOdat HalidOdat commented Jul 24, 2020

It changes the following:

  • Removed Dependency of Internal State
  • Removed Dependency of Internal slots
  • Merged create into init (like all the other objects)
  • Specialized RegExp object
  • Removed wrong methods that should be getters (but we don't support getter so I disabled them for now)

BTW: This is not to make the methods spec compliant, this PR only focus on removing the dependency (I tried not to change the old behaviour). Making the methods spec compliant should be done in a separate PR.

@HalidOdat HalidOdat added performance Performance related changes and issues technical debt builtins PRs and Issues related to builtins/intrinsics execution Issues or PRs related to code execution labels Jul 24, 2020
@HalidOdat HalidOdat added this to the v0.10.0 milestone Jul 24, 2020
@codecov
Copy link

codecov bot commented Jul 24, 2020

Codecov Report

Merging #592 into master will decrease coverage by 0.24%.
The diff coverage is 67.56%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #592      +/-   ##
==========================================
- Coverage   71.25%   71.01%   -0.25%     
==========================================
  Files         176      176              
  Lines       11557    11530      -27     
==========================================
- Hits         8235     8188      -47     
- Misses       3322     3342      +20     
Impacted Files Coverage Δ
boa/src/builtins/regexp/tests.rs 100.00% <ø> (ø)
boa/src/builtins/object/mod.rs 38.32% <25.00%> (-3.95%) ⬇️
boa/src/builtins/regexp/mod.rs 72.90% <77.77%> (+3.45%) ⬆️
boa/src/builtins/string/mod.rs 43.01% <100.00%> (+0.19%) ⬆️
boa/src/builtins/object/internal_state.rs 0.00% <0.00%> (-41.67%) ⬇️
boa/src/builtins/value/rcstring.rs 69.23% <0.00%> (-7.70%) ⬇️
boa/src/builtins/value/mod.rs 63.34% <0.00%> (-5.81%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b3f42d...706d8a7. Read the comment docs.

@HalidOdat HalidOdat changed the title Regexp specialization RegExp specialization Jul 24, 2020
@github-actions
Copy link

Benchmark for c5e2070

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 288.2±10.77ns 287.9±13.08ns +0.10%
Arithmetic operations (Full) 143.0±7.98µs 149.8±9.12µs -4.54%
Array access (Execution) 11.5±0.53µs 10.9±0.50µs +5.50%
Array access (Full) 160.2±8.21µs 158.9±7.70µs +0.82%
Array creation (Execution) 2.9±0.12ms 2.9±0.10ms 0.00%
Array creation (Full) 3.2±0.13ms 3.2±0.15ms 0.00%
Array pop (Execution) 1141.2±65.19µs 1148.2±87.89µs -0.61%
Array pop (Full) 1388.3±61.82µs 1392.3±50.07µs -0.29%
Boolean Object Access (Execution) 3.7±0.21µs 3.4±0.17µs +8.82%
Boolean Object Access (Full) 150.1±11.17µs 171.8±9.29µs -12.63%
Create Realm 124.3±5.34µs 122.2±5.64µs +1.72%
Dynamic Object Property Access (Execution) 5.6±0.20µs 5.3±0.25µs +5.66%
Dynamic Object Property Access (Full) 151.6±7.55µs 152.3±10.97µs -0.46%
Expression (Lexer) 1848.2±81.91ns 1923.7±102.53ns -3.92%
Expression (Parser) 4.5±0.29µs 4.2±0.24µs +7.14%
Fibonacci (Execution) 864.1±38.31µs 854.8±33.21µs +1.09%
Fibonacci (Full) 1024.5±49.99µs 1017.7±51.25µs +0.67%
For loop (Execution) 18.5±0.97µs 18.8±1.58µs -1.60%
For loop (Full) 161.2±7.04µs 165.0±10.43µs -2.30%
For loop (Lexer) 4.1±0.18µs 4.2±0.23µs -2.38%
For loop (Parser) 11.3±0.51µs 11.2±0.54µs +0.89%
Goal Symbols (Parser) 6.7±0.45µs 6.7±0.89µs 0.00%
Hello World (Lexer) 666.2±38.78ns 667.7±37.89ns -0.22%
Hello World (Parser) 1714.9±89.56ns 1681.5±81.95ns +1.99%
Long file (Parser) 5.1±0.15ms 5.2±0.26ms -1.92%
Number Object Access (Execution) 2.9±0.17µs 2.6±0.15µs +11.54%
Number Object Access (Full) 146.3±6.67µs 171.5±9.55µs -14.69%
Object Creation (Execution) 4.9±0.24µs 4.6±0.20µs +6.52%
Object Creation (Full) 171.2±9.99µs 165.9±9.06µs +3.19%
RegExp (Execution) 56.2±3.37µs 57.7±3.30µs -2.60%
RegExp (Full) 214.8±10.67µs 214.4±8.34µs +0.19%
RegExp Literal (Execution) 59.6±2.85µs 61.6±2.81µs -3.25%
RegExp Literal (Full) 214.2±10.15µs 213.6±11.29µs +0.28%
RegExp Literal Creation (Execution) 56.2±2.90µs 58.0±2.79µs -3.10%
RegExp Literal Creation (Full) 235.5±12.34µs 246.0±13.09µs -4.27%
Static Object Property Access (Execution) 5.2±0.30µs 4.9±0.43µs +6.12%
Static Object Property Access (Full) 150.9±8.91µs 148.7±10.33µs +1.48%
String Object Access (Execution) 6.6±0.35µs 6.6±0.45µs 0.00%
String Object Access (Full) 148.7±7.79µs 174.6±8.17µs -14.83%
String comparison (Execution) 6.1±0.31µs 5.4±0.33µs +12.96%
String comparison (Full) 158.7±10.41µs 152.4±15.40µs +4.13%
String concatenation (Execution) 5.1±0.31µs 4.5±0.25µs +13.33%
String concatenation (Full) 148.1±6.78µs 148.9±14.85µs -0.54%
String copy (Execution) 4.0±0.17µs 3.6±0.21µs +11.11%
String copy (Full) 145.3±5.59µs 145.7±7.66µs -0.27%
Symbols (Execution) 3.2±0.21µs 3.1±0.24µs +3.23%
Symbols (Full) 138.7±8.09µs 135.8±7.44µs +2.14%

@HalidOdat HalidOdat requested a review from Lan2u July 24, 2020 06:40
@github-actions
Copy link

Benchmark for c5e2070

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 367.6±21.84ns 372.1±19.52ns -1.21%
Arithmetic operations (Full) 184.1±8.68µs 183.0±8.23µs +0.60%
Array access (Execution) 16.1±1.83µs 14.4±0.73µs +11.81%
Array access (Full) 202.4±12.91µs 203.5±11.69µs -0.54%
Array creation (Execution) 4.2±0.28ms 3.9±0.27ms +7.69%
Array creation (Full) 4.2±0.30ms 4.1±0.16ms +2.44%
Array pop (Execution) 1453.5±80.96µs 1712.7±190.78µs -15.13%
Array pop (Full) 2.1±0.17ms 1839.1±125.90µs +14.19%
Boolean Object Access (Execution) 4.8±0.26µs 4.4±0.26µs +9.09%
Boolean Object Access (Full) 195.9±6.58µs 194.8±10.46µs +0.56%
Create Realm 162.6±7.69µs 158.9±9.32µs +2.33%
Dynamic Object Property Access (Execution) 7.3±0.53µs 7.3±0.39µs 0.00%
Dynamic Object Property Access (Full) 203.4±45.85µs 195.2±10.83µs +4.20%
Expression (Lexer) 2.5±0.12µs 2.4±0.16µs +4.17%
Expression (Parser) 5.6±0.26µs 5.5±0.36µs +1.82%
Fibonacci (Execution) 1137.3±86.24µs 1107.9±64.06µs +2.65%
Fibonacci (Full) 1298.4±64.47µs 1366.2±102.01µs -4.96%
For loop (Execution) 23.8±1.33µs 25.0±1.49µs -4.80%
For loop (Full) 206.0±10.73µs 213.0±10.87µs -3.29%
For loop (Lexer) 5.7±0.42µs 5.3±0.32µs +7.55%
For loop (Parser) 15.0±0.92µs 14.5±0.94µs +3.45%
Goal Symbols (Parser) 9.0±0.59µs 10.6±1.31µs -15.09%
Hello World (Lexer) 892.7±44.46ns 846.8±48.38ns +5.42%
Hello World (Parser) 2.2±0.15µs 2.2±0.14µs 0.00%
Long file (Parser) 7.6±0.44ms 6.8±0.45ms +11.76%
Number Object Access (Execution) 3.7±0.22µs 3.6±0.22µs +2.78%
Number Object Access (Full) 187.3±7.57µs 194.3±20.00µs -3.60%
Object Creation (Execution) 6.5±0.67µs 6.1±0.30µs +6.56%
Object Creation (Full) 224.2±19.29µs 230.1±18.07µs -2.56%
RegExp (Execution) 72.2±4.02µs 73.6±6.59µs -1.90%
RegExp (Full) 284.6±12.35µs 284.4±33.87µs +0.07%
RegExp Literal (Execution) 78.6±4.38µs 78.9±5.59µs -0.38%
RegExp Literal (Full) 282.2±11.66µs 275.0±14.55µs +2.62%
RegExp Literal Creation (Execution) 72.0±3.82µs 73.0±5.07µs -1.37%
RegExp Literal Creation (Full) 311.1±14.76µs 312.4±18.40µs -0.42%
Static Object Property Access (Execution) 6.5±0.44µs 6.2±0.37µs +4.84%
Static Object Property Access (Full) 192.3±8.77µs 210.6±15.00µs -8.69%
String Object Access (Execution) 8.6±0.53µs 8.6±1.35µs 0.00%
String Object Access (Full) 195.1±8.37µs 197.0±9.95µs -0.96%
String comparison (Execution) 7.3±0.53µs 7.2±0.46µs +1.39%
String comparison (Full) 198.3±8.03µs 198.0±9.82µs +0.15%
String concatenation (Execution) 6.0±0.36µs 6.0±0.38µs 0.00%
String concatenation (Full) 191.2±9.28µs 189.2±11.06µs +1.06%
String copy (Execution) 4.7±0.37µs 4.7±0.30µs 0.00%
String copy (Full) 192.0±8.05µs 183.5±8.75µs +4.63%
Symbols (Execution) 4.0±0.25µs 4.1±0.23µs -2.44%
Symbols (Full) 177.4±19.25µs 176.5±13.23µs +0.51%

@github-actions
Copy link

Benchmark for 567e101

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 369.5±18.64ns 362.2±15.38ns +2.02%
Arithmetic operations (Full) 156.5±4.80µs 157.2±4.53µs -0.45%
Array access (Execution) 8.2±0.24µs 7.9±0.23µs +3.80%
Array access (Full) 173.6±6.07µs 173.8±6.65µs -0.12%
Array creation (Execution) 3.3±0.08ms 3.2±0.09ms +3.13%
Array creation (Full) 3.5±0.08ms 3.5±0.16ms 0.00%
Array pop (Execution) 1177.5±27.92µs 1147.9±34.27µs +2.58%
Array pop (Full) 1426.5±28.36µs 1470.5±61.12µs -2.99%
Boolean Object Access (Execution) 4.4±0.35µs 4.0±0.15µs +10.00%
Boolean Object Access (Full) 167.8±5.08µs 166.5±4.68µs +0.78%
Create Realm 146.0±4.43µs 143.4±4.42µs +1.81%
Dynamic Object Property Access (Execution) 5.1±0.16µs 4.9±0.18µs +4.08%
Dynamic Object Property Access (Full) 165.3±6.11µs 163.9±3.85µs +0.85%
Expression (Lexer) 2.2±0.06µs 2.3±0.07µs -4.35%
Expression (Parser) 5.2±0.14µs 5.2±0.19µs 0.00%
Fibonacci (Execution) 920.5±21.20µs 899.3±30.23µs +2.36%
Fibonacci (Full) 1112.0±48.42µs 1109.1±50.59µs +0.26%
For loop (Execution) 21.3±0.67µs 20.7±0.55µs +2.90%
For loop (Full) 183.5±5.18µs 183.7±8.10µs -0.11%
For loop (Lexer) 5.1±0.12µs 5.1±0.24µs 0.00%
For loop (Parser) 13.7±0.60µs 14.0±1.25µs -2.14%
Goal Symbols (Parser) 8.3±0.37µs 8.1±0.18µs +2.47%
Hello World (Lexer) 789.8±22.23ns 780.1±24.15ns +1.24%
Hello World (Parser) 2.1±0.07µs 2.1±0.07µs 0.00%
Long file (Parser) 6.0±0.11ms 6.0±0.12ms 0.00%
Number Object Access (Execution) 3.4±0.11µs 3.2±0.08µs +6.25%
Number Object Access (Full) 161.9±4.11µs 164.0±6.68µs -1.28%
Object Creation (Execution) 4.3±0.15µs 4.1±0.11µs +4.88%
Object Creation (Full) 184.9±8.12µs 184.3±5.11µs +0.33%
RegExp (Execution) 62.2±2.15µs 63.5±2.44µs -2.05%
RegExp (Full) 236.9±7.87µs 240.7±8.47µs -1.58%
RegExp Literal (Execution) 66.8±9.79µs 66.0±1.45µs +1.21%
RegExp Literal (Full) 238.0±10.71µs 238.6±7.19µs -0.25%
RegExp Literal Creation (Execution) 62.5±3.14µs 62.8±1.51µs -0.48%
RegExp Literal Creation (Full) 261.9±8.86µs 281.5±9.44µs -6.96%
Static Object Property Access (Execution) 4.4±0.10µs 4.3±0.12µs +2.33%
Static Object Property Access (Full) 164.5±6.83µs 164.1±4.96µs +0.24%
String Object Access (Execution) 6.4±0.23µs 6.0±0.28µs +6.67%
String Object Access (Full) 164.9±3.83µs 169.2±5.82µs -2.54%
String comparison (Execution) 5.9±0.16µs 5.7±0.14µs +3.51%
String comparison (Full) 166.9±5.06µs 170.8±7.77µs -2.28%
String concatenation (Execution) 4.6±0.15µs 4.7±0.10µs -2.13%
String concatenation (Full) 160.2±4.38µs 162.0±6.09µs -1.11%
String copy (Execution) 3.4±0.07µs 3.4±0.10µs 0.00%
String copy (Full) 159.3±6.26µs 157.0±3.25µs +1.46%
Symbols (Execution) 2.9±0.10µs 2.8±0.14µs +3.57%
Symbols (Full) 154.7±6.61µs 155.3±5.11µs -0.39%

@HalidOdat HalidOdat merged commit a6710fa into master Jul 29, 2020
@HalidOdat HalidOdat deleted the regexp-specialization branch July 29, 2020 15:19
@github-actions
Copy link

Benchmark for 0ff082a

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 328.8±21.18ns 329.4±18.67ns -0.18%
Arithmetic operations (Full) 150.0±8.44µs 149.3±11.22µs +0.47%
Array access (Execution) 7.4±0.41µs 7.2±0.36µs +2.78%
Array access (Full) 160.0±8.02µs 161.8±9.44µs -1.11%
Array creation (Execution) 2.9±0.13ms 2.9±0.12ms 0.00%
Array creation (Full) 3.2±0.13ms 3.2±0.11ms 0.00%
Array pop (Execution) 1065.4±109.05µs 1025.0±54.41µs +3.94%
Array pop (Full) 1311.9±59.78µs 1331.5±74.21µs -1.47%
Boolean Object Access (Execution) 3.9±0.17µs 3.6±0.18µs +8.33%
Boolean Object Access (Full) 154.3±8.43µs 156.7±8.35µs -1.53%
Create Realm 379.2±17.68ns 372.3±19.41ns +1.85%
Dynamic Object Property Access (Execution) 4.4±0.22µs 4.4±0.26µs 0.00%
Dynamic Object Property Access (Full) 157.1±7.82µs 159.2±7.43µs -1.32%
Expression (Lexer) 2.0±0.10µs 2.0±0.13µs 0.00%
Expression (Parser) 4.7±0.22µs 4.9±0.47µs -4.08%
Fibonacci (Execution) 836.4±33.49µs 829.1±41.85µs +0.88%
Fibonacci (Full) 995.7±42.58µs 991.8±43.43µs +0.39%
For loop (Execution) 19.6±1.17µs 19.1±1.03µs +2.62%
For loop (Full) 176.1±11.83µs 169.0±8.44µs +4.20%
For loop (Lexer) 4.6±0.30µs 4.5±0.21µs +2.22%
For loop (Parser) 12.6±0.76µs 12.3±0.63µs +2.44%
Goal Symbols (Parser) 7.2±0.32µs 7.3±0.42µs -1.37%
Hello World (Lexer) 714.5±38.39ns 708.8±39.81ns +0.80%
Hello World (Parser) 1908.3±93.80ns 1875.6±90.51ns +1.74%
Long file (Parser) 5.5±0.14ms 5.5±0.17ms 0.00%
Number Object Access (Execution) 3.0±0.16µs 2.8±0.13µs +7.14%
Number Object Access (Full) 157.8±10.31µs 158.9±7.70µs -0.69%
Object Creation (Execution) 3.8±0.17µs 3.7±0.17µs +2.70%
Object Creation (Full) 182.5±9.85µs 172.7±8.46µs +5.67%
RegExp (Execution) 60.1±2.88µs 60.9±3.25µs -1.31%
RegExp (Full) 249.6±13.40µs 267.1±13.11µs -6.55%
RegExp Literal (Execution) 59.5±3.18µs 60.5±2.74µs -1.65%
RegExp Literal (Full) 221.5±9.82µs 220.3±9.48µs +0.54%
RegExp Literal Creation (Execution) 56.8±2.52µs 58.4±3.07µs -2.74%
RegExp Literal Creation (Full) 247.2±15.88µs 261.4±15.09µs -5.43%
Static Object Property Access (Execution) 4.0±0.20µs 3.8±0.21µs +5.26%
Static Object Property Access (Full) 157.0±8.64µs 159.1±8.47µs -1.32%
String Object Access (Execution) 5.8±0.30µs 5.5±0.28µs +5.45%
String Object Access (Full) 159.1±7.97µs 160.0±8.05µs -0.56%
String comparison (Execution) 5.3±0.27µs 5.3±0.32µs 0.00%
String comparison (Full) 158.1±8.28µs 161.1±7.88µs -1.86%
String concatenation (Execution) 4.3±0.30µs 4.3±0.21µs 0.00%
String concatenation (Full) 155.7±9.02µs 158.5±8.78µs -1.77%
String copy (Execution) 3.2±0.15µs 3.2±0.58µs 0.00%
String copy (Full) 151.4±7.51µs 151.0±8.55µs +0.26%
Symbols (Execution) 2.7±0.12µs 2.5±0.14µs +8.00%
Symbols (Full) 148.8±6.08µs 148.6±7.92µs +0.13%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
builtins PRs and Issues related to builtins/intrinsics execution Issues or PRs related to code execution performance Performance related changes and issues technical debt
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants