Skip to content

Avoid fixpoint for literals and concrete storage #760

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
merged 2 commits into from
Jun 5, 2025
Merged

Conversation

elopez
Copy link
Collaborator

@elopez elopez commented Jun 5, 2025

Description

This PR adds a fast case to simplifyNoLitToKeccak for Lits and ConcreteStorage which don't need simplification, and was causing a performance regression versus hevm 0.54.2. Additionally, it adds a simple benchmark case to exercise SSTORE, used to show the improvement.

Checklist

  • tested locally
  • added automated tests
  • updated the docs
  • updated the changelog

@elopez elopez requested review from d-xo and blishko June 5, 2025 13:34
@blishko
Copy link
Collaborator

blishko commented Jun 5, 2025

Measurements on my machine (without the new test) look good!
All
  loop
    2:     OK (1.68s)
      29.5 μs ± 2.0 μs, 236 KB allocated, 1.3 KB copied,  91 MB peak memory,       same as baseline
    4:     OK (1.25s)
      43.9 μs ± 3.7 μs, 341 KB allocated, 1.7 KB copied,  91 MB peak memory,       same as baseline
    8:     OK (1.04s)
      71.9 μs ± 6.7 μs, 551 KB allocated, 3.1 KB copied,  91 MB peak memory,       same as baseline
    16:    OK (1.81s)
      130  μs ± 6.9 μs, 972 KB allocated, 5.7 KB copied,  91 MB peak memory,       same as baseline
    32:    OK (1.69s)
      239  μs ±  16 μs, 1.8 MB allocated,  11 KB copied,  91 MB peak memory,       same as baseline
    64:    OK (1.63s)
      464  μs ±  28 μs, 3.4 MB allocated,  21 KB copied,  91 MB peak memory,       same as baseline
    128:   OK (1.59s)
      923  μs ±  85 μs, 6.7 MB allocated,  58 KB copied, 111 MB peak memory,       same as baseline
    256:   OK (1.57s)
      1.78 ms ± 130 μs,  13 MB allocated,  57 KB copied, 111 MB peak memory,       same as baseline
    512:   OK (1.54s)
      3.53 ms ± 245 μs,  27 MB allocated,  74 KB copied, 111 MB peak memory,       same as baseline
    1024:  OK (1.53s)
      7.00 ms ± 498 μs,  53 MB allocated, 109 KB copied, 111 MB peak memory,       same as baseline
    2048:  OK (1.52s)
      13.9 ms ± 1.0 ms, 106 MB allocated, 181 KB copied, 111 MB peak memory,       same as baseline
    4096:  OK (1.50s)
      27.7 ms ± 2.0 ms, 211 MB allocated, 324 KB copied, 111 MB peak memory,       same as baseline
    8192:  OK (1.48s)
      55.7 ms ± 5.1 ms, 422 MB allocated, 608 KB copied, 111 MB peak memory,       same as baseline
    16384: OK (1.43s)
      112  ms ± 8.7 ms, 845 MB allocated, 1.1 MB copied, 111 MB peak memory,       same as baseline
  primes
    2:     OK (1.48s)
      102  μs ± 7.4 μs, 722 KB allocated,  11 KB copied, 111 MB peak memory,       same as baseline
    4:     OK (1.17s)
      159  μs ±  15 μs, 1.0 MB allocated,  18 KB copied, 111 MB peak memory,       same as baseline
    8:     OK (1.83s)
      252  μs ±  15 μs, 1.6 MB allocated,  31 KB copied, 111 MB peak memory,       same as baseline
    16:    OK (1.74s)
      480  μs ±  26 μs, 2.9 MB allocated,  62 KB copied, 111 MB peak memory,       same as baseline
    32:    OK (1.87s)
      1.06 ms ±  63 μs, 6.2 MB allocated, 177 KB copied, 111 MB peak memory,       same as baseline
    64:    OK (1.96s)
      2.22 ms ± 154 μs,  14 MB allocated, 265 KB copied, 111 MB peak memory,       same as baseline
    128:   OK (1.09s)
      4.85 ms ± 466 μs,  31 MB allocated, 234 KB copied, 111 MB peak memory,       same as baseline
    256:   OK (1.27s)
      11.4 ms ± 975 μs,  75 MB allocated, 327 KB copied, 111 MB peak memory,       same as baseline
    512:   OK (1.50s)
      27.3 ms ± 1.8 ms, 181 MB allocated, 554 KB copied, 111 MB peak memory,       same as baseline
    1024:  OK (1.78s)
      66.0 ms ± 3.8 ms, 441 MB allocated, 1.1 MB copied, 111 MB peak memory,       same as baseline
    2048:  OK (0.99s)
      162  ms ±  13 ms, 1.1 GB allocated, 2.3 MB copied, 111 MB peak memory,       same as baseline
    4096:  OK (2.44s)
      403  ms ±  15 ms, 2.7 GB allocated, 5.2 MB copied, 111 MB peak memory,       same as baseline
    8192:  OK (2.63s)
      1.015 s ±  85 ms, 6.7 GB allocated,  12 MB copied, 111 MB peak memory,       same as baseline
    16384: OK (6.62s)
      2.564 s ± 181 ms,  17 GB allocated,  29 MB copied, 111 MB peak memory,       same as baseline
  hashes
    2:     OK (1.22s)
      42.3 μs ± 3.4 μs, 329 KB allocated, 1.6 KB copied, 111 MB peak memory,       same as baseline
    4:     OK (1.97s)
      68.8 μs ± 4.2 μs, 525 KB allocated, 2.7 KB copied, 111 MB peak memory,       same as baseline
    8:     OK (3.47s)
      121  μs ± 4.7 μs, 918 KB allocated, 4.8 KB copied, 111 MB peak memory,       same as baseline
    16:    OK (1.62s)
      224  μs ±  13 μs, 1.7 MB allocated, 9.2 KB copied, 111 MB peak memory,       same as baseline
    32:    OK (1.55s)
      432  μs ±  31 μs, 3.2 MB allocated,  18 KB copied, 111 MB peak memory,       same as baseline
    64:    OK (1.50s)
      836  μs ±  54 μs, 6.3 MB allocated,  35 KB copied, 111 MB peak memory,       same as baseline
    128:   OK (1.47s)
      1.64 ms ± 115 μs,  12 MB allocated,  52 KB copied, 111 MB peak memory,       same as baseline
    256:   OK (1.45s)
      3.25 ms ± 249 μs,  25 MB allocated,  67 KB copied, 111 MB peak memory,       same as baseline
    512:   OK (1.44s)
      6.47 ms ± 460 μs,  49 MB allocated,  94 KB copied, 111 MB peak memory,       same as baseline
    1024:  OK (1.42s)
      12.8 ms ± 1.2 ms,  99 MB allocated, 148 KB copied, 111 MB peak memory,       same as baseline
    2048:  OK (2.87s)
      26.5 ms ± 1.2 ms, 197 MB allocated, 256 KB copied, 111 MB peak memory,       same as baseline
    4096:  OK (1.39s)
      51.4 ms ± 3.5 ms, 394 MB allocated, 465 KB copied, 111 MB peak memory,       same as baseline
    8192:  OK (1.34s)
      103  ms ± 7.3 ms, 788 MB allocated, 895 KB copied, 111 MB peak memory,       same as baseline
    16384: OK (1.25s)
      206  ms ±  16 ms, 1.5 GB allocated, 1.7 MB copied, 111 MB peak memory,       same as baseline
  hashmem
    2:     OK (1.09s)
      74.4 μs ± 6.8 μs, 505 KB allocated, 4.7 KB copied, 111 MB peak memory,       same as baseline
    4:     OK (1.76s)
      121  μs ± 6.6 μs, 793 KB allocated, 6.6 KB copied, 111 MB peak memory,       same as baseline
    8:     OK (1.55s)
      213  μs ±  19 μs, 1.3 MB allocated,  12 KB copied, 111 MB peak memory,       same as baseline
    16:    OK (1.46s)
      400  μs ±  40 μs, 2.5 MB allocated,  23 KB copied, 111 MB peak memory,       same as baseline
    32:    OK (1.42s)
      786  μs ±  55 μs, 4.7 MB allocated,  47 KB copied, 111 MB peak memory,       same as baseline
    64:    OK (2.77s)
      1.57 ms ±  58 μs, 9.3 MB allocated, 137 KB copied, 111 MB peak memory,       same as baseline
    128:   OK (1.38s)
      3.07 ms ± 246 μs,  18 MB allocated, 187 KB copied, 111 MB peak memory,       same as baseline
    256:   OK (1.37s)
      6.04 ms ± 421 μs,  37 MB allocated, 254 KB copied, 111 MB peak memory, 11% less than baseline
    512:   OK (1.36s)
      12.1 ms ± 1.0 ms,  73 MB allocated, 525 KB copied, 111 MB peak memory, 21% less than baseline
    1024:  OK (1.36s)
      24.4 ms ± 2.3 ms, 146 MB allocated, 1.1 MB copied, 111 MB peak memory, 34% less than baseline
    2048:  OK (2.76s)
      50.4 ms ± 2.7 ms, 292 MB allocated, 3.4 MB copied, 111 MB peak memory, 50% less than baseline
    4096:  OK (1.33s)
      102  ms ± 8.6 ms, 584 MB allocated, 7.2 MB copied, 111 MB peak memory, 68% less than baseline
    8192:  OK (1.25s)
      206  ms ±  19 ms, 1.1 GB allocated,  16 MB copied, 111 MB peak memory, 81% less than baseline
    16384: OK (1.09s)
      419  ms ±  32 ms, 2.3 GB allocated,  34 MB copied, 111 MB peak memory, 89% less than baseline
  balanceTransfer
    2:     OK (2.34s)
      41.3 μs ± 1.8 μs, 223 KB allocated, 1.2 KB copied, 111 MB peak memory,       same as baseline
    4:     OK (1.70s)
      59.1 μs ± 4.2 μs, 317 KB allocated, 1.8 KB copied, 111 MB peak memory,       same as baseline
    8:     OK (2.69s)
      94.3 μs ± 5.4 μs, 504 KB allocated, 3.7 KB copied, 111 MB peak memory,       same as baseline
    16:    OK (1.18s)
      162  μs ±  14 μs, 880 KB allocated, 8.9 KB copied, 111 MB peak memory,       same as baseline
    32:    OK (2.16s)
      300  μs ±  20 μs, 1.6 MB allocated,  26 KB copied, 111 MB peak memory,       same as baseline
    64:    OK (1.07s)
      589  μs ±  57 μs, 3.1 MB allocated,  86 KB copied, 111 MB peak memory,       same as baseline
    128:   OK (2.17s)
      1.22 ms ±  87 μs, 6.0 MB allocated, 350 KB copied, 111 MB peak memory,       same as baseline
    256:   OK (1.22s)
      2.79 ms ± 245 μs,  12 MB allocated, 1.3 MB copied, 111 MB peak memory,       same as baseline
    512:   OK (1.22s)
      5.84 ms ± 513 μs,  24 MB allocated, 3.3 MB copied, 111 MB peak memory,       same as baseline
    1024:  OK (1.23s)
      12.1 ms ± 1.2 ms,  47 MB allocated, 7.5 MB copied, 111 MB peak memory,       same as baseline
    2048:  OK (2.47s)
      24.6 ms ± 1.0 ms,  94 MB allocated,  16 MB copied, 111 MB peak memory,       same as baseline
    4096:  OK (2.49s)
      50.1 ms ± 2.3 ms, 189 MB allocated,  33 MB copied, 120 MB peak memory,       same as baseline
    8192:  OK (2.52s)
      101  ms ± 8.1 ms, 377 MB allocated,  66 MB copied, 155 MB peak memory,       same as baseline
    16384: OK (1.19s)
      203  ms ±  17 ms, 754 MB allocated, 135 MB copied, 209 MB peak memory,       same as baseline
  funcCall
    2:     OK (1.57s)
      54.6 μs ± 3.6 μs, 375 KB allocated, 3.2 KB copied, 209 MB peak memory,       same as baseline
    4:     OK (1.18s)
      80.9 μs ± 6.6 μs, 516 KB allocated, 4.7 KB copied, 209 MB peak memory,       same as baseline
    8:     OK (1.92s)
      133  μs ± 8.5 μs, 799 KB allocated, 8.1 KB copied, 209 MB peak memory,       same as baseline
    16:    OK (1.72s)
      237  μs ±  14 μs, 1.3 MB allocated,  15 KB copied, 209 MB peak memory,       same as baseline
    32:    OK (1.60s)
      438  μs ±  34 μs, 2.4 MB allocated,  28 KB copied, 209 MB peak memory,       same as baseline
    64:    OK (1.55s)
      850  μs ±  72 μs, 4.6 MB allocated,  54 KB copied, 209 MB peak memory,       same as baseline
    128:   OK (1.50s)
      1.68 ms ± 156 μs, 9.1 MB allocated, 142 KB copied, 209 MB peak memory,       same as baseline
    256:   OK (1.46s)
      3.24 ms ± 303 μs,  18 MB allocated, 143 KB copied, 209 MB peak memory,       same as baseline
    512:   OK (1.43s)
      6.28 ms ± 508 μs,  36 MB allocated, 124 KB copied, 209 MB peak memory,       same as baseline
    1024:  OK (1.42s)
      12.5 ms ± 885 μs,  71 MB allocated, 168 KB copied, 209 MB peak memory,       same as baseline
    2048:  OK (2.83s)
      25.0 ms ± 980 μs, 142 MB allocated, 255 KB copied, 209 MB peak memory,       same as baseline
    4096:  OK (1.38s)
      50.0 ms ± 4.6 ms, 284 MB allocated, 425 KB copied, 209 MB peak memory,       same as baseline
    8192:  OK (1.33s)
      100  ms ± 7.6 ms, 567 MB allocated, 772 KB copied, 209 MB peak memory,       same as baseline
    16384: OK (1.24s)
      198  ms ±  15 ms, 1.1 GB allocated, 1.4 MB copied, 209 MB peak memory,       same as baseline
  contractCreation
    2:     OK (1.37s)
      93.8 μs ± 7.1 μs, 547 KB allocated, 5.7 KB copied, 209 MB peak memory,       same as baseline
    4:     OK (1.16s)
      157  μs ±  14 μs, 863 KB allocated,  11 KB copied, 209 MB peak memory,  9% less than baseline
    8:     OK (1.07s)
      291  μs ±  27 μs, 1.5 MB allocated,  28 KB copied, 209 MB peak memory,       same as baseline
    16:    OK (2.00s)
      548  μs ±  45 μs, 2.7 MB allocated,  76 KB copied, 209 MB peak memory,       same as baseline
    32:    OK (2.07s)
      1.13 ms ±  55 μs, 5.2 MB allocated, 261 KB copied, 209 MB peak memory,       same as baseline
    64:    OK (2.34s)
      2.90 ms ± 139 μs,  10 MB allocated, 1.4 MB copied, 209 MB peak memory,       same as baseline
    128:   OK (1.32s)
      6.96 ms ± 550 μs,  20 MB allocated, 3.8 MB copied, 209 MB peak memory,       same as baseline
    256:   OK (1.29s)
      14.0 ms ± 907 μs,  40 MB allocated, 8.7 MB copied, 209 MB peak memory,       same as baseline
    512:   OK (1.33s)
      29.7 ms ± 1.9 ms,  81 MB allocated,  19 MB copied, 209 MB peak memory,       same as baseline
    1024:  OK (1.34s)
      61.9 ms ± 3.9 ms, 161 MB allocated,  38 MB copied, 209 MB peak memory,       same as baseline
    2048:  OK (1.32s)
      125  ms ± 8.8 ms, 322 MB allocated,  75 MB copied, 209 MB peak memory,       same as baseline
    4096:  OK (2.71s)
      248  ms ±  24 ms, 642 MB allocated, 154 MB copied, 332 MB peak memory,       same as baseline
    8192:  OK (2.56s)
      503  ms ±  37 ms, 1.3 GB allocated, 306 MB copied, 513 MB peak memory,       same as baseline
    16384: OK (11.33s)
      1.025 s ±  66 ms, 2.5 GB allocated, 636 MB copied, 1.1 GB peak memory,       same as baseline
  contractCreationMem
    2:     OK (1.43s)
      384  μs ±  26 μs, 2.3 MB allocated,  96 KB copied, 1.1 GB peak memory,       same as baseline
    4:     OK (1.33s)
      719  μs ±  53 μs, 3.9 MB allocated, 248 KB copied, 1.1 GB peak memory,       same as baseline
    8:     OK (1.45s)
      1.66 ms ± 138 μs, 7.3 MB allocated, 926 KB copied, 1.1 GB peak memory,       same as baseline
    16:    OK (1.61s)
      4.13 ms ± 286 μs,  14 MB allocated, 3.0 MB copied, 1.1 GB peak memory,       same as baseline
    32:    OK (0.86s)
      9.27 ms ± 855 μs,  27 MB allocated, 7.1 MB copied, 1.1 GB peak memory,       same as baseline
    64:    OK (0.87s)
      19.0 ms ± 1.8 ms,  54 MB allocated,  15 MB copied, 1.1 GB peak memory,       same as baseline
    128:   OK (1.77s)
      39.5 ms ± 2.0 ms, 108 MB allocated,  32 MB copied, 1.1 GB peak memory,       same as baseline
    256:   OK (1.75s)
      80.9 ms ± 4.2 ms, 215 MB allocated,  66 MB copied, 1.1 GB peak memory,       same as baseline
    512:   OK (1.74s)
      170  ms ± 7.4 ms, 433 MB allocated, 140 MB copied, 1.1 GB peak memory,       same as baseline
    1024:  OK (3.53s)
      345  ms ±  22 ms, 867 MB allocated, 284 MB copied, 1.1 GB peak memory,       same as baseline
    2048:  OK (7.24s)
      691  ms ±  43 ms, 1.7 GB allocated, 558 MB copied, 1.1 GB peak memory,       same as baseline
    4096:  OK (6.74s)
      1.428 s ±  85 ms, 3.4 GB allocated, 1.1 GB copied, 1.2 GB peak memory,       same as baseline
    8192:  OK (13.82s)
      2.966 s ± 132 ms, 6.8 GB allocated, 2.3 GB copied, 2.8 GB peak memory,  6% more than baseline
    16384: OK (12.09s)
      6.175 s ±  86 ms,  14 GB allocated, 4.6 GB copied, 3.4 GB peak memory,       same as baseline
  arrayCreationMem
    2:     OK (1.29s)
      173  μs ±  14 μs, 1.4 MB allocated,  21 KB copied, 3.4 GB peak memory,       same as baseline
    4:     OK (1.78s)
      494  μs ±  47 μs, 3.9 MB allocated,  66 KB copied, 3.4 GB peak memory,       same as baseline
    8:     OK (5.98s)
      1.73 ms ±  39 μs,  14 MB allocated, 250 KB copied, 3.4 GB peak memory,       same as baseline
    16:    OK (5.36s)
      6.12 ms ± 115 μs,  54 MB allocated, 369 KB copied, 3.4 GB peak memory,       same as baseline
    32:    OK (1.25s)
      23.7 ms ± 2.2 ms, 212 MB allocated, 980 KB copied, 3.4 GB peak memory,       same as baseline
    64:    OK (1.18s)
      93.5 ms ± 7.3 ms, 840 MB allocated, 2.8 MB copied, 3.4 GB peak memory,       same as baseline
    128:   OK (2.18s)
      379  ms ±  15 ms, 3.3 GB allocated, 5.6 MB copied, 3.4 GB peak memory,       same as baseline
    256:   OK (3.71s)
      1.457 s ±  53 ms,  13 GB allocated,  16 MB copied, 3.4 GB peak memory,       same as baseline
    512:   OK (14.79s)
      5.813 s ± 422 ms,  52 GB allocated,  46 MB copied, 3.4 GB peak memory,       same as baseline

All 121 tests passed (270.27s)

Copy link
Collaborator

@blishko blishko left a comment

Choose a reason for hiding this comment

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

LGTM!

@blishko blishko merged commit 0b19122 into main Jun 5, 2025
9 checks passed
@blishko blishko deleted the dev-shortcut branch June 5, 2025 16:40
@blishko blishko mentioned this pull request Jun 5, 2025
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants