Skip to content

perf(evm): add keccak cache to interpreter and extract shared header#420

Open
starwarfan wants to merge 1 commit intoDTVMStack:mainfrom
starwarfan:perf/keccak-cache-interpreter
Open

perf(evm): add keccak cache to interpreter and extract shared header#420
starwarfan wants to merge 1 commit intoDTVMStack:mainfrom
starwarfan:perf/keccak-cache-interpreter

Conversation

@starwarfan
Copy link
Copy Markdown
Contributor

Reuse keccak256 results for repeated inputs (e.g. storage slot keys in ERC20 transfer) via a 16-slot thread-local circular buffer cache. Extracts KeccakCache into shared header src/evm/keccak_cache.h so both interpreter and multipass paths use the same implementation.

ERC20 transfer benchmark: ~5376ns -> ~4798ns (-10.7%)

1. Does this PR affect any open issues?(Y/N) and add issue references (e.g. "fix #123", "re #123".):

  • N
  • Y

2. What is the scope of this PR (e.g. component or file name):

3. Provide a description of the PR(e.g. more details, effects, motivations or doc link):

  • Affects user behaviors
  • Contains CI/CD configuration changes
  • Contains documentation changes
  • Contains experimental features
  • Performance regression: Consumes more CPU
  • Performance regression: Consumes more Memory
  • Other

4. Are there any breaking changes?(Y/N) and describe the breaking changes(e.g. more details, motivations or doc link):

  • N
  • Y

5. Are there test cases for these changes?(Y/N) select and add more details, references or doc links:

  • Unit test
  • Integration test
  • Benchmark (add benchmark stats below)
  • Manual test (add detailed scripts or steps below)
  • Other

6. Release note

None

@starwarfan starwarfan force-pushed the perf/keccak-cache-interpreter branch from 3f4dde7 to 82b09d7 Compare March 31, 2026 11:29
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 31, 2026

⚡ Performance Regression Check Results

✅ Performance Check Passed (interpreter)

Performance Benchmark Results (threshold: 25%)

