Skip to content

fix(compiler): sync non-lifted EVM stack state across block boundaries#507

Open
ZR74 wants to merge 18 commits into
DTVMStack:mainfrom
ZR74:pr503-stack-fix-clean
Open

fix(compiler): sync non-lifted EVM stack state across block boundaries#507
ZR74 wants to merge 18 commits into
DTVMStack:mainfrom
ZR74:pr503-stack-fix-clean

Conversation

@ZR74
Copy link
Copy Markdown
Contributor

@ZR74 ZR74 commented May 15, 2026

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 and others added 6 commits May 15, 2026 12:04
Add a standalone DTVM-only test target plus extracted fixtures for the historical legacy CALL regression so it can be replayed without external chain snapshots.
Run the standalone legacy CALL regression through the dtvmapi execution path and expand the fixture payloads needed for DTVM-only coverage.
Spill the full tracked stack back to EVMInstance on non-lifted exits, reload stack metadata on non-lifted entries, and avoid re-finalizing dead blocks after a terminator so logical stack provenance stays aligned across block boundaries.
Copilot AI review requested due to automatic review settings May 15, 2026 05:45
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes an EVM compiler/runtime state mismatch by ensuring non-lifted EVM stack metadata is synchronized across basic-block boundaries, and adds regression coverage (unit tests + historical mainnet fixtures) to prevent gas/behavior divergence around legacy CALL execution paths.

Changes:

  • Update the EVM bytecode visitor to reload stack metadata at non-lifted block entry and to sync stack size back to the instance when materializing the stack at block exit.
  • Extend EVMMirBuilder with helpers to reload/sync tracked stack metadata from/to the EVMInstance.
  • Add legacy mainnet repro fixtures and new/expanded regression tests (including a dedicated evmLegacyCallReproTests target).

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/evm/fixtures/legacy_call_repro/schema.json JSON schema for the standalone legacy CALL repro fixture format.
tests/evm/fixtures/legacy_call_repro/README.md Documentation for regenerating and interpreting the legacy CALL fixtures.
tests/evm/fixtures/legacy_call_repro/cases.json Lists the included legacy CALL fixture cases.
tests/evm/fixtures/legacy_call_repro/block_254277_tx_0.json Mainnet fixture capturing a legacy CALL “creation cost” case.
tests/evm/fixtures/legacy_call_repro/block_254297_tx_0.json Mainnet fixture capturing a legacy CALL “guard path” case.
src/tests/evm_legacy_call_repro_tests.cpp New test runner that loads fixtures and executes them in interpreter/multipass (and optionally via dtvmapi).
src/tests/evm_jit_frontend_tests.cpp Enhances the mock builder’s tracked-stack model and adds JIT frontend regression tests around hidden prefixes and non-lifted targets.
src/tests/evm_interp_tests.cpp Adds a regression test that captures the recipient address of an internal CALL and compares interpreter vs multipass.
src/tests/CMakeLists.txt Wires up evmLegacyCallReproTests build + ctest registration (and dtvmapi linkage when available).
src/compiler/evm_frontend/evm_mir_compiler.h Declares new stack metadata reload/sync helpers on EVMMirBuilder.
src/compiler/evm_frontend/evm_mir_compiler.cpp Implements stack metadata reload/sync helpers.
src/action/evm_bytecode_visitor.h Core logic change: reload stack metadata for non-lifted blocks; sync stack size on materialized exits; avoid double-finalization.
Comments suppressed due to low confidence (1)

src/tests/evm_legacy_call_repro_tests.cpp:226

  • runFixture() re-parses the fixture JSON to read env.block_hash but doesn’t check std::ifstream open success or RapidJSON parse errors before accessing members. A missing/corrupt fixture would currently lead to undefined behavior. Consider reusing the already-parsed document in loadFixture() (store block_hash there) and/or add ASSERT_TRUE(F.is_open()) + parse/type checks before accessing D["env"]["block_hash"].
  // one block_hash value for all get_block_hash() queries.
  const auto DocPath = std::filesystem::path(Fixture.FixturePath);
  std::ifstream F(DocPath);
  rapidjson::IStreamWrapper ISW(F);
  rapidjson::Document D;
  D.ParseStream(ISW);
  if (D.IsObject() && D.HasMember("env") && D["env"].IsObject() &&
      D["env"].HasMember("block_hash") && D["env"]["block_hash"].IsString()) {
    Host->block_hash =
        zen::utils::parseBytes32(D["env"]["block_hash"].GetString());
  }

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/tests/evm_legacy_call_repro_tests.cpp
Comment thread src/tests/evm_legacy_call_repro_tests.cpp Outdated
Comment thread src/tests/evm_interp_tests.cpp
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 15, 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 4.23 4.23 -0.1% PASS
total/main/blake2b_huff/empty 0.07 0.07 -0.7% PASS
total/main/blake2b_shifts/8415nulls 16.88 16.79 -0.5% PASS
total/main/sha1_divs/5311 13.17 13.15 -0.1% PASS
total/main/sha1_divs/empty 0.15 0.17 +10.6% PASS
total/main/sha1_shifts/5311 10.15 10.30 +1.5% PASS
total/main/sha1_shifts/empty 0.07 0.07 +1.7% PASS
total/main/snailtracer/benchmark 122.57 122.34 -0.2% PASS
total/main/structarray_alloc/nfts_rank 1.20 1.20 -0.2% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 +9.5% PASS
total/main/swap_math/received 0.01 0.01 +5.5% PASS
total/main/swap_math/spent 0.01 0.01 +5.4% PASS
total/main/weierstrudel/1 0.40 0.41 +2.2% PASS
total/main/weierstrudel/15 4.46 4.25 -4.7% PASS
total/micro/JUMPDEST_n0/empty 1.85 1.87 +0.8% PASS
total/micro/jump_around/empty 0.08 0.08 +3.2% PASS
total/micro/loop_with_many_jumpdests/empty 67.52 62.73 -7.1% PASS
total/micro/memory_grow_mload/by1 0.26 0.26 +0.2% PASS
total/micro/memory_grow_mload/by16 0.28 0.28 -1.7% PASS
total/micro/memory_grow_mload/by32 0.14 0.14 +1.4% PASS
total/micro/memory_grow_mload/nogrow 0.12 0.12 +1.5% PASS
total/micro/memory_grow_mstore/by1 0.26 0.26 +0.6% PASS
total/micro/memory_grow_mstore/by16 0.13 0.14 +0.7% PASS
total/micro/memory_grow_mstore/by32 0.28 0.32 +12.9% PASS
total/micro/memory_grow_mstore/nogrow 0.26 0.25 -5.5% PASS
total/micro/signextend/one 0.25 0.25 +0.6% PASS
total/micro/signextend/zero 0.51 0.50 -3.1% PASS
total/synth/ADD/b0 3.07 3.04 -0.9% PASS
total/synth/ADD/b1 6.41 6.35 -0.9% PASS
total/synth/ADDRESS/a0 11.25 11.17 -0.6% PASS
total/synth/ADDRESS/a1 6.52 6.61 +1.3% PASS
total/synth/AND/b0 2.83 2.81 -0.6% PASS
total/synth/AND/b1 5.90 5.32 -9.9% PASS
total/synth/BYTE/b0 4.86 4.79 -1.5% PASS
total/synth/BYTE/b1 8.92 8.90 -0.2% PASS
total/synth/CALLDATASIZE/a0 7.44 7.91 +6.3% PASS
total/synth/CALLDATASIZE/a1 3.35 3.40 +1.6% PASS
total/synth/CALLER/a0 10.89 11.27 +3.5% PASS
total/synth/CALLER/a1 10.94 11.17 +2.1% PASS
total/synth/CALLVALUE/a0 3.27 3.28 +0.1% PASS
total/synth/CALLVALUE/a1 7.23 7.24 +0.1% PASS
total/synth/CODESIZE/a0 8.59 8.65 +0.7% PASS
total/synth/CODESIZE/a1 8.62 8.65 +0.3% PASS
total/synth/DUP1/d0 2.45 2.48 +1.1% PASS
total/synth/DUP1/d1 2.46 2.42 -1.8% PASS
total/synth/DUP10/d0 2.46 2.43 -1.2% PASS
total/synth/DUP10/d1 2.33 2.48 +6.5% PASS
total/synth/DUP11/d0 1.62 1.63 +1.1% PASS
total/synth/DUP11/d1 2.43 2.50 +3.0% PASS
total/synth/DUP12/d0 2.48 2.46 -0.9% PASS
total/synth/DUP12/d1 1.70 1.71 +0.5% PASS
total/synth/DUP13/d0 2.46 2.46 -0.3% PASS
total/synth/DUP13/d1 2.41 2.49 +3.6% PASS
total/synth/DUP14/d0 1.62 1.64 +1.0% PASS
total/synth/DUP14/d1 2.42 2.41 -0.2% PASS
total/synth/DUP15/d0 2.77 2.77 -0.2% PASS
total/synth/DUP15/d1 1.65 1.71 +3.7% PASS
total/synth/DUP16/d0 2.46 2.42 -1.9% PASS
total/synth/DUP16/d1 2.45 2.50 +2.0% PASS
total/synth/DUP2/d0 1.63 1.63 -0.2% PASS
total/synth/DUP2/d1 2.48 2.49 +0.3% PASS
total/synth/DUP3/d0 2.09 2.48 +18.7% PASS
total/synth/DUP3/d1 1.69 1.66 -2.1% PASS
total/synth/DUP4/d0 2.42 2.46 +1.8% PASS
total/synth/DUP4/d1 2.35 2.44 +3.7% PASS
total/synth/DUP5/d0 1.61 1.63 +1.1% PASS
total/synth/DUP5/d1 2.47 2.39 -3.3% PASS
total/synth/DUP6/d0 2.46 2.45 -0.5% PASS
total/synth/DUP6/d1 1.65 1.69 +2.8% PASS
total/synth/DUP7/d0 2.41 2.38 -1.3% PASS
total/synth/DUP7/d1 2.32 2.44 +5.2% PASS
total/synth/DUP8/d0 1.61 1.65 +2.3% PASS
total/synth/DUP8/d1 2.48 2.47 -0.5% PASS
total/synth/DUP9/d0 2.47 2.13 -13.6% PASS
total/synth/DUP9/d1 1.65 1.67 +1.5% PASS
total/synth/EQ/b0 8.81 9.21 +4.4% PASS
total/synth/EQ/b1 9.11 9.13 +0.3% PASS
total/synth/GAS/a0 3.63 3.66 +0.8% PASS
total/synth/GAS/a1 9.36 9.27 -1.0% PASS
total/synth/GT/b0 9.39 9.42 +0.3% PASS
total/synth/GT/b1 9.40 9.15 -2.6% PASS
total/synth/ISZERO/u0 14.70 14.80 +1.2% PASS
total/synth/JUMPDEST/n0 1.85 1.87 +1.1% PASS
total/synth/LT/b0 9.40 9.50 +1.0% PASS
total/synth/LT/b1 4.91 5.14 +4.7% PASS
total/synth/MSIZE/a0 9.05 9.08 +0.4% PASS
total/synth/MSIZE/a1 9.08 9.16 +0.9% PASS
total/synth/MUL/b0 10.61 10.66 +0.5% PASS
total/synth/MUL/b1 5.41 5.66 +4.5% PASS
total/synth/NOT/u0 8.49 8.08 -4.9% PASS
total/synth/OR/b0 5.92 5.73 -3.2% PASS
total/synth/OR/b1 3.26 3.46 +6.4% PASS
total/synth/PC/a0 7.66 7.93 +3.4% PASS
total/synth/PC/a1 3.40 3.41 +0.3% PASS
total/synth/PUSH1/p0 2.57 2.62 +1.8% PASS
total/synth/PUSH1/p1 1.45 1.51 +4.6% PASS
total/synth/PUSH10/p0 2.63 2.64 +0.4% PASS
total/synth/PUSH10/p1 1.51 1.56 +3.2% PASS
total/synth/PUSH11/p0 2.63 2.56 -2.6% PASS
total/synth/PUSH11/p1 2.59 2.57 -0.6% PASS
total/synth/PUSH12/p0 1.54 1.35 -11.9% PASS
total/synth/PUSH12/p1 2.45 2.63 +7.7% PASS
total/synth/PUSH13/p0 2.64 2.38 -9.8% PASS
total/synth/PUSH13/p1 1.47 1.57 +6.4% PASS
total/synth/PUSH14/p0 2.60 2.57 -1.1% PASS
total/synth/PUSH14/p1 2.60 2.63 +1.4% PASS
total/synth/PUSH15/p0 1.54 1.36 -11.5% PASS
total/synth/PUSH15/p1 2.65 2.58 -2.8% PASS
total/synth/PUSH16/p0 2.62 2.63 +0.3% PASS
total/synth/PUSH16/p1 1.52 1.55 +2.1% PASS
total/synth/PUSH17/p0 2.54 2.53 -0.2% PASS
total/synth/PUSH17/p1 2.57 2.46 -4.3% PASS
total/synth/PUSH18/p0 1.54 1.37 -11.0% PASS
total/synth/PUSH18/p1 2.64 2.48 -6.1% PASS
total/synth/PUSH19/p0 2.60 2.63 +1.1% PASS
total/synth/PUSH19/p1 1.51 1.57 +3.8% PASS
total/synth/PUSH2/p0 2.62 2.63 +0.5% PASS
total/synth/PUSH2/p1 2.63 2.68 +1.7% PASS
total/synth/PUSH20/p0 2.62 2.62 -0.0% PASS
total/synth/PUSH20/p1 2.64 2.65 +0.3% PASS
total/synth/PUSH21/p0 1.55 1.40 -9.7% PASS
total/synth/PUSH21/p1 2.64 2.66 +1.0% PASS
total/synth/PUSH22/p0 2.36 2.52 +6.5% PASS
total/synth/PUSH22/p1 1.52 1.57 +3.2% PASS
total/synth/PUSH23/p0 2.57 2.64 +2.6% PASS
total/synth/PUSH23/p1 2.48 2.67 +7.8% PASS
total/synth/PUSH24/p0 1.55 1.39 -10.1% PASS
total/synth/PUSH24/p1 2.64 2.67 +1.1% PASS
total/synth/PUSH25/p0 2.63 2.62 -0.5% PASS
total/synth/PUSH25/p1 1.52 1.57 +3.3% PASS
total/synth/PUSH26/p0 2.56 2.63 +2.9% PASS
total/synth/PUSH26/p1 2.64 2.65 +0.3% PASS
total/synth/PUSH27/p0 1.55 1.40 -9.5% PASS
total/synth/PUSH27/p1 2.46 2.67 +8.4% PASS
total/synth/PUSH28/p0 2.62 2.64 +0.7% PASS
total/synth/PUSH28/p1 1.50 1.58 +5.2% PASS
total/synth/PUSH29/p0 2.53 2.64 +4.1% PASS
total/synth/PUSH29/p1 2.66 2.67 +0.8% PASS
total/synth/PUSH3/p0 1.54 1.33 -13.6% PASS
total/synth/PUSH3/p1 2.40 2.64 +10.0% PASS
total/synth/PUSH30/p0 1.55 1.42 -8.5% PASS
total/synth/PUSH30/p1 2.53 2.66 +5.0% PASS
total/synth/PUSH31/p0 2.51 2.61 +3.9% PASS
total/synth/PUSH31/p1 1.53 1.90 +24.3% PASS
total/synth/PUSH32/p0 2.47 2.57 +4.4% PASS
total/synth/PUSH32/p1 2.61 2.61 -0.0% PASS
total/synth/PUSH4/p0 2.49 2.48 -0.4% PASS
total/synth/PUSH4/p1 1.47 1.57 +6.7% PASS
total/synth/PUSH5/p0 2.46 2.61 +6.2% PASS
total/synth/PUSH5/p1 2.63 2.63 +0.1% PASS
total/synth/PUSH6/p0 1.53 1.34 -12.8% PASS
total/synth/PUSH6/p1 2.46 2.65 +8.0% PASS
total/synth/PUSH7/p0 2.64 2.61 -1.0% PASS
total/synth/PUSH7/p1 1.49 1.54 +3.3% PASS
total/synth/PUSH8/p0 2.62 2.62 +0.3% PASS
total/synth/PUSH8/p1 2.63 2.66 +1.0% PASS
total/synth/PUSH9/p0 1.54 1.36 -11.4% PASS
total/synth/PUSH9/p1 2.61 2.61 -0.2% PASS
total/synth/RETURNDATASIZE/a0 3.78 3.70 -2.1% PASS
total/synth/RETURNDATASIZE/a1 8.51 8.56 +0.6% PASS
total/synth/SAR/b0 3.95 3.90 -1.2% PASS
total/synth/SAR/b1 9.57 9.59 +0.2% PASS
total/synth/SGT/b0 7.99 8.13 +1.8% PASS
total/synth/SGT/b1 3.65 3.81 +4.3% PASS
total/synth/SHL/b0 8.05 8.01 -0.5% PASS
total/synth/SHL/b1 3.65 3.77 +3.5% PASS
total/synth/SHR/b0 7.91 7.58 -4.2% PASS
total/synth/SHR/b1 7.07 7.13 +0.9% PASS
total/synth/SIGNEXTEND/b0 3.25 3.15 -3.0% PASS
total/synth/SIGNEXTEND/b1 7.18 6.98 -2.8% PASS
total/synth/SLT/b0 3.27 3.29 +0.5% PASS
total/synth/SLT/b1 7.39 7.97 +7.8% PASS
total/synth/SUB/b0 6.48 6.45 -0.4% PASS
total/synth/SUB/b1 6.39 6.36 -0.5% PASS
total/synth/SWAP1/s0 2.15 2.13 -0.7% PASS
total/synth/SWAP10/s0 2.17 2.15 -0.8% PASS
total/synth/SWAP11/s0 4.04 4.03 -0.2% PASS
total/synth/SWAP12/s0 3.98 3.47 -12.6% PASS
total/synth/SWAP13/s0 2.16 2.15 -0.3% PASS
total/synth/SWAP14/s0 4.00 3.98 -0.4% PASS
total/synth/SWAP15/s0 4.05 4.06 +0.3% PASS
total/synth/SWAP16/s0 2.19 2.18 -0.4% PASS
total/synth/SWAP2/s0 3.99 4.01 +0.5% PASS
total/synth/SWAP3/s0 4.00 4.02 +0.6% PASS
total/synth/SWAP4/s0 2.14 2.14 -0.3% PASS
total/synth/SWAP5/s0 3.94 4.01 +2.0% PASS
total/synth/SWAP6/s0 3.99 3.98 -0.1% PASS
total/synth/SWAP7/s0 2.16 2.14 -0.9% PASS
total/synth/SWAP8/s0 4.01 3.92 -2.2% PASS
total/synth/SWAP9/s0 4.02 4.02 -0.1% PASS
total/synth/XOR/b0 5.87 5.88 +0.1% PASS
total/synth/XOR/b1 5.82 5.84 +0.2% PASS
total/synth/loop_v1 12.54 12.97 +3.4% PASS
total/synth/loop_v2 12.50 13.58 +8.7% 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.43 1.59 +11.4% PASS
total/main/blake2b_huff/empty 0.02 0.03 +9.4% PASS
total/main/blake2b_shifts/8415nulls 4.90 20.25 +312.9% PASS
total/main/sha1_divs/5311 1.00 12.21 +1116.4% PASS
total/main/sha1_divs/empty 0.01 0.14 +870.8% PASS
total/main/sha1_shifts/5311 0.97 8.49 +772.8% PASS
total/main/sha1_shifts/empty 0.01 0.08 +798.9% PASS
total/main/snailtracer/benchmark 48.38 105.03 +117.1% REGRESSED
total/main/structarray_alloc/nfts_rank 0.30 1.49 +402.1% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.01 +97.1% PASS
total/main/swap_math/received 0.01 0.01 +111.3% PASS
total/main/swap_math/spent 0.00 0.01 +129.7% PASS
total/main/weierstrudel/1 0.33 0.39 +20.2% PASS
total/main/weierstrudel/15 3.02 4.45 +47.1% PASS
total/micro/JUMPDEST_n0/empty 0.00 0.00 +14.8% PASS
total/micro/jump_around/empty 0.05 0.11 +138.4% PASS
total/micro/loop_with_many_jumpdests/empty 0.01 0.01 +6.9% PASS
total/micro/memory_grow_mload/by1 0.02 0.01 -38.5% PASS
total/micro/memory_grow_mload/by16 0.01 0.01 -9.6% PASS
total/micro/memory_grow_mload/by32 0.01 0.01 -32.3% PASS
total/micro/memory_grow_mload/nogrow 0.01 0.01 -36.5% PASS
total/micro/memory_grow_mstore/by1 0.02 0.01 -10.9% PASS
total/micro/memory_grow_mstore/by16 0.01 0.01 -15.7% PASS
total/micro/memory_grow_mstore/by32 0.02 0.02 -28.0% PASS
total/micro/memory_grow_mstore/nogrow 0.02 0.01 -13.5% PASS
total/micro/signextend/one 0.08 0.09 +2.9% PASS
total/micro/signextend/zero 0.18 0.18 +2.3% PASS
total/synth/ADD/b0 0.00 0.00 +30.4% PASS
total/synth/ADD/b1 0.00 0.00 +32.4% PASS
total/synth/ADDRESS/a0 0.20 0.21 +8.3% PASS
total/synth/ADDRESS/a1 0.15 0.15 +0.5% PASS
total/synth/AND/b0 0.00 0.00 +35.3% PASS
total/synth/AND/b1 0.00 0.00 +42.8% PASS
total/synth/BYTE/b0 0.00 0.00 +31.4% PASS
total/synth/BYTE/b1 0.00 0.00 +39.8% PASS
total/synth/CALLDATASIZE/a0 0.10 0.10 -0.2% PASS
total/synth/CALLDATASIZE/a1 0.07 0.07 +1.4% PASS
total/synth/CALLER/a0 0.30 0.25 -17.8% PASS
total/synth/CALLER/a1 0.24 0.24 +0.4% PASS
total/synth/CALLVALUE/a0 0.19 0.19 +0.1% PASS
total/synth/CALLVALUE/a1 0.26 0.26 +1.1% PASS
total/synth/CODESIZE/a0 0.11 0.11 +0.0% PASS
total/synth/CODESIZE/a1 0.11 0.11 +5.5% PASS
total/synth/DUP1/d0 0.00 0.00 +37.4% PASS
total/synth/DUP1/d1 0.00 0.00 +41.7% PASS
total/synth/DUP10/d0 0.00 0.00 +35.2% PASS
total/synth/DUP10/d1 0.00 0.00 +33.6% PASS
total/synth/DUP11/d0 0.00 0.00 +39.3% PASS
total/synth/DUP11/d1 0.00 0.00 +34.5% PASS
total/synth/DUP12/d0 0.00 0.00 +39.0% PASS
total/synth/DUP12/d1 0.00 0.00 +37.0% PASS
total/synth/DUP13/d0 0.00 0.00 +36.1% PASS
total/synth/DUP13/d1 0.00 0.00 +36.8% PASS
total/synth/DUP14/d0 0.00 0.00 +37.4% PASS
total/synth/DUP14/d1 0.00 0.00 +26.8% PASS
total/synth/DUP15/d0 0.00 0.00 +31.6% PASS
total/synth/DUP15/d1 0.00 0.00 +34.4% PASS
total/synth/DUP16/d0 0.00 0.00 +35.9% PASS
total/synth/DUP16/d1 0.00 0.00 +34.0% PASS
total/synth/DUP2/d0 0.00 0.00 +36.1% PASS
total/synth/DUP2/d1 0.00 0.00 +36.5% PASS
total/synth/DUP3/d0 0.00 0.00 +34.3% PASS
total/synth/DUP3/d1 0.00 0.00 +35.4% PASS
total/synth/DUP4/d0 0.00 0.00 +45.3% PASS
total/synth/DUP4/d1 0.00 0.00 +51.6% PASS
total/synth/DUP5/d0 0.00 0.00 +38.9% PASS
total/synth/DUP5/d1 0.00 0.00 +39.1% PASS
total/synth/DUP6/d0 0.00 0.00 +23.4% PASS
total/synth/DUP6/d1 0.00 0.00 +34.6% PASS
total/synth/DUP7/d0 0.00 0.00 +34.1% PASS
total/synth/DUP7/d1 0.00 0.00 +32.9% PASS
total/synth/DUP8/d0 0.00 0.00 +34.9% PASS
total/synth/DUP8/d1 0.00 0.00 +33.0% PASS
total/synth/DUP9/d0 0.00 0.00 +34.8% PASS
total/synth/DUP9/d1 0.00 0.00 +34.1% PASS
total/synth/EQ/b0 0.00 0.00 +35.1% PASS
total/synth/EQ/b1 0.00 0.00 +44.3% PASS
total/synth/GAS/a0 0.86 3.92 +353.9% PASS
total/synth/GAS/a1 1.02 6.72 +556.4% PASS
total/synth/GT/b0 0.00 0.00 +34.9% PASS
total/synth/GT/b1 0.00 0.00 +36.2% PASS
total/synth/ISZERO/u0 0.00 0.00 +34.4% PASS
total/synth/JUMPDEST/n0 0.00 0.00 +15.2% PASS
total/synth/LT/b0 0.00 0.00 +35.3% PASS
total/synth/LT/b1 0.00 0.00 +32.1% PASS
total/synth/MSIZE/a0 0.00 0.00 +29.4% PASS
total/synth/MSIZE/a1 0.00 0.00 +36.0% PASS
total/synth/MUL/b0 0.00 0.00 +37.1% PASS
total/synth/MUL/b1 0.00 0.00 +39.1% PASS
total/synth/NOT/u0 0.00 0.00 +43.4% PASS
total/synth/OR/b0 0.00 0.00 +28.2% PASS
total/synth/OR/b1 0.00 0.00 +38.8% PASS
total/synth/PC/a0 0.00 0.00 +33.8% PASS
total/synth/PC/a1 0.00 0.00 +35.0% PASS
total/synth/PUSH1/p0 0.00 0.00 +35.3% PASS
total/synth/PUSH1/p1 0.00 0.00 +34.7% PASS
total/synth/PUSH10/p0 0.00 0.00 +33.1% PASS
total/synth/PUSH10/p1 0.00 0.00 +31.2% PASS
total/synth/PUSH11/p0 0.00 0.00 +33.4% PASS
total/synth/PUSH11/p1 0.00 0.00 +27.8% PASS
total/synth/PUSH12/p0 0.00 0.00 +28.2% PASS
total/synth/PUSH12/p1 0.00 0.00 +33.8% PASS
total/synth/PUSH13/p0 0.00 0.00 +26.6% PASS
total/synth/PUSH13/p1 0.00 0.00 +28.9% PASS
total/synth/PUSH14/p0 0.00 0.00 +31.4% PASS
total/synth/PUSH14/p1 0.00 0.00 +30.4% PASS
total/synth/PUSH15/p0 0.00 0.00 +26.4% PASS
total/synth/PUSH15/p1 0.00 0.00 +27.8% PASS
total/synth/PUSH16/p0 0.00 0.00 +26.5% PASS
total/synth/PUSH16/p1 0.00 0.00 +28.4% PASS
total/synth/PUSH17/p0 0.00 0.00 +29.3% PASS
total/synth/PUSH17/p1 0.00 0.00 +24.2% PASS
total/synth/PUSH18/p0 0.00 0.00 +26.9% PASS
total/synth/PUSH18/p1 0.00 0.00 +24.3% PASS
total/synth/PUSH19/p0 0.00 0.00 +32.3% PASS
total/synth/PUSH19/p1 0.00 0.00 +23.8% PASS
total/synth/PUSH2/p0 0.00 0.00 +26.4% PASS
total/synth/PUSH2/p1 0.00 0.00 +24.4% PASS
total/synth/PUSH20/p0 0.00 0.00 +27.4% PASS
total/synth/PUSH20/p1 0.00 0.00 +19.1% PASS
total/synth/PUSH21/p0 0.00 0.00 +25.9% PASS
total/synth/PUSH21/p1 0.00 0.00 +29.3% PASS
total/synth/PUSH22/p0 2.29 2.25 -1.4% PASS
total/synth/PUSH22/p1 1.80 2.18 +21.2% PASS
total/synth/PUSH23/p0 2.18 2.17 -0.4% PASS
total/synth/PUSH23/p1 2.33 2.55 +9.4% PASS
total/synth/PUSH24/p0 1.55 1.53 -1.1% PASS
total/synth/PUSH24/p1 2.33 2.53 +8.4% PASS
total/synth/PUSH25/p0 2.17 2.37 +9.2% PASS
total/synth/PUSH25/p1 1.83 1.93 +5.5% PASS
total/synth/PUSH26/p0 2.17 2.39 +10.3% PASS
total/synth/PUSH26/p1 2.31 2.49 +7.8% PASS
total/synth/PUSH27/p0 1.52 1.53 +0.5% PASS
total/synth/PUSH27/p1 2.30 2.62 +14.0% PASS
total/synth/PUSH28/p0 2.26 2.18 -3.7% PASS
total/synth/PUSH28/p1 1.83 1.91 +4.5% PASS
total/synth/PUSH29/p0 2.17 2.19 +1.0% PASS
total/synth/PUSH29/p1 2.42 2.62 +8.2% PASS
total/synth/PUSH3/p0 0.00 0.00 +36.9% PASS
total/synth/PUSH3/p1 0.00 0.00 +36.4% PASS
total/synth/PUSH30/p0 1.62 1.54 -5.0% PASS
total/synth/PUSH30/p1 2.32 2.49 +7.5% PASS
total/synth/PUSH31/p0 2.21 2.19 -1.1% PASS
total/synth/PUSH31/p1 1.83 2.02 +10.1% PASS
total/synth/PUSH32/p0 2.18 2.15 -1.4% PASS
total/synth/PUSH32/p1 2.33 2.50 +7.6% PASS
total/synth/PUSH4/p0 0.00 0.00 +27.0% PASS
total/synth/PUSH4/p1 0.00 0.00 +35.9% PASS
total/synth/PUSH5/p0 0.00 0.00 +47.1% PASS
total/synth/PUSH5/p1 0.00 0.00 +35.1% PASS
total/synth/PUSH6/p0 0.00 0.00 +37.5% PASS
total/synth/PUSH6/p1 0.00 0.00 +38.1% PASS
total/synth/PUSH7/p0 0.00 0.00 +30.8% PASS
total/synth/PUSH7/p1 0.00 0.00 +34.1% PASS
total/synth/PUSH8/p0 0.00 0.00 +39.2% PASS
total/synth/PUSH8/p1 0.00 0.00 +37.4% PASS
total/synth/PUSH9/p0 0.00 0.00 +33.1% PASS
total/synth/PUSH9/p1 0.00 0.00 +34.0% PASS
total/synth/RETURNDATASIZE/a0 0.03 0.03 +1.5% PASS
total/synth/RETURNDATASIZE/a1 0.05 0.05 +3.4% PASS
total/synth/SAR/b0 0.00 0.00 +36.1% PASS
total/synth/SAR/b1 0.00 0.00 +33.5% PASS
total/synth/SGT/b0 0.00 0.00 +35.7% PASS
total/synth/SGT/b1 0.00 0.00 +34.4% PASS
total/synth/SHL/b0 0.00 0.00 +36.8% PASS
total/synth/SHL/b1 0.00 0.00 +37.5% PASS
total/synth/SHR/b0 0.00 0.00 +37.0% PASS
total/synth/SHR/b1 0.00 0.00 +24.3% PASS
total/synth/SIGNEXTEND/b0 0.00 0.00 +39.1% PASS
total/synth/SIGNEXTEND/b1 0.00 0.00 +37.1% PASS
total/synth/SLT/b0 0.00 0.00 +38.3% PASS
total/synth/SLT/b1 0.00 0.00 +40.4% PASS
total/synth/SUB/b0 0.00 0.00 +35.6% PASS
total/synth/SUB/b1 0.00 0.00 +35.8% PASS
total/synth/SWAP1/s0 0.00 0.00 +38.3% PASS
total/synth/SWAP10/s0 0.00 0.00 +36.9% PASS
total/synth/SWAP11/s0 0.00 0.00 +35.0% PASS
total/synth/SWAP12/s0 0.00 0.00 +38.9% PASS
total/synth/SWAP13/s0 0.00 0.00 +37.0% PASS
total/synth/SWAP14/s0 0.00 0.00 +35.8% PASS
total/synth/SWAP15/s0 0.00 0.00 +31.8% PASS
total/synth/SWAP16/s0 0.00 0.00 +34.1% PASS
total/synth/SWAP2/s0 0.00 0.00 +37.8% PASS
total/synth/SWAP3/s0 0.00 0.00 +28.4% PASS
total/synth/SWAP4/s0 0.00 0.00 +37.7% PASS
total/synth/SWAP5/s0 0.00 0.00 +19.7% PASS
total/synth/SWAP6/s0 0.00 0.00 +41.9% PASS
total/synth/SWAP7/s0 0.00 0.00 +38.0% PASS
total/synth/SWAP8/s0 0.00 0.00 +33.2% PASS
total/synth/SWAP9/s0 0.00 0.00 +63.6% PASS
total/synth/XOR/b0 0.00 0.00 +34.8% PASS
total/synth/XOR/b1 0.00 0.00 +32.9% PASS
total/synth/loop_v1 2.77 3.85 +38.9% PASS
total/synth/loop_v2 2.72 3.69 +35.9% PASS

Summary: 194 benchmarks, 1 regressions


ZR74 and others added 12 commits May 15, 2026 15:46
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
(cherry picked from commit 8e57176)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
(cherry picked from commit 7a4d2a5)
Keep hidden live-in prefixes from being rematerialized twice, tighten dynamic jump predecessor mapping, and anchor non-lifted entry values so deep stack slots stay aligned across loop iterations.

This fixes the legacy CALL repro path that was drifting jump targets and surfacing bad-jump or gas mismatches in multipass JIT.
Run analyzer-based fallback checks for EVM modules in every multipass load path and retry compilation failures in interpreter mode for dtvmapi and recursive test-host submodules.

This makes the legacy CALL repro fixtures pass consistently even when a nested bytecode fragment still trips MIR verification during JIT compilation.
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.

4 participants