Skip to content

perf(compiler): check for high-cost intervals before building JoinVals - #617

Closed
abmcar wants to merge 1 commit into
DTVMStack:mainfrom
abmcar:perf/coalescer-early-high-cost-exit
Closed

abmcar wants to merge 1 commit into
DTVMStack:mainfrom
abmcar:perf/coalescer-early-high-cost-exit

Conversation

@abmcar

@abmcar abmcar commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

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):

CgRegisterCoalescer::joinVirtRegs in src/compiler/cgir/pass/register_coalescer.cpp.

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

joinVirtRegs builds its two JoinVals objects and only then asks isHighCostLiveInterval whether to give up on the pair. Each JoinVals constructor sizes two arrays by the number of values in its interval, so an attempt that is abandoned anyway pays O(#values) to set up state it never reads. EVM functions keep the stack size and the stack top in variables whose intervals hold thousands of values, and once such an interval has used up its attempt budget, every further copy that involves it takes this path. The order is inherited from LLVM's RegisterCoalescer::joinVirtRegs.

This PR moves the check in front of the two constructors (4 lines moved, one comment added). The check reads and updates only the per-interval attempt counter, and the constructors only initialise members, so the coalescer makes the same decisions in the same order and the generated code does not change.

Measured on main at e839f6b, Release build, multipass JIT with synchronous compilation and gas metering, revision Cancun. The contracts are the 50 slowest to compile out of 338 mainnet contracts:

50 slowest-to-compile contracts before after change
Instructions executed, whole process (Callgrind) 1,111.5 G 1,092.5 G −1.71%
Compile wall time, sum of per-contract medians of 3 runs 151.3 s 149.4 s −1.28%

Per contract, the instruction count falls by 0.66% to 8.67% (median 1.69%); it rises for none. The three wall-time repetitions give −0.99%, −1.25% and −1.32%; 12 of the 50 contracts are more than 2% faster and none is more than 2% slower. The saving is modest, and it comes with no change in output.

No change document: the PR changes no capability, contract or compilation decision.

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

No new test: the change has no observable effect other than compile time. Checked on this branch:

  • Equivalence: the JIT code bytes of each of the 338 contracts are identical with the old and the new order (338 of 338). Both orders ran in one binary, selected by a temporary environment switch, with address-space randomisation off, so that absolute helper addresses in the code match.
  • ctest in a Release multipass build with DTVM_TEST_REVISION=Cancun: 14/14 with default arguments, and 14/14 with SPEC_TESTS_ARGS set as in the CI multipass job. This includes evmJitFrontendTests (182 cases), evmDifferentialTests (79), evmInterpTests (275) and mirPeepholeTests (17).
  • tools/run_evm_tests.py -r build/dtvm --format evm: 209/209 with -m multipass --enable-evm-gas, and 209/209 with -m interpreter.
  • clang-format 15.0.7 with --dry-run -Werror on the changed file, and git diff --check.

Benchmark method: a temporary gtest case, not part of this PR, loads one contract per process in multipass mode with DisableMultipassMultithread, and prints the size and a hash of the JIT code and the load time. Wall time was taken on one pinned performance core, with the two orders alternating within each repetition.

6. Release note

Reduce multipass JIT compile time for functions with very large live intervals by checking the coalescer's high-cost limit before building its join state.

🤖 Generated with Claude Code

joinVirtRegs built its two JoinVals objects and only then asked
isHighCostLiveInterval whether to give up on the pair. Each JoinVals
constructor sizes two arrays by the number of values in its interval, so an
attempt that was abandoned anyway paid O(#values) to set up state it never
read. EVM functions keep the stack size and the stack top in variables whose
intervals hold thousands of values, and once such an interval has used up
its attempt budget every further copy that involves it takes this path.

Run the check first. It reads and updates only the per-interval attempt
counter, and the JoinVals constructors have no side effects, so the
coalescer makes the same decisions in the same order.

On main at e839f6b the JIT code of 338 mainnet contracts is byte-identical
with and without the change. For the 50 slowest-to-compile of them the
instructions executed during a synchronous compile fall by 1.7% in total
(0.7% to 8.7% per contract, Callgrind) and the compile wall time by 1.3%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 9, 2026 09:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

⚡ 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 2.05 2.08 +1.4% PASS
total/main/blake2b_huff/empty 0.03 0.03 +2.8% PASS
total/main/blake2b_shifts/8415nulls 11.20 11.16 -0.3% PASS
total/main/sha1_divs/5311 6.40 6.69 +4.6% PASS
total/main/sha1_divs/empty 0.08 0.08 +1.5% PASS
total/main/sha1_shifts/5311 4.41 4.30 -2.5% PASS
total/main/sha1_shifts/empty 0.04 0.03 -5.5% PASS
total/main/snailtracer/benchmark 69.93 71.69 +2.5% PASS
total/main/structarray_alloc/nfts_rank 0.94 0.94 -0.1% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 -2.6% PASS
total/main/swap_math/received 0.01 0.01 -1.1% PASS
total/main/swap_math/spent 0.01 0.01 +5.1% PASS
total/main/weierstrudel/1 0.26 0.26 -0.0% PASS
total/main/weierstrudel/15 2.97 2.89 -2.4% PASS
total/micro/JUMPDEST_n0/empty 2.33 2.34 +0.1% PASS
total/micro/jump_around/empty 0.08 0.08 -6.1% PASS
total/micro/loop_with_many_jumpdests/empty 52.33 52.18 -0.3% PASS
total/micro/memory_grow_mload/by1 0.14 0.13 -3.5% PASS
total/micro/memory_grow_mload/by16 0.16 0.16 -2.0% PASS
total/micro/memory_grow_mload/by32 0.09 0.09 -0.8% PASS
total/micro/memory_grow_mload/nogrow 0.07 0.07 -2.5% PASS
total/micro/memory_grow_mstore/by1 0.15 0.15 +0.2% PASS
total/micro/memory_grow_mstore/by16 0.09 0.09 -0.3% PASS
total/micro/memory_grow_mstore/by32 0.19 0.19 +1.4% PASS
total/micro/memory_grow_mstore/nogrow 0.15 0.14 -6.8% PASS
total/micro/signextend/one 0.20 0.20 -1.9% PASS
total/micro/signextend/zero 0.39 0.35 -11.5% PASS
total/synth/ADD/b0 1.75 1.75 +0.0% PASS
total/synth/ADD/b1 2.19 2.22 +1.4% PASS
total/synth/ADDRESS/a0 5.09 5.08 -0.3% PASS
total/synth/ADDRESS/a1 4.56 4.73 +3.8% PASS
total/synth/AND/b0 1.43 1.43 +0.1% PASS
total/synth/AND/b1 1.75 1.84 +5.2% PASS
total/synth/BYTE/b0 5.35 5.35 +0.0% PASS
total/synth/BYTE/b1 7.01 6.74 -3.8% PASS
total/synth/CALLDATASIZE/a0 3.86 3.87 +0.2% PASS
total/synth/CALLDATASIZE/a1 3.16 3.11 -1.7% PASS
total/synth/CALLER/a0 5.08 5.15 +1.3% PASS
total/synth/CALLER/a1 5.30 5.38 +1.5% PASS
total/synth/CALLVALUE/a0 3.13 3.08 -1.4% PASS
total/synth/CALLVALUE/a1 4.59 4.54 -1.1% PASS
total/synth/CODESIZE/a0 4.56 4.48 -1.6% PASS
total/synth/CODESIZE/a1 4.71 4.84 +2.9% PASS
total/synth/DUP1/d0 1.39 1.42 +2.5% PASS
total/synth/DUP1/d1 1.45 1.27 -12.6% PASS
total/synth/DUP10/d0 1.33 1.44 +8.8% PASS
total/synth/DUP10/d1 1.30 1.60 +22.7% PASS
total/synth/DUP11/d0 0.86 1.07 +24.5% PASS
total/synth/DUP11/d1 1.49 1.49 +1.9% PASS
total/synth/DUP12/d0 1.50 1.50 -0.1% PASS
total/synth/DUP12/d1 0.87 0.88 +1.3% PASS
total/synth/DUP13/d0 1.44 1.39 -3.5% PASS
total/synth/DUP13/d1 1.39 1.27 -8.5% PASS
total/synth/DUP14/d0 0.86 1.07 +24.1% PASS
total/synth/DUP14/d1 1.59 1.46 -7.9% PASS
total/synth/DUP15/d0 1.31 1.42 +8.3% PASS
total/synth/DUP15/d1 0.93 0.86 -7.2% PASS
total/synth/DUP16/d0 1.54 1.42 -8.2% PASS
total/synth/DUP16/d1 1.50 1.55 +3.7% PASS
total/synth/DUP2/d0 0.87 1.01 +16.6% PASS
total/synth/DUP2/d1 1.52 1.49 -2.5% PASS
total/synth/DUP3/d0 1.46 1.49 +2.1% PASS
total/synth/DUP3/d1 0.82 0.95 +15.2% PASS
total/synth/DUP4/d0 1.42 1.43 +0.9% PASS
total/synth/DUP4/d1 1.47 1.57 +7.0% PASS
total/synth/DUP5/d0 0.91 1.07 +18.2% PASS
total/synth/DUP5/d1 1.53 1.37 -10.3% PASS
total/synth/DUP6/d0 1.46 1.35 -7.8% PASS
total/synth/DUP6/d1 0.87 0.94 +8.3% PASS
total/synth/DUP7/d0 1.45 1.39 -4.0% PASS
total/synth/DUP7/d1 1.50 1.53 +1.9% PASS
total/synth/DUP8/d0 1.07 1.07 -0.2% PASS
total/synth/DUP8/d1 1.48 1.58 +7.1% PASS
total/synth/DUP9/d0 1.42 1.48 +4.4% PASS
total/synth/DUP9/d1 0.88 0.94 +7.1% PASS
total/synth/EQ/b0 4.16 4.17 +0.3% PASS
total/synth/EQ/b1 4.38 4.32 -1.4% PASS
total/synth/GAS/a0 2.96 3.05 +3.1% PASS
total/synth/GAS/a1 5.37 5.20 -3.0% PASS
total/synth/GT/b0 4.45 4.43 -0.4% PASS
total/synth/GT/b1 4.39 4.32 -1.5% PASS
total/synth/ISZERO/u0 6.48 6.47 -0.1% PASS
total/synth/JUMPDEST/n0 2.35 2.34 -0.1% PASS
total/synth/LT/b0 4.43 4.43 +0.0% PASS
total/synth/LT/b1 3.72 3.70 -0.3% PASS
total/synth/MSIZE/a0 4.57 4.56 -0.1% PASS
total/synth/MSIZE/a1 4.98 4.85 -2.6% PASS
total/synth/MUL/b0 4.94 4.89 -0.9% PASS
total/synth/MUL/b1 4.63 4.62 -0.2% PASS
total/synth/NOT/u0 1.56 1.56 +0.3% PASS
total/synth/OR/b0 1.69 1.62 -3.8% PASS
total/synth/OR/b1 1.38 1.36 -1.3% PASS
total/synth/PC/a0 3.90 3.93 +0.8% PASS
total/synth/PC/a1 3.01 3.10 +3.2% PASS
total/synth/PUSH1/p0 1.57 1.55 -1.0% PASS
total/synth/PUSH1/p1 1.48 1.52 +2.7% PASS
total/synth/PUSH10/p0 1.59 1.58 -1.0% PASS
total/synth/PUSH10/p1 1.52 1.52 -0.6% PASS
total/synth/PUSH11/p0 1.64 1.66 +1.2% PASS
total/synth/PUSH11/p1 1.84 1.73 -5.7% PASS
total/synth/PUSH12/p0 1.13 1.13 +0.1% PASS
total/synth/PUSH12/p1 1.83 1.60 -12.2% PASS
total/synth/PUSH13/p0 1.63 1.55 -4.8% PASS
total/synth/PUSH13/p1 1.60 1.52 -5.1% PASS
total/synth/PUSH14/p0 1.69 1.61 -4.8% PASS
total/synth/PUSH14/p1 1.84 1.66 -10.0% PASS
total/synth/PUSH15/p0 1.13 1.13 +0.1% PASS
total/synth/PUSH15/p1 1.95 1.66 -15.0% PASS
total/synth/PUSH16/p0 1.64 1.58 -3.5% PASS
total/synth/PUSH16/p1 1.32 1.52 +15.6% PASS
total/synth/PUSH17/p0 1.60 1.58 -1.3% PASS
total/synth/PUSH17/p1 1.61 1.65 +2.5% PASS
total/synth/PUSH18/p0 1.13 1.13 -0.3% PASS
total/synth/PUSH18/p1 1.89 1.89 +0.3% PASS
total/synth/PUSH19/p0 1.58 1.59 +0.5% PASS
total/synth/PUSH19/p1 1.52 1.53 +0.5% PASS
total/synth/PUSH2/p0 1.60 1.48 -7.7% PASS
total/synth/PUSH2/p1 1.73 1.75 +1.2% PASS
total/synth/PUSH20/p0 1.61 1.47 -9.1% PASS
total/synth/PUSH20/p1 1.81 1.72 -5.0% PASS
total/synth/PUSH21/p0 1.13 1.13 -0.0% PASS
total/synth/PUSH21/p1 1.83 1.66 -9.2% PASS
total/synth/PUSH22/p0 1.52 1.63 +7.3% PASS
total/synth/PUSH22/p1 1.31 1.45 +10.9% PASS
total/synth/PUSH23/p0 1.63 1.69 +3.8% PASS
total/synth/PUSH23/p1 1.77 2.01 +13.4% PASS
total/synth/PUSH24/p0 1.13 1.13 +0.4% PASS
total/synth/PUSH24/p1 1.86 1.97 +6.1% PASS
total/synth/PUSH25/p0 1.58 1.61 +1.9% PASS
total/synth/PUSH25/p1 1.53 1.31 -14.4% PASS
total/synth/PUSH26/p0 1.85 1.56 -15.6% PASS
total/synth/PUSH26/p1 1.78 1.62 -9.1% PASS
total/synth/PUSH27/p0 1.14 1.14 -0.5% PASS
total/synth/PUSH27/p1 1.65 1.87 +13.2% PASS
total/synth/PUSH28/p0 1.58 1.63 +2.8% PASS
total/synth/PUSH28/p1 1.53 1.53 -0.3% PASS
total/synth/PUSH29/p0 1.54 1.55 +0.7% PASS
total/synth/PUSH29/p1 1.83 1.92 +4.9% PASS
total/synth/PUSH3/p0 1.13 1.14 +0.8% PASS
total/synth/PUSH3/p1 1.86 1.94 +4.0% PASS
total/synth/PUSH30/p0 1.17 1.15 -2.3% PASS
total/synth/PUSH30/p1 1.79 1.59 -11.0% PASS
total/synth/PUSH31/p0 1.61 1.66 +3.3% PASS
total/synth/PUSH31/p1 1.53 1.53 -0.1% PASS
total/synth/PUSH32/p0 1.67 1.53 -8.4% PASS
total/synth/PUSH32/p1 2.00 1.69 -15.0% PASS
total/synth/PUSH4/p0 1.60 1.58 -1.3% PASS
total/synth/PUSH4/p1 1.52 1.52 +0.0% PASS
total/synth/PUSH5/p0 1.64 1.55 -5.3% PASS
total/synth/PUSH5/p1 1.85 1.91 +3.4% PASS
total/synth/PUSH6/p0 1.13 1.13 -0.3% PASS
total/synth/PUSH6/p1 1.58 1.67 +5.9% PASS
total/synth/PUSH7/p0 1.58 1.54 -2.0% PASS
total/synth/PUSH7/p1 1.52 1.52 -0.1% PASS
total/synth/PUSH8/p0 1.60 1.57 -2.0% PASS
total/synth/PUSH8/p1 1.67 1.64 -1.5% PASS
total/synth/PUSH9/p0 1.13 1.13 -0.0% PASS
total/synth/PUSH9/p1 1.69 1.64 -2.7% PASS
total/synth/RETURNDATASIZE/a0 2.86 2.86 -0.1% PASS
total/synth/RETURNDATASIZE/a1 4.55 4.59 +0.7% PASS
total/synth/SAR/b0 3.38 3.37 -0.2% PASS
total/synth/SAR/b1 5.68 5.81 +2.2% PASS
total/synth/SGT/b0 3.30 3.31 +0.1% PASS
total/synth/SGT/b1 2.84 2.82 -0.6% PASS
total/synth/SHL/b0 3.19 3.27 +2.5% PASS
total/synth/SHL/b1 1.41 1.40 -0.5% PASS
total/synth/SHR/b0 3.05 3.01 -1.5% PASS
total/synth/SHR/b1 2.54 2.42 -4.7% PASS
total/synth/SIGNEXTEND/b0 3.01 2.81 -6.6% PASS
total/synth/SIGNEXTEND/b1 4.60 4.77 +3.8% PASS
total/synth/SLT/b0 3.06 3.06 +0.0% PASS
total/synth/SLT/b1 3.27 3.30 +1.1% PASS
total/synth/SUB/b0 2.13 2.10 -1.1% PASS
total/synth/SUB/b1 2.16 2.22 +3.0% PASS
total/synth/SWAP1/s0 1.31 1.30 -0.1% PASS
total/synth/SWAP10/s0 1.31 1.36 +3.4% PASS
total/synth/SWAP11/s0 2.07 2.12 +2.6% PASS
total/synth/SWAP12/s0 1.95 1.89 -3.5% PASS
total/synth/SWAP13/s0 1.32 1.32 +0.1% PASS
total/synth/SWAP14/s0 2.03 2.12 +4.4% PASS
total/synth/SWAP15/s0 2.13 1.97 -7.3% PASS
total/synth/SWAP16/s0 1.32 1.37 +3.3% PASS
total/synth/SWAP2/s0 2.08 2.03 -2.1% PASS
total/synth/SWAP3/s0 2.08 2.05 -1.3% PASS
total/synth/SWAP4/s0 1.31 1.31 +0.0% PASS
total/synth/SWAP5/s0 2.00 1.95 -2.5% PASS
total/synth/SWAP6/s0 2.06 2.04 -1.0% PASS
total/synth/SWAP7/s0 1.32 1.31 -0.3% PASS
total/synth/SWAP8/s0 2.04 1.97 -3.3% PASS
total/synth/SWAP9/s0 1.99 2.00 +0.2% PASS
total/synth/XOR/b0 1.71 1.68 -1.5% PASS
total/synth/XOR/b1 1.68 1.64 -2.7% PASS
total/synth/loop_v1 6.96 7.29 +4.8% PASS
total/synth/loop_v2 7.09 7.12 +0.4% 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 0.88 0.89 +1.2% PASS
total/main/blake2b_huff/empty 0.01 0.01 +2.3% PASS
total/main/blake2b_shifts/8415nulls 3.27 3.26 -0.3% PASS
total/main/sha1_divs/5311 0.65 0.66 +1.9% PASS
total/main/sha1_divs/empty 0.01 0.01 +5.6% PASS
total/main/sha1_shifts/5311 0.56 0.57 +1.4% PASS
total/main/sha1_shifts/empty 0.01 0.00 -2.4% PASS
total/main/snailtracer/benchmark 34.21 34.16 -0.1% PASS
total/main/structarray_alloc/nfts_rank 0.21 0.21 -0.9% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 -0.7% PASS
total/main/swap_math/received 0.00 0.00 -2.1% PASS
total/main/swap_math/spent 0.00 0.00 -0.1% PASS
total/main/weierstrudel/1 0.25 0.26 +1.9% PASS
total/main/weierstrudel/15 3.01 3.13 +3.7% PASS
total/micro/JUMPDEST_n0/empty 0.00 0.00 -3.2% PASS
total/micro/jump_around/empty 0.04 0.04 -1.7% PASS
total/micro/loop_with_many_jumpdests/empty 0.01 0.01 -2.8% PASS
total/micro/memory_grow_mload/by1 0.01 0.01 +5.9% PASS
total/micro/memory_grow_mload/by16 0.01 0.01 +2.2% PASS
total/micro/memory_grow_mload/by32 0.01 0.01 +0.5% PASS
total/micro/memory_grow_mload/nogrow 0.01 0.01 -1.1% PASS
total/micro/memory_grow_mstore/by1 0.01 0.01 -0.3% PASS
total/micro/memory_grow_mstore/by16 0.01 0.01 -1.3% PASS
total/micro/memory_grow_mstore/by32 0.01 0.01 -0.2% PASS
total/micro/memory_grow_mstore/nogrow 0.01 0.01 +2.5% PASS
total/micro/signextend/one 0.01 0.00 -0.8% PASS
total/micro/signextend/zero 0.01 0.01 +0.7% PASS
total/synth/ADD/b0 0.00 0.00 -3.5% PASS
total/synth/ADD/b1 0.00 0.00 -0.7% PASS
total/synth/ADDRESS/a0 0.16 0.15 -6.0% PASS
total/synth/ADDRESS/a1 0.12 0.12 +0.0% PASS
total/synth/AND/b0 0.00 0.00 -3.8% PASS
total/synth/AND/b1 0.00 0.00 +0.5% PASS
total/synth/BYTE/b0 0.00 0.00 -3.9% PASS
total/synth/BYTE/b1 0.00 0.00 +0.8% PASS
total/synth/CALLDATASIZE/a0 0.08 0.10 +22.1% PASS
total/synth/CALLDATASIZE/a1 0.05 0.05 -0.1% PASS
total/synth/CALLER/a0 0.16 0.16 +0.8% PASS
total/synth/CALLER/a1 0.17 0.17 +0.5% PASS
total/synth/CALLVALUE/a0 0.14 0.14 -0.0% PASS
total/synth/CALLVALUE/a1 0.20 0.23 +14.8% PASS
total/synth/CODESIZE/a0 0.08 0.08 -5.7% PASS
total/synth/CODESIZE/a1 0.08 0.08 +8.0% PASS
total/synth/DUP1/d0 0.00 0.00 -0.4% PASS
total/synth/DUP1/d1 0.00 0.00 -0.7% PASS
total/synth/DUP10/d0 0.00 0.00 -0.3% PASS
total/synth/DUP10/d1 0.00 0.00 -1.1% PASS
total/synth/DUP11/d0 0.00 0.00 -3.7% PASS
total/synth/DUP11/d1 0.00 0.00 +0.5% PASS
total/synth/DUP12/d0 0.00 0.00 +1.0% PASS
total/synth/DUP12/d1 0.00 0.00 -3.3% PASS
total/synth/DUP13/d0 0.00 0.00 +0.1% PASS
total/synth/DUP13/d1 0.00 0.00 -0.7% PASS
total/synth/DUP14/d0 0.00 0.00 -0.4% PASS
total/synth/DUP14/d1 0.00 0.00 +1.6% PASS
total/synth/DUP15/d0 0.00 0.00 -4.9% PASS
total/synth/DUP15/d1 0.00 0.00 -2.8% PASS
total/synth/DUP16/d0 0.00 0.00 -1.8% PASS
total/synth/DUP16/d1 0.00 0.00 +0.1% PASS
total/synth/DUP2/d0 0.00 0.00 -3.9% PASS
total/synth/DUP2/d1 0.00 0.00 -1.5% PASS
total/synth/DUP3/d0 0.00 0.00 +1.5% PASS
total/synth/DUP3/d1 0.00 0.00 -3.4% PASS
total/synth/DUP4/d0 0.00 0.00 +0.3% PASS
total/synth/DUP4/d1 0.00 0.00 +0.9% PASS
total/synth/DUP5/d0 0.00 0.00 -2.1% PASS
total/synth/DUP5/d1 0.00 0.00 -0.4% PASS
total/synth/DUP6/d0 0.00 0.00 -0.6% PASS
total/synth/DUP6/d1 0.00 0.00 -3.5% PASS
total/synth/DUP7/d0 0.00 0.00 +0.1% PASS
total/synth/DUP7/d1 0.00 0.00 +0.6% PASS
total/synth/DUP8/d0 0.00 0.00 -2.4% PASS
total/synth/DUP8/d1 0.00 0.00 +1.5% PASS
total/synth/DUP9/d0 0.00 0.00 -0.8% PASS
total/synth/DUP9/d1 0.00 0.00 -2.7% PASS
total/synth/EQ/b0 0.00 0.00 -0.1% PASS
total/synth/EQ/b1 0.00 0.00 +1.1% PASS
total/synth/GAS/a0 0.67 0.67 -0.2% PASS
total/synth/GAS/a1 0.80 0.79 -0.2% PASS
total/synth/GT/b0 0.00 0.00 -1.9% PASS
total/synth/GT/b1 0.00 0.00 -0.7% PASS
total/synth/ISZERO/u0 0.00 0.00 -0.4% PASS
total/synth/JUMPDEST/n0 0.00 0.00 -2.9% PASS
total/synth/LT/b0 0.00 0.00 -0.0% PASS
total/synth/LT/b1 0.00 0.00 -4.4% PASS
total/synth/MSIZE/a0 0.00 0.00 +0.0% PASS
total/synth/MSIZE/a1 0.00 0.00 +0.2% PASS
total/synth/MUL/b0 0.00 0.00 +0.7% PASS
total/synth/MUL/b1 0.00 0.00 -1.6% PASS
total/synth/NOT/u0 0.00 0.00 -0.5% PASS
total/synth/OR/b0 0.00 0.00 +0.7% PASS
total/synth/OR/b1 0.00 0.00 -3.2% PASS
total/synth/PC/a0 0.00 0.00 -1.3% PASS
total/synth/PC/a1 0.00 0.00 -4.4% PASS
total/synth/PUSH1/p0 0.00 0.00 -0.0% PASS
total/synth/PUSH1/p1 0.00 0.00 -3.4% PASS
total/synth/PUSH10/p0 0.00 0.00 -1.2% PASS
total/synth/PUSH10/p1 0.00 0.00 -0.7% PASS
total/synth/PUSH11/p0 0.00 0.00 +2.4% PASS
total/synth/PUSH11/p1 0.00 0.00 -0.1% PASS
total/synth/PUSH12/p0 0.00 0.00 -2.3% PASS
total/synth/PUSH12/p1 0.00 0.00 -0.9% PASS
total/synth/PUSH13/p0 0.00 0.00 -0.3% PASS
total/synth/PUSH13/p1 0.00 0.00 -1.8% PASS
total/synth/PUSH14/p0 0.00 0.00 -0.6% PASS
total/synth/PUSH14/p1 0.00 0.00 +4.0% PASS
total/synth/PUSH15/p0 0.00 0.00 -4.3% PASS
total/synth/PUSH15/p1 0.00 0.00 +0.2% PASS
total/synth/PUSH16/p0 0.00 0.00 -4.3% PASS
total/synth/PUSH16/p1 0.00 0.00 -1.8% PASS
total/synth/PUSH17/p0 0.00 0.00 -3.1% PASS
total/synth/PUSH17/p1 0.00 0.00 -2.4% PASS
total/synth/PUSH18/p0 0.00 0.00 -1.3% PASS
total/synth/PUSH18/p1 0.00 0.00 -4.4% PASS
total/synth/PUSH19/p0 0.00 0.00 +3.0% PASS
total/synth/PUSH19/p1 0.00 0.00 -1.6% PASS
total/synth/PUSH2/p0 0.00 0.00 -1.6% PASS
total/synth/PUSH2/p1 0.00 0.00 -0.6% PASS
total/synth/PUSH20/p0 0.00 0.00 +1.9% PASS
total/synth/PUSH20/p1 0.00 0.00 -3.6% PASS
total/synth/PUSH21/p0 0.00 0.00 -1.7% PASS
total/synth/PUSH21/p1 0.00 0.00 -0.9% PASS
total/synth/PUSH22/p0 1.43 1.44 +0.6% PASS
total/synth/PUSH22/p1 1.31 1.32 +0.5% PASS
total/synth/PUSH23/p0 1.46 1.43 -1.5% PASS
total/synth/PUSH23/p1 1.56 1.47 -5.6% PASS
total/synth/PUSH24/p0 1.14 1.13 -0.8% PASS
total/synth/PUSH24/p1 1.53 1.55 +1.2% PASS
total/synth/PUSH25/p0 1.56 1.47 -5.6% PASS
total/synth/PUSH25/p1 1.31 1.32 +0.3% PASS
total/synth/PUSH26/p0 1.43 1.59 +11.1% PASS
total/synth/PUSH26/p1 1.49 1.58 +6.0% PASS
total/synth/PUSH27/p0 1.14 1.14 -0.4% PASS
total/synth/PUSH27/p1 1.49 1.57 +5.0% PASS
total/synth/PUSH28/p0 1.46 1.42 -2.6% PASS
total/synth/PUSH28/p1 1.31 1.38 +5.2% PASS
total/synth/PUSH29/p0 1.46 1.45 -0.7% PASS
total/synth/PUSH29/p1 1.54 1.55 +0.6% PASS
total/synth/PUSH3/p0 0.00 0.00 -3.9% PASS
total/synth/PUSH3/p1 0.00 0.00 +2.9% PASS
total/synth/PUSH30/p0 1.14 1.15 +0.5% PASS
total/synth/PUSH30/p1 1.48 1.51 +1.9% PASS
total/synth/PUSH31/p0 1.42 1.52 +6.4% PASS
total/synth/PUSH31/p1 1.34 1.33 -0.8% PASS
total/synth/PUSH32/p0 1.54 1.40 -8.8% PASS
total/synth/PUSH32/p1 1.51 1.53 +1.0% PASS
total/synth/PUSH4/p0 0.00 0.00 +0.3% PASS
total/synth/PUSH4/p1 0.00 0.00 -1.6% PASS
total/synth/PUSH5/p0 0.00 0.00 +1.9% PASS
total/synth/PUSH5/p1 0.00 0.00 +3.7% PASS
total/synth/PUSH6/p0 0.00 0.00 -4.6% PASS
total/synth/PUSH6/p1 0.00 0.00 -2.6% PASS
total/synth/PUSH7/p0 0.00 0.00 +2.9% PASS
total/synth/PUSH7/p1 0.00 0.00 -2.7% PASS
total/synth/PUSH8/p0 0.00 0.00 -4.8% PASS
total/synth/PUSH8/p1 0.00 0.00 -0.4% PASS
total/synth/PUSH9/p0 0.00 0.00 +0.7% PASS
total/synth/PUSH9/p1 0.00 0.00 +1.6% PASS
total/synth/RETURNDATASIZE/a0 0.03 0.02 -0.3% PASS
total/synth/RETURNDATASIZE/a1 0.04 0.04 +5.0% PASS
total/synth/SAR/b0 0.00 0.00 -4.3% PASS
total/synth/SAR/b1 0.00 0.00 -0.1% PASS
total/synth/SGT/b0 0.00 0.00 +1.3% PASS
total/synth/SGT/b1 0.00 0.00 -3.8% PASS
total/synth/SHL/b0 0.00 0.00 +0.5% PASS
total/synth/SHL/b1 0.00 0.00 -2.4% PASS
total/synth/SHR/b0 0.00 0.00 -0.2% PASS
total/synth/SHR/b1 0.00 0.00 -1.5% PASS
total/synth/SIGNEXTEND/b0 0.00 0.00 -4.1% PASS
total/synth/SIGNEXTEND/b1 0.00 0.00 -0.1% PASS
total/synth/SLT/b0 0.00 0.00 -4.0% PASS
total/synth/SLT/b1 0.00 0.00 -0.0% PASS
total/synth/SUB/b0 0.00 0.00 -1.0% PASS
total/synth/SUB/b1 0.00 0.00 -1.5% PASS
total/synth/SWAP1/s0 0.00 0.00 -3.2% PASS
total/synth/SWAP10/s0 0.00 0.00 -4.7% PASS
total/synth/SWAP11/s0 0.00 0.00 -1.3% PASS
total/synth/SWAP12/s0 0.00 0.00 +8.4% PASS
total/synth/SWAP13/s0 0.00 0.00 -4.1% PASS
total/synth/SWAP14/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP15/s0 0.00 0.00 -0.1% PASS
total/synth/SWAP16/s0 0.00 0.00 -2.0% PASS
total/synth/SWAP2/s0 0.00 0.00 +0.3% PASS
total/synth/SWAP3/s0 0.00 0.00 +0.1% PASS
total/synth/SWAP4/s0 0.00 0.00 -2.5% PASS
total/synth/SWAP5/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP6/s0 0.00 0.00 -0.6% PASS
total/synth/SWAP7/s0 0.00 0.00 -3.5% PASS
total/synth/SWAP8/s0 0.00 0.00 +0.5% PASS
total/synth/SWAP9/s0 0.00 0.00 +1.7% PASS
total/synth/XOR/b0 0.00 0.00 -0.1% PASS
total/synth/XOR/b1 0.00 0.00 -0.0% PASS
total/synth/loop_v1 6.43 6.49 +0.9% PASS
total/synth/loop_v2 6.03 6.42 +6.5% PASS

Summary: 194 benchmarks, 0 regressions


@abmcar

abmcar commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

Folded into #620 as its first commit.

@abmcar abmcar closed this Oct 11, 2026
@abmcar
abmcar deleted the perf/coalescer-early-high-cost-exit branch October 11, 2026 07:06
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.

2 participants