Benchmark Baseline (us) Current (us) Change Status
total/main/blake2b_huff/8415nulls 1.52 1.54 +1.4% PASS
total/main/blake2b_huff/empty 0.02 0.02 +0.1% PASS
total/main/blake2b_shifts/8415nulls 11.87 11.68 -1.6% PASS
total/main/sha1_divs/5311 5.14 5.08 -1.2% PASS
total/main/sha1_divs/empty 0.06 0.06 -1.7% PASS
total/main/sha1_shifts/5311 2.95 2.84 -3.9% PASS
total/main/sha1_shifts/empty 0.04 0.04 -2.6% PASS
total/main/snailtracer/benchmark 53.01 49.94 -5.8% PASS
total/main/structarray_alloc/nfts_rank 0.99 0.97 -2.1% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 -1.7% PASS
total/main/swap_math/received 0.00 0.00 -2.4% PASS
total/main/swap_math/spent 0.00 0.00 -2.6% PASS
total/main/weierstrudel/1 0.28 0.28 +1.1% PASS
total/main/weierstrudel/15 3.13 3.14 +0.3% PASS
total/micro/JUMPDEST_n0/empty 1.35 2.04 +51.2% PASS
total/micro/jump_around/empty 0.09 0.09 -2.0% PASS
total/micro/loop_with_many_jumpdests/empty 27.39 27.40 +0.1% PASS
total/micro/memory_grow_mload/by1 0.10 0.08 -14.0% PASS
total/micro/memory_grow_mload/by16 0.10 0.09 -9.8% PASS
total/micro/memory_grow_mload/by32 0.11 0.11 -2.4% PASS
total/micro/memory_grow_mload/nogrow 0.09 0.09 -2.8% PASS
total/micro/memory_grow_mstore/by1 0.10 0.09 -9.1% PASS
total/micro/memory_grow_mstore/by16 0.10 0.10 +2.6% PASS
total/micro/memory_grow_mstore/by32 0.12 0.12 +0.5% PASS
total/micro/memory_grow_mstore/nogrow 0.10 0.09 -9.6% PASS
total/micro/signextend/one 0.23 0.23 -0.1% PASS
total/micro/signextend/zero 0.24 0.23 -2.8% PASS
total/synth/ADD/b0 2.00 1.98 -0.9% PASS
total/synth/ADD/b1 1.99 1.96 -1.4% PASS
total/synth/ADDRESS/a0 4.75 4.73 -0.4% PASS
total/synth/ADDRESS/a1 5.32 5.23 -1.7% PASS
total/synth/AND/b0 1.71 1.71 -0.0% PASS
total/synth/AND/b1 1.71 1.71 -0.1% PASS
total/synth/BYTE/b0 6.11 6.13 +0.3% PASS
total/synth/BYTE/b1 4.75 4.75 +0.1% PASS
total/synth/CALLDATASIZE/a0 3.58 3.50 -2.2% PASS
total/synth/CALLDATASIZE/a1 3.61 3.52 -2.4% PASS
total/synth/CALLER/a0 4.73 4.75 +0.4% PASS
total/synth/CALLER/a1 5.31 5.23 -1.5% PASS
total/synth/CALLVALUE/a0 3.76 3.50 -6.7% PASS
total/synth/CALLVALUE/a1 3.76 3.52 -6.6% PASS
total/synth/CODESIZE/a0 3.98 3.83 -3.9% PASS
total/synth/CODESIZE/a1 4.00 3.84 -4.0% PASS
total/synth/DUP1/d0 1.31 1.14 -12.6% PASS
total/synth/DUP1/d1 1.39 1.31 -6.2% PASS
total/synth/DUP10/d0 1.07 0.91 -15.1% PASS
total/synth/DUP10/d1 1.39 1.23 -11.6% PASS
total/synth/DUP11/d0 1.07 1.15 +7.4% PASS
total/synth/DUP11/d1 1.39 1.23 -11.7% PASS
total/synth/DUP12/d0 1.31 1.14 -12.6% PASS
total/synth/DUP12/d1 1.39 1.02 -26.5% PASS
total/synth/DUP13/d0 1.31 0.99 -24.7% PASS
total/synth/DUP13/d1 1.39 1.23 -11.6% PASS
total/synth/DUP14/d0 1.22 1.15 -6.3% PASS
total/synth/DUP14/d1 1.39 1.00 -28.4% PASS
total/synth/DUP15/d0 1.31 1.14 -12.5% PASS
total/synth/DUP15/d1 1.39 1.23 -11.7% PASS
total/synth/DUP16/d0 1.22 0.98 -19.5% PASS
total/synth/DUP16/d1 1.39 1.23 -11.6% PASS
total/synth/DUP2/d0 1.14 1.14 -0.1% PASS
total/synth/DUP2/d1 1.39 1.23 -11.8% PASS
total/synth/DUP3/d0 1.31 1.14 -12.7% PASS
total/synth/DUP3/d1 1.39 1.23 -11.7% PASS
total/synth/DUP4/d0 1.23 1.06 -13.4% PASS
total/synth/DUP4/d1 1.39 1.01 -27.3% PASS
total/synth/DUP5/d0 1.15 0.90 -21.3% PASS
total/synth/DUP5/d1 1.39 1.23 -11.7% PASS
total/synth/DUP6/d0 1.14 0.90 -20.2% PASS
total/synth/DUP6/d1 1.17 1.03 -11.6% PASS
total/synth/DUP7/d0 1.31 1.14 -12.6% PASS
total/synth/DUP7/d1 1.39 1.00 -28.4% PASS
total/synth/DUP8/d0 1.15 1.22 +6.5% PASS
total/synth/DUP8/d1 1.39 1.23 -11.6% PASS
total/synth/DUP9/d0 1.15 1.15 -0.5% PASS
total/synth/DUP9/d1 1.39 1.23 -11.7% PASS
total/synth/EQ/b0 2.76 2.76 +0.0% PASS
total/synth/EQ/b1 1.33 1.33 -0.2% PASS
total/synth/GAS/a0 3.84 3.91 +1.9% PASS
total/synth/GAS/a1 3.85 3.93 +1.9% PASS
total/synth/GT/b0 2.61 2.59 -0.8% PASS
total/synth/GT/b1 1.56 1.63 +4.9% PASS
total/synth/ISZERO/u0 1.15 1.15 +0.0% PASS
total/synth/JUMPDEST/n0 1.54 1.79 +16.3% PASS
total/synth/LT/b0 2.62 2.62 +0.1% PASS
total/synth/LT/b1 1.56 1.63 +5.0% PASS
total/synth/MSIZE/a0 4.25 4.24 -0.2% PASS
total/synth/MSIZE/a1 4.82 4.74 -1.6% PASS
total/synth/MUL/b0 5.30 5.31 +0.3% PASS
total/synth/MUL/b1 5.37 5.29 -1.6% PASS
total/synth/NOT/u0 1.82 1.70 -6.7% PASS
total/synth/OR/b0 1.64 1.64 +0.0% PASS
total/synth/OR/b1 1.72 1.71 -0.3% PASS
total/synth/PC/a0 3.58 3.26 -9.0% PASS
total/synth/PC/a1 3.60 3.72 +3.4% PASS
total/synth/PUSH1/p0 1.15 0.91 -20.9% PASS
total/synth/PUSH1/p1 1.38 1.13 -18.0% PASS
total/synth/PUSH10/p0 1.08 1.07 -1.4% PASS
total/synth/PUSH10/p1 1.43 1.27 -10.9% PASS
total/synth/PUSH11/p0 0.91 1.11 +22.4% PASS
total/synth/PUSH11/p1 1.41 1.28 -9.0% PASS
total/synth/PUSH12/p0 1.07 1.15 +7.6% PASS
total/synth/PUSH12/p1 1.43 1.14 -20.3% PASS
total/synth/PUSH13/p0 0.91 1.15 +26.4% PASS
total/synth/PUSH13/p1 1.41 1.27 -9.3% PASS
total/synth/PUSH14/p0 0.93 1.15 +23.9% PASS
total/synth/PUSH14/p1 1.41 1.28 -9.4% PASS
total/synth/PUSH15/p0 1.07 1.15 +7.6% PASS
total/synth/PUSH15/p1 1.52 1.39 -8.0% PASS
total/synth/PUSH16/p0 1.15 0.91 -20.9% PASS
total/synth/PUSH16/p1 1.44 1.28 -10.7% PASS
total/synth/PUSH17/p0 0.99 0.91 -8.0% PASS
total/synth/PUSH17/p1 1.41 1.27 -9.8% PASS
total/synth/PUSH18/p0 1.07 1.15 +7.6% PASS
total/synth/PUSH18/p1 1.40 1.29 -7.9% PASS
total/synth/PUSH19/p0 0.91 1.15 +26.6% PASS
total/synth/PUSH19/p1 1.41 1.29 -9.0% PASS
total/synth/PUSH2/p0 1.07 0.91 -14.5% PASS
total/synth/PUSH2/p1 1.40 1.24 -11.4% PASS
total/synth/PUSH20/p0 0.90 0.91 +0.1% PASS
total/synth/PUSH20/p1 1.43 1.28 -10.5% PASS
total/synth/PUSH21/p0 0.99 1.15 +16.2% PASS
total/synth/PUSH21/p1 1.39 1.29 -7.3% PASS
total/synth/PUSH22/p0 1.07 0.91 -15.1% PASS
total/synth/PUSH22/p1 1.42 1.28 -9.6% PASS
total/synth/PUSH23/p0 1.15 1.07 -6.4% PASS
total/synth/PUSH23/p1 1.45 1.29 -10.9% PASS
total/synth/PUSH24/p0 1.07 0.91 -14.9% PASS
total/synth/PUSH24/p1 1.40 1.29 -8.0% PASS
total/synth/PUSH25/p0 1.07 1.15 +7.4% PASS
total/synth/PUSH25/p1 1.40 1.29 -8.3% PASS
total/synth/PUSH26/p0 1.07 0.91 -14.9% PASS
total/synth/PUSH26/p1 1.44 1.29 -10.3% PASS
total/synth/PUSH27/p0 0.91 1.15 +26.0% PASS
total/synth/PUSH27/p1 1.42 1.29 -8.9% PASS
total/synth/PUSH28/p0 0.91 1.15 +26.3% PASS
total/synth/PUSH28/p1 1.44 1.30 -9.6% PASS
total/synth/PUSH29/p0 1.07 1.15 +7.5% PASS
total/synth/PUSH29/p1 1.41 1.29 -8.6% PASS
total/synth/PUSH3/p0 1.07 1.15 +7.5% PASS
total/synth/PUSH3/p1 1.39 1.27 -8.3% PASS
total/synth/PUSH30/p0 1.16 1.11 -3.8% PASS
total/synth/PUSH30/p1 1.44 1.30 -10.0% PASS
total/synth/PUSH31/p0 1.05 0.91 -13.4% PASS
total/synth/PUSH31/p1 1.60 1.42 -11.3% PASS
total/synth/PUSH32/p0 0.99 1.15 +16.3% PASS
total/synth/PUSH32/p1 1.43 1.31 -8.4% PASS
total/synth/PUSH4/p0 1.15 1.15 -0.1% PASS
total/synth/PUSH4/p1 1.42 1.28 -10.0% PASS
total/synth/PUSH5/p0 1.12 1.07 -4.8% PASS
total/synth/PUSH5/p1 1.40 1.27 -9.4% PASS
total/synth/PUSH6/p0 0.99 1.15 +16.1% PASS
total/synth/PUSH6/p1 1.40 1.29 -7.9% PASS
total/synth/PUSH7/p0 0.99 0.95 -4.0% PASS
total/synth/PUSH7/p1 1.40 1.29 -8.1% PASS
total/synth/PUSH8/p0 0.95 1.15 +21.2% PASS
total/synth/PUSH8/p1 1.40 1.28 -8.6% PASS
total/synth/PUSH9/p0 1.07 0.91 -15.0% PASS
total/synth/PUSH9/p1 1.39 1.27 -8.9% PASS
total/synth/RETURNDATASIZE/a0 3.99 3.83 -4.1% PASS
total/synth/RETURNDATASIZE/a1 4.01 3.84 -4.2% PASS
total/synth/SAR/b0 3.83 3.77 -1.5% PASS
total/synth/SAR/b1 4.31 4.27 -1.0% PASS
total/synth/SGT/b0 2.61 2.60 -0.3% PASS
total/synth/SGT/b1 1.56 1.72 +10.1% PASS
total/synth/SHL/b0 3.04 3.03 -0.2% PASS
total/synth/SHL/b1 1.61 1.71 +6.5% PASS
total/synth/SHR/b0 2.93 2.93 -0.0% PASS
total/synth/SHR/b1 1.63 1.63 +0.3% PASS
total/synth/SIGNEXTEND/b0 3.66 3.15 -13.9% PASS
total/synth/SIGNEXTEND/b1 3.73 3.52 -5.7% PASS
total/synth/SLT/b0 2.62 2.60 -0.5% PASS
total/synth/SLT/b1 1.56 1.71 +10.1% PASS
total/synth/SUB/b0 1.98 1.98 -0.1% PASS
total/synth/SUB/b1 1.97 1.96 -0.3% PASS
total/synth/SWAP1/s0 1.49 1.49 -0.0% PASS
total/synth/SWAP10/s0 1.50 1.50 -0.1% PASS
total/synth/SWAP11/s0 1.50 1.65 +9.5% PASS
total/synth/SWAP12/s0 1.50 1.65 +9.6% PASS
total/synth/SWAP13/s0 1.51 1.65 +9.3% PASS
total/synth/SWAP14/s0 1.51 1.65 +9.4% PASS
total/synth/SWAP15/s0 1.51 1.66 +9.8% PASS
total/synth/SWAP16/s0 1.51 1.65 +9.4% PASS
total/synth/SWAP2/s0 1.49 1.64 +9.8% PASS
total/synth/SWAP3/s0 1.50 1.64 +9.1% PASS
total/synth/SWAP4/s0 1.50 1.64 +9.6% PASS
total/synth/SWAP5/s0 1.50 1.64 +9.6% PASS
total/synth/SWAP6/s0 1.50 1.64 +9.7% PASS
total/synth/SWAP7/s0 1.50 1.54 +3.2% PASS
total/synth/SWAP8/s0 1.50 1.50 +0.2% PASS
total/synth/SWAP9/s0 1.50 1.64 +9.5% PASS
total/synth/XOR/b0 1.55 1.55 -0.0% PASS
total/synth/XOR/b1 1.55 1.55 -0.2% PASS
total/synth/loop_v1 4.43 4.45 +0.5% PASS
total/synth/loop_v2 4.43 4.44 +0.2% PASS

Summary: 194 benchmarks, 0 regressions


✅ Performance Check Passed (multipass)

Performance Benchmark Results (threshold: 25%)

Benchmark Baseline (us) Current (us) Change Status
total/main/blake2b_huff/8415nulls 1.54 1.54 -0.1% PASS
total/main/blake2b_huff/empty 0.07 0.07 +1.7% PASS
total/main/blake2b_shifts/8415nulls 5.27 5.24 -0.5% PASS
total/main/sha1_divs/5311 1.90 1.90 -0.2% PASS
total/main/sha1_divs/empty 0.03 0.03 +0.7% PASS
total/main/sha1_shifts/5311 2.76 2.76 +0.0% PASS
total/main/sha1_shifts/empty 0.04 0.04 +0.6% PASS
total/main/snailtracer/benchmark 53.73 50.73 -5.6% PASS
total/main/structarray_alloc/nfts_rank 0.29 0.29 -1.0% PASS
total/main/swap_math/insufficient_liquidity 0.02 0.02 +1.9% PASS
total/main/swap_math/received 0.02 0.02 +2.7% PASS
total/main/swap_math/spent 0.02 0.02 +2.3% PASS
total/main/weierstrudel/1 0.35 0.36 +2.0% PASS
total/main/weierstrudel/15 3.21 3.22 +0.3% PASS
total/micro/JUMPDEST_n0/empty 0.13 0.13 +0.1% PASS
total/micro/jump_around/empty 0.62 0.63 +1.3% PASS
total/micro/loop_with_many_jumpdests/empty 1.95 1.95 -0.0% PASS
total/micro/memory_grow_mload/by1 0.18 0.18 -1.2% PASS
total/micro/memory_grow_mload/by16 0.19 0.19 +2.3% PASS
total/micro/memory_grow_mload/by32 0.20 0.21 +1.5% PASS
total/micro/memory_grow_mload/nogrow 0.17 0.18 +0.5% PASS
total/micro/memory_grow_mstore/by1 0.18 0.18 +0.1% PASS
total/micro/memory_grow_mstore/by16 0.20 0.20 -0.1% PASS
total/micro/memory_grow_mstore/by32 0.22 0.21 -0.7% PASS
total/micro/memory_grow_mstore/nogrow 0.18 0.18 +0.6% PASS
total/micro/signextend/one 0.34 0.34 -1.2% PASS
total/micro/signextend/zero 0.35 0.34 -3.8% PASS
total/synth/ADD/b0 0.01 0.01 +3.2% PASS
total/synth/ADD/b1 0.01 0.01 +1.9% PASS
total/synth/ADDRESS/a0 0.16 0.16 -0.0% PASS
total/synth/ADDRESS/a1 0.16 0.16 +0.2% PASS
total/synth/AND/b0 0.01 0.01 +3.1% PASS
total/synth/AND/b1 0.01 0.01 +1.9% PASS
total/synth/BYTE/b0 1.95 1.96 +0.1% PASS
total/synth/BYTE/b1 2.35 2.35 +0.1% PASS
total/synth/CALLDATASIZE/a0 0.08 0.08 +1.5% PASS
total/synth/CALLDATASIZE/a1 0.08 0.08 +1.9% PASS
total/synth/CALLER/a0 0.16 0.16 +0.0% PASS
total/synth/CALLER/a1 0.16 0.16 +0.2% PASS
total/synth/CALLVALUE/a0 0.27 0.27 +0.2% PASS
total/synth/CALLVALUE/a1 0.28 0.28 +0.3% PASS
total/synth/CODESIZE/a0 0.08 0.08 +0.0% PASS
total/synth/CODESIZE/a1 0.08 0.08 +0.4% PASS
total/synth/DUP1/d0 0.01 0.01 +3.2% PASS
total/synth/DUP1/d1 0.01 0.01 +2.0% PASS
total/synth/DUP10/d0 0.01 0.01 +3.2% PASS
total/synth/DUP10/d1 0.01 0.01 +1.9% PASS
total/synth/DUP11/d0 0.01 0.01 +3.2% PASS
total/synth/DUP11/d1 0.01 0.01 +2.0% PASS
total/synth/DUP12/d0 0.01 0.01 +3.2% PASS
total/synth/DUP12/d1 0.01 0.01 +2.0% PASS
total/synth/DUP13/d0 0.01 0.01 +3.2% PASS
total/synth/DUP13/d1 0.01 0.01 +2.0% PASS
total/synth/DUP14/d0 0.01 0.01 +3.3% PASS
total/synth/DUP14/d1 0.01 0.01 +1.9% PASS
total/synth/DUP15/d0 0.01 0.01 +3.1% PASS
total/synth/DUP15/d1 0.01 0.01 +2.0% PASS
total/synth/DUP16/d0 0.01 0.01 +3.3% PASS
total/synth/DUP16/d1 0.01 0.01 +1.9% PASS
total/synth/DUP2/d0 0.01 0.01 +3.2% PASS
total/synth/DUP2/d1 0.01 0.01 +2.2% PASS
total/synth/DUP3/d0 0.01 0.01 +3.2% PASS
total/synth/DUP3/d1 0.01 0.01 +2.0% PASS
total/synth/DUP4/d0 0.01 0.01 +3.1% PASS
total/synth/DUP4/d1 0.01 0.01 +2.0% PASS
total/synth/DUP5/d0 0.01 0.01 +3.2% PASS
total/synth/DUP5/d1 0.01 0.01 +2.0% PASS
total/synth/DUP6/d0 0.01 0.01 +3.3% PASS
total/synth/DUP6/d1 0.01 0.01 +2.0% PASS
total/synth/DUP7/d0 0.01 0.01 +3.2% PASS
total/synth/DUP7/d1 0.01 0.01 +1.9% PASS
total/synth/DUP8/d0 0.01 0.01 +3.2% PASS
total/synth/DUP8/d1 0.01 0.01 +2.0% PASS
total/synth/DUP9/d0 0.01 0.01 +3.2% PASS
total/synth/DUP9/d1 0.01 0.01 +2.0% PASS
total/synth/EQ/b0 0.01 0.01 +2.9% PASS
total/synth/EQ/b1 0.01 0.01 +2.0% PASS
total/synth/GAS/a0 0.80 0.80 +0.2% PASS
total/synth/GAS/a1 0.76 0.76 +0.1% PASS
total/synth/GT/b0 0.01 0.01 +3.2% PASS
total/synth/GT/b1 0.01 0.01 +2.0% PASS
total/synth/ISZERO/u0 0.01 0.01 +0.2% PASS
total/synth/JUMPDEST/n0 0.13 0.13 +0.0% PASS
total/synth/LT/b0 0.01 0.01 +3.3% PASS
total/synth/LT/b1 0.01 0.01 +2.0% PASS
total/synth/MSIZE/a0 0.01 0.01 +0.3% PASS
total/synth/MSIZE/a1 0.01 0.01 +2.1% PASS
total/synth/MUL/b0 0.01 0.01 +3.2% PASS
total/synth/MUL/b1 0.01 0.01 +2.0% PASS
total/synth/NOT/u0 0.01 0.01 +0.3% PASS
total/synth/OR/b0 0.01 0.01 +3.3% PASS
total/synth/OR/b1 0.01 0.01 +2.0% PASS
total/synth/PC/a0 0.01 0.01 +0.3% PASS
total/synth/PC/a1 0.01 0.01 +2.1% PASS
total/synth/PUSH1/p0 0.01 0.01 +3.3% PASS
total/synth/PUSH1/p1 0.01 0.01 +5.4% PASS
total/synth/PUSH10/p0 0.01 0.01 +3.4% PASS
total/synth/PUSH10/p1 0.01 0.01 +4.5% PASS
total/synth/PUSH11/p0 0.01 0.01 +3.4% PASS
total/synth/PUSH11/p1 0.01 0.01 +5.8% PASS
total/synth/PUSH12/p0 0.01 0.01 +3.2% PASS
total/synth/PUSH12/p1 0.01 0.01 +5.8% PASS
total/synth/PUSH13/p0 0.01 0.01 +2.4% PASS
total/synth/PUSH13/p1 0.01 0.01 +5.8% PASS
total/synth/PUSH14/p0 0.01 0.01 +2.3% PASS
total/synth/PUSH14/p1 0.01 0.01 +5.7% PASS
total/synth/PUSH15/p0 0.01 0.01 +3.3% PASS
total/synth/PUSH15/p1 0.01 0.01 +5.7% PASS
total/synth/PUSH16/p0 0.01 0.01 +3.2% PASS
total/synth/PUSH16/p1 0.01 0.01 +5.8% PASS
total/synth/PUSH17/p0 0.01 0.01 +3.1% PASS
total/synth/PUSH17/p1 0.01 0.01 +5.7% PASS
total/synth/PUSH18/p0 0.01 0.01 +3.1% PASS
total/synth/PUSH18/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH19/p0 0.01 0.01 +3.0% PASS
total/synth/PUSH19/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH2/p0 0.01 0.01 +3.3% PASS
total/synth/PUSH2/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH20/p0 0.01 0.01 +3.2% PASS
total/synth/PUSH20/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH21/p0 0.01 0.01 +3.1% PASS
total/synth/PUSH21/p1 0.01 0.01 +5.5% PASS
total/synth/PUSH22/p0 1.16 1.08 -6.8% PASS
total/synth/PUSH22/p1 1.44 1.31 -9.0% PASS
total/synth/PUSH23/p0 1.16 1.08 -6.7% PASS
total/synth/PUSH23/p1 1.45 1.31 -9.8% PASS
total/synth/PUSH24/p0 1.16 1.08 -6.9% PASS
total/synth/PUSH24/p1 1.44 1.31 -9.2% PASS
total/synth/PUSH25/p0 1.16 1.08 -6.8% PASS
total/synth/PUSH25/p1 1.44 1.30 -9.7% PASS
total/synth/PUSH26/p0 0.84 0.84 +0.4% PASS
total/synth/PUSH26/p1 1.44 1.32 -8.7% PASS
total/synth/PUSH27/p0 0.92 1.08 +17.6% PASS
total/synth/PUSH27/p1 1.44 1.31 -9.0% PASS
total/synth/PUSH28/p0 1.08 1.16 +7.3% PASS
total/synth/PUSH28/p1 1.45 1.32 -8.8% PASS
total/synth/PUSH29/p0 1.16 1.08 -6.8% PASS
total/synth/PUSH29/p1 1.44 1.31 -8.8% PASS
total/synth/PUSH3/p0 0.01 0.01 +3.1% PASS
total/synth/PUSH3/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH30/p0 1.17 1.09 -6.9% PASS
total/synth/PUSH30/p1 1.45 1.33 -8.3% PASS
total/synth/PUSH31/p0 1.16 1.08 -6.5% PASS
total/synth/PUSH31/p1 1.57 1.41 -10.5% PASS
total/synth/PUSH32/p0 1.16 1.08 -6.8% PASS
total/synth/PUSH32/p1 1.47 1.34 -9.0% PASS
total/synth/PUSH4/p0 0.01 0.01 +3.5% PASS
total/synth/PUSH4/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH5/p0 0.01 0.01 +3.4% PASS
total/synth/PUSH5/p1 0.01 0.01 +5.7% PASS
total/synth/PUSH6/p0 0.01 0.01 +3.2% PASS
total/synth/PUSH6/p1 0.01 0.01 +5.6% PASS
total/synth/PUSH7/p0 0.01 0.01 +3.3% PASS
total/synth/PUSH7/p1 0.01 0.01 +5.5% PASS
total/synth/PUSH8/p0 0.01 0.01 +3.4% PASS
total/synth/PUSH8/p1 0.01 0.01 +5.7% PASS
total/synth/PUSH9/p0 0.01 0.01 +3.1% PASS
total/synth/PUSH9/p1 0.01 0.01 +5.7% PASS
total/synth/RETURNDATASIZE/a0 0.53 0.61 +15.8% PASS
total/synth/RETURNDATASIZE/a1 0.49 0.57 +16.9% PASS
total/synth/SAR/b0 3.80 3.78 -0.4% PASS
total/synth/SAR/b1 4.31 4.29 -0.5% PASS
total/synth/SGT/b0 0.01 0.01 +3.2% PASS
total/synth/SGT/b1 0.01 0.01 +2.0% PASS
total/synth/SHL/b0 3.05 3.04 -0.2% PASS
total/synth/SHL/b1 1.62 1.73 +6.6% PASS
total/synth/SHR/b0 2.94 2.94 +0.0% PASS
total/synth/SHR/b1 1.63 1.64 +0.6% PASS
total/synth/SIGNEXTEND/b0 3.35 3.15 -5.9% PASS
total/synth/SIGNEXTEND/b1 3.48 3.29 -5.3% PASS
total/synth/SLT/b0 0.01 0.01 +3.2% PASS
total/synth/SLT/b1 0.01 0.01 +1.9% PASS
total/synth/SUB/b0 0.01 0.01 +3.2% PASS
total/synth/SUB/b1 0.01 0.01 +2.0% PASS
total/synth/SWAP1/s0 0.01 0.01 +4.3% PASS
total/synth/SWAP10/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP11/s0 0.01 0.01 +6.9% PASS
total/synth/SWAP12/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP13/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP14/s0 0.01 0.01 +6.9% PASS
total/synth/SWAP15/s0 0.01 0.01 +6.9% PASS
total/synth/SWAP16/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP2/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP3/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP4/s0 0.01 0.01 +6.9% PASS
total/synth/SWAP5/s0 0.01 0.01 +7.1% PASS
total/synth/SWAP6/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP7/s0 0.01 0.01 +7.1% PASS
total/synth/SWAP8/s0 0.01 0.01 +6.8% PASS
total/synth/SWAP9/s0 0.01 0.01 +6.9% PASS
total/synth/XOR/b0 0.01 0.01 +3.2% PASS
total/synth/XOR/b1 0.01 0.01 +1.9% PASS
total/synth/loop_v1 1.39 1.42 +2.2% PASS
total/synth/loop_v2 1.32 1.34 +1.6% PASS

Summary: 194 benchmarks, 0 regressions


Reuse keccak256 results for repeated inputs (e.g. storage slot keys in
ERC20 transfer) via a 16-slot thread-local circular buffer cache.
Extracts KeccakCache into shared header src/evm/keccak_cache.h so both
interpreter and multipass paths use the same implementation.

ERC20 transfer benchmark: ~5376ns -> ~4798ns (-10.7%)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@starwarfan starwarfan force-pushed the perf/keccak-cache-interpreter branch from 82b09d7 to 04c4c79 Compare March 31, 2026 12:31
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.

1 participant