Skip to content

ci: cache FetchContent deps + boost mirror swap#508

Merged
zoowii merged 3 commits into
DTVMStack:mainfrom
abmcar:ci/fetchcontent-cache
May 15, 2026
Merged

ci: cache FetchContent deps + boost mirror swap#508
zoowii merged 3 commits into
DTVMStack:mainfrom
abmcar:ci/fetchcontent-cache

Conversation

@abmcar
Copy link
Copy Markdown
Contributor

@abmcar abmcar commented May 15, 2026

Summary

  • Cache the 8 FetchContent deps (spdlog/asmjit/CLI11/intx/boost/rapidjson + conditional googletest/yaml-cpp) across CI runs via actions/cache@v4, keyed on hashFiles('third_party/AddDeps.cmake'). First run: full download + save (~820MB). Subsequent runs with unchanged deps: zero downloads.
  • Swap boost URL from sourceforge (recurring 504 source — e.g., PR perf(compiler): thread ValueRange through OR/XOR/SHR_U + narrow U64/U128 compare paths #499 run 25897803413 died on a FetchContent download) to the official archives.boost.io archive. URL_HASH unchanged so byte-identity preserved.
  • Add an FETCHCONTENT_BASE_DIR env hook in top-level CMakeLists.txt so the workflow-level env (/github/home/.fetchcontent) flows through .ci/run_test_suite.sh to cmake -S . without touching the script.
  • Document the local convention (export FETCHCONTENT_BASE_DIR=~/.cache/cmake-fetchcontent) in docs/start.md.

Cache key uses ${{ github.workflow }} so EVM and WASM caches are independent — EVM runs SINGLEPASS_JIT=OFF (no asmjit), WASM runs SINGLEPASS_JIT=ON (needs asmjit). Sharing one key would cause WASM to re-download asmjit every run because actions/cache@v4 skips same-key saves.

No restore-keys — partial cache hits across different dep versions can silently yield stale source. Cold start (cache miss) is the lesser evil.

Coverage: 14 container jobs total (10 EVM + 4 WASM), all using dtvmdev1/dtvm-dev-x64:main. Non-container jobs (perf_pr_comment, commit-lint, image-release) don't run cmake and are not modified.

Stale image / image churn note: if dtvmdev1/dtvm-dev-x64:main is rebuilt with materially different CMake/compiler/Ninja, manually bump the v1 namespace in the cache key (becomes v2, etc.). The mutable :main tag does not auto-invalidate the cache. Documented in the change-doc.

Design details and risk discussion: docs/changes/2026-05-15-fetchcontent-cache/README.md.

Test plan

  • tools/format.sh check pass.
  • YAML lint (python -c "import yaml; yaml.safe_load(...)") pass on both workflows.
  • Cache step count: 10 (EVM) + 4 (WASM) = 14.
  • Local end-to-end build with new boost URL + env hook: full libdtvmapi.so build succeeds (127/127 compile targets) with LLVM_SYS_150_PREFIX=/opt/llvm15 + FETCHCONTENT_BASE_DIR=~/.cache/cmake-fetchcontent.
  • PR CI: first run — cache miss for both workflow keys, workflow log shows Cache not found for input keys followed by Cache saved with key: Linux-fc-DTVM-EVM ... -v1-... and ... DTVM-WASM ... -v1-....
  • PR CI: re-run (force re-run on same commit) — cache hit, log shows Cache restored from key: ..., zero ^-- Downloading lines in build output.

🤖 Generated with Claude Code

abmcar and others added 2 commits May 15, 2026 15:27
Two narrow, locally-verifiable changes to reduce FetchContent flakiness:

1. boost URL: sourceforge → archives.boost.io (URL_HASH unchanged).
   Addresses the most flaky cold-start dep — sourceforge has been a
   recurring 504 source (e.g. PR DTVMStack#499 run 25897803413 fell over on a
   FetchContent download). Boost.org's official archive returns
   HTTP 200 with the canonical 1.67.0 tarball (content-length matches;
   URL_HASH validates byte-identity). Drop DOWNLOAD_NAME since the new
   URL already ends in the canonical filename.

2. Top-level CMakeLists.txt honors FETCHCONTENT_BASE_DIR from env when
   no `-D` is passed on the cmake command line. Mirrors the pattern
   already at .worktrees/feat-gas-check-placement/CMakeLists.txt:8-15.
   Lets local developers share a populated cache across worktrees and
   clean builds via `export FETCHCONTENT_BASE_DIR=~/.cache/cmake-fetchcontent`.

docs/start.md adds a "Build dependency cache" section documenting the
local convention and the SGX local-cache caveat (asmjit gets patched
under SGX; mixing patched/unpatched in one cache breaks).

A complementary follow-up to pre-bake the deps into
`dtvmdev1/dtvm-dev-x64:main` was scoped out of this PR because Docker
is not available in the implementation environment for end-to-end
verification. Design preserved in the change-doc's "Deferred" section
for a future PR.

Validation (local):
- curl HTTP 200 + correct content-length on archives.boost.io URL.
- env-hook test: FETCHCONTENT_BASE_DIR=/tmp/fc cmake -S . -B build
  populates /tmp/fc/<name>-src/ (note: BASE_DIR layout has no _deps/
  segment — that's only the default).
- Populated boost-src/boost/version.hpp contains BOOST_VERSION 106700.
- tools/format.sh check pass.

Refs: docs/changes/2026-05-15-fetchcontent-cache/README.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add `actions/cache@v4` step to each container-image job in EVM (10) and
WASM (4) workflows, plus workflow-level `FETCHCONTENT_BASE_DIR` env, so
populated FetchContent sources persist across CI runs. First run is a
miss (full downloads, ~820MB save); subsequent runs with unchanged
`third_party/AddDeps.cmake` hit the cache and skip all 8 downloads.

Builds on commit 96707a2 (CMakeLists env hook + boost URL swap):
- The env hook (CMakeLists.txt:8-18) reads `FETCHCONTENT_BASE_DIR` from
  the workflow-level env when no `-D` is passed on cmake cmd line, so
  `.ci/run_test_suite.sh` and inline-cmake jobs both pick it up without
  modification.
- boost URL swap already addresses the most flaky cold-start dep
  (sourceforge → archives.boost.io).

Cache key composition: `${{ runner.os }}-fc-${{ github.workflow }}-v1-
${{ hashFiles('third_party/AddDeps.cmake') }}`. The `github.workflow`
segment is necessary — EVM runs `SINGLEPASS_JIT=OFF` (no asmjit),
WASM runs `SINGLEPASS_JIT=ON` (needs asmjit); sharing one key across
workflows would cause WASM to re-download asmjit every run because
actions/cache@v4 skips same-key saves (the "first writer wins"
behavior). Workflow-prefixed keys avoid this. No `restore-keys` —
partial cache hits across different dep versions can silently yield
stale source.

Coverage: 14 container jobs total. The replace_all on the standard
`submodules: "true"` → `Code Format Check` boundary handled 12 of
them; two manual inserts handled the Hunter-cache job (after Hunter
cache step) and the perf-regression-check job (after its
`fetch-depth: 0` checkout `with:` clause).

Validation:
- Format check pass.
- YAML lint pass (python yaml.safe_load) on both workflows.
- Cache step count: 10 (EVM) + 4 (WASM) = 14.
- Cannot test cache behavior locally — actions/cache is GH-runner-side.
  PR CI will exercise it (AC-A first-run miss → save; AC-B re-run hit).

Spec went through Phase 0 → Phase 0.5 (both REFINE absorbed) → Phase 1
→ Phase 2 R1 (Opus PASS + Codex REVISE wording fixes absorbed). Hard
cap not hit; iter=2 of Phase 0.5 skipped because refinements were
spec-text only.

Refs: docs/changes/2026-05-15-fetchcontent-cache/README.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 15, 2026 08:25
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

CI infrastructure change that caches the populated CMake FetchContent dependency tree across runs to eliminate per-run downloads (and to harden against upstream 504s), plus a swap of the boost tarball mirror to a more reliable host. A small CMake hook allows the workflow-level env var to flow through to cmake -S . without modifying .ci/run_test_suite.sh, and the local convention is documented in docs/start.md.

Changes:

  • Add an actions/cache@v4 step (path /github/home/.fetchcontent, key includes runner.os, github.workflow, a v1 namespace, and hashFiles('third_party/AddDeps.cmake')) plus a workflow-level FETCHCONTENT_BASE_DIR env to all 10 EVM and 4 WASM container jobs.
  • Swap the boost 1.67 download URL from sourceforge.net to archives.boost.io (URL_HASH unchanged) and add a top-level CMakeLists.txt block that honors FETCHCONTENT_BASE_DIR from the environment when not already set in cache.
  • New design doc under docs/changes/2026-05-15-fetchcontent-cache/ and a new "Build dependency cache" section in docs/start.md.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
CMakeLists.txt Honor FETCHCONTENT_BASE_DIR from env when not passed via -D.
third_party/AddDeps.cmake Note about the new env hook + boost URL swap to archives.boost.io.
.github/workflows/dtvm_evm_test_x86.yml Workflow env FETCHCONTENT_BASE_DIR + 10 actions/cache steps.
.github/workflows/dtvm_wasm_test_x86.yml Workflow env FETCHCONTENT_BASE_DIR + 4 actions/cache steps.
docs/start.md New section documenting local cache convention and SGX caveat.
docs/changes/2026-05-15-fetchcontent-cache/README.md Design doc, risks, acceptance criteria.
Comments suppressed due to low confidence (2)

.github/workflows/dtvm_evm_test_x86.yml:42

  • The cache key uses ${{ github.workflow }}, which expands to the workflow's name: field — here "DTVM-EVM test CI in x86-64" (and "DTVM-WASM test CI in x86-64" in the WASM file). That embeds spaces into the cache key (e.g. Linux-fc-DTVM-EVM test CI in x86-64-v1-<hash>), which is technically accepted by actions/cache@v4 but is awkward to grep for, and any future rename of the workflow's display name will silently invalidate every cached entry. Acceptance criterion AC-E in docs/changes/2026-05-15-fetchcontent-cache/README.md also asserts the key contains DTVM-EVM / DTVM-WASM "with hyphen", which won't match the actual key string. Consider using a stable short literal per workflow (e.g. evm / wasm) instead of github.workflow, or update the AC wording. Same applies to every cache step in both workflows.
          key: ${{ runner.os }}-fc-${{ github.workflow }}-v1-${{ hashFiles('third_party/AddDeps.cmake') }}

.github/workflows/dtvm_evm_test_x86.yml:42

  • The cache key only hashes third_party/AddDeps.cmake, but CMakeLists.txt now also affects FetchContent behavior (the new env-honoring block, and any future option toggles such as SINGLEPASS_JIT or ZEN_ENABLE_SGX that gate conditional FetchContent_Declare calls). Risk R4 in the change doc already acknowledges this. If a future commit moves a FetchContent_Declare out of AddDeps.cmake (e.g. into CMakeLists.txt or a subproject) the cache will silently serve stale sources. Consider including 'CMakeLists.txt' in the hashFiles(...) glob, or extracting all FetchContent declarations into a single file enforced by convention.
          key: ${{ runner.os }}-fc-${{ github.workflow }}-v1-${{ hashFiles('third_party/AddDeps.cmake') }}

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

Comment thread CMakeLists.txt Outdated
Comment thread .github/workflows/dtvm_evm_test_x86.yml
Comment thread docs/start.md Outdated
Comment thread docs/start.md Outdated
- CMakeLists.txt env-hook comment: fix path ref. The comment previously
  cited `/opt/cmake-fetchcontent` (a vestige from the abandoned
  image-bake design); the workflows in this PR use `/github/home/.fetchcontent`,
  and local convention uses `~/.cache/cmake-fetchcontent`. Reword to
  describe the actual intended consumers.
- docs/start.md: "8 deps" → "up to 8" with explicit list of which deps
  are conditional on which `ZEN_ENABLE_*` flag, so readers can reconcile
  with `AddDeps.cmake` content.
- docs/start.md SGX caveat: clarify that no current CI job builds with
  `ZEN_ENABLE_SGX=ON`, so the workflow-level cache key (which does not
  distinguish SGX) is sound today; flag it as a contract to revisit if
  SGX is ever added to CI.

Deferred (with rationale on the PR review thread):
- Composite action for the 14 duplicated cache steps. Acknowledged
  duplication; sed-replace of a single block on a key bump (e.g. `v1`
  → `v2`) is still 1 line per workflow, while a composite action adds
  a new file + indirection. Will reconsider if the cache step grows
  beyond 4 lines.
- Adding `CMakeLists.txt` to `hashFiles(...)`. Bumping the cache key
  on every CMakeLists.txt edit (frequent and dep-unrelated) outweighs
  the rare case where a new `FetchContent_Declare` is added outside
  `AddDeps.cmake`. R4 in the change-doc already calls this out.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@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 2.60 2.93 +12.5% PASS
total/main/blake2b_huff/empty 0.04 0.05 +11.8% PASS
total/main/blake2b_shifts/8415nulls 20.63 20.58 -0.2% PASS
total/main/sha1_divs/5311 8.60 8.70 +1.1% PASS
total/main/sha1_divs/empty 0.11 0.11 +1.2% PASS
total/main/sha1_shifts/5311 6.35 6.46 +1.8% PASS
total/main/sha1_shifts/empty 0.08 0.08 +2.0% PASS
total/main/snailtracer/benchmark 73.90 73.75 -0.2% PASS
total/main/structarray_alloc/nfts_rank 1.37 1.42 +4.3% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 +1.5% PASS
total/main/swap_math/received 0.01 0.01 +0.9% PASS
total/main/swap_math/spent 0.01 0.01 +0.8% PASS
total/main/weierstrudel/1 0.29 0.29 +2.3% PASS
total/main/weierstrudel/15 3.19 3.27 +2.5% PASS
total/micro/JUMPDEST_n0/empty 2.63 2.63 +0.0% PASS
total/micro/jump_around/empty 0.10 0.10 -0.7% PASS
total/micro/loop_with_many_jumpdests/empty 40.32 40.26 -0.1% PASS
total/micro/memory_grow_mload/by1 0.12 0.12 -1.1% PASS
total/micro/memory_grow_mload/by16 0.13 0.13 -0.1% PASS
total/micro/memory_grow_mload/by32 0.15 0.15 +0.5% PASS
total/micro/memory_grow_mload/nogrow 0.12 0.12 -1.0% PASS
total/micro/memory_grow_mstore/by1 0.13 0.13 +1.1% PASS
total/micro/memory_grow_mstore/by16 0.14 0.14 +1.5% PASS
total/micro/memory_grow_mstore/by32 0.15 0.15 +1.1% PASS
total/micro/memory_grow_mstore/nogrow 0.12 0.12 +2.7% PASS
total/micro/signextend/one 0.28 0.28 -0.0% PASS
total/micro/signextend/zero 0.28 0.28 +0.0% PASS
total/synth/ADD/b0 3.22 3.22 -0.0% PASS
total/synth/ADD/b1 3.50 3.57 +2.0% PASS
total/synth/ADDRESS/a0 4.81 4.81 +0.1% PASS
total/synth/ADDRESS/a1 5.10 5.34 +4.7% PASS
total/synth/AND/b0 2.99 3.09 +3.5% PASS
total/synth/AND/b1 3.25 3.50 +7.7% PASS
total/synth/BYTE/b0 6.09 6.09 +0.1% PASS
total/synth/BYTE/b1 5.11 5.13 +0.3% PASS
total/synth/CALLDATASIZE/a0 3.27 3.26 -0.1% PASS
total/synth/CALLDATASIZE/a1 3.33 3.34 +0.2% PASS
total/synth/CALLER/a0 4.81 4.81 -0.0% PASS
total/synth/CALLER/a1 5.10 5.10 -0.0% PASS
total/synth/CALLVALUE/a0 3.53 3.59 +1.6% PASS
total/synth/CALLVALUE/a1 3.54 3.78 +6.9% PASS
total/synth/CODESIZE/a0 3.75 3.75 -0.0% PASS
total/synth/CODESIZE/a1 3.78 4.04 +6.7% PASS
total/synth/DUP1/d0 1.39 1.39 -0.1% PASS
total/synth/DUP1/d1 1.52 1.52 +0.2% PASS
total/synth/DUP10/d0 1.39 1.39 -0.1% PASS
total/synth/DUP10/d1 1.50 1.74 +16.3% PASS
total/synth/DUP11/d0 1.39 1.39 +0.0% PASS
total/synth/DUP11/d1 1.50 1.50 -0.0% PASS
total/synth/DUP12/d0 1.39 1.39 -0.2% PASS
total/synth/DUP12/d1 1.53 1.65 +7.9% PASS
total/synth/DUP13/d0 1.39 1.39 +0.0% PASS
total/synth/DUP13/d1 1.49 1.74 +16.5% PASS
total/synth/DUP14/d0 1.39 1.15 -16.9% PASS
total/synth/DUP14/d1 1.49 1.50 +0.5% PASS
total/synth/DUP15/d0 1.39 1.39 -0.0% PASS
total/synth/DUP15/d1 1.49 1.74 +16.1% PASS
total/synth/DUP16/d0 1.39 1.39 +0.2% PASS
total/synth/DUP16/d1 1.50 1.74 +15.9% PASS
total/synth/DUP2/d0 1.39 1.27 -8.8% PASS
total/synth/DUP2/d1 1.49 1.74 +16.2% PASS
total/synth/DUP3/d0 1.16 1.39 +20.0% PASS
total/synth/DUP3/d1 1.50 1.50 +0.1% PASS
total/synth/DUP4/d0 1.39 1.15 -17.3% PASS
total/synth/DUP4/d1 1.50 1.50 +0.4% PASS
total/synth/DUP5/d0 1.29 1.15 -10.8% PASS
total/synth/DUP5/d1 1.49 1.50 +0.4% PASS
total/synth/DUP6/d0 1.39 1.39 +0.0% PASS
total/synth/DUP6/d1 1.50 1.50 -0.1% PASS
total/synth/DUP7/d0 1.39 1.39 -0.0% PASS
total/synth/DUP7/d1 1.49 1.74 +16.4% PASS
total/synth/DUP8/d0 1.39 1.15 -17.2% PASS
total/synth/DUP8/d1 1.49 1.61 +8.2% PASS
total/synth/DUP9/d0 1.39 1.39 +0.1% PASS
total/synth/DUP9/d1 1.49 1.52 +2.2% PASS
total/synth/EQ/b0 5.32 5.30 -0.3% PASS
total/synth/EQ/b1 5.59 5.60 +0.2% PASS
total/synth/GAS/a0 3.84 3.84 -0.0% PASS
total/synth/GAS/a1 3.96 3.77 -4.7% PASS
total/synth/GT/b0 5.39 5.38 -0.2% PASS
total/synth/GT/b1 5.32 5.34 +0.2% PASS
total/synth/ISZERO/u0 8.33 8.33 -0.0% PASS
total/synth/JUMPDEST/n0 2.63 2.64 +0.1% PASS
total/synth/LT/b0 5.38 5.38 -0.0% PASS
total/synth/LT/b1 5.33 5.34 +0.3% PASS
total/synth/MSIZE/a0 4.35 4.33 -0.5% PASS
total/synth/MSIZE/a1 4.61 4.65 +0.8% PASS
total/synth/MUL/b0 5.50 5.49 -0.2% PASS
total/synth/MUL/b1 5.92 5.93 +0.1% PASS
total/synth/NOT/u0 5.04 5.07 +0.6% PASS
total/synth/OR/b0 3.02 3.02 +0.0% PASS
total/synth/OR/b1 3.24 3.42 +5.6% PASS
total/synth/PC/a0 3.35 3.35 -0.0% PASS
total/synth/PC/a1 3.38 3.62 +7.3% PASS
total/synth/PUSH1/p0 1.40 1.39 -0.3% PASS
total/synth/PUSH1/p1 1.62 1.83 +12.8% PASS
total/synth/PUSH10/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH10/p1 1.63 1.84 +13.0% PASS
total/synth/PUSH11/p0 1.40 1.39 -0.1% PASS
total/synth/PUSH11/p1 1.64 1.60 -2.5% PASS
total/synth/PUSH12/p0 1.40 1.39 -0.1% PASS
total/synth/PUSH12/p1 1.63 1.63 -0.2% PASS
total/synth/PUSH13/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH13/p1 1.62 1.63 +0.5% PASS
total/synth/PUSH14/p0 1.46 1.44 -1.5% PASS
total/synth/PUSH14/p1 1.64 1.62 -1.4% PASS
total/synth/PUSH15/p0 1.39 1.39 -0.0% PASS
total/synth/PUSH15/p1 1.71 1.94 +13.3% PASS
total/synth/PUSH16/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH16/p1 1.63 1.84 +12.6% PASS
total/synth/PUSH17/p0 1.40 1.40 +0.0% PASS
total/synth/PUSH17/p1 1.63 1.65 +0.9% PASS
total/synth/PUSH18/p0 1.40 1.39 -0.1% PASS
total/synth/PUSH18/p1 1.63 1.61 -0.9% PASS
total/synth/PUSH19/p0 1.40 1.39 -0.2% PASS
total/synth/PUSH19/p1 1.62 1.61 -0.5% PASS
total/synth/PUSH2/p0 1.39 1.40 +0.1% PASS
total/synth/PUSH2/p1 1.60 1.59 -0.6% PASS
total/synth/PUSH20/p0 1.40 1.40 +0.0% PASS
total/synth/PUSH20/p1 1.85 1.62 -12.3% PASS
total/synth/PUSH21/p0 1.40 1.39 -0.3% PASS
total/synth/PUSH21/p1 1.64 1.87 +13.5% PASS
total/synth/PUSH22/p0 1.39 1.40 +0.2% PASS
total/synth/PUSH22/p1 1.62 1.86 +14.9% PASS
total/synth/PUSH23/p0 1.40 1.40 +0.0% PASS
total/synth/PUSH23/p1 1.67 1.63 -2.6% PASS
total/synth/PUSH24/p0 1.40 1.40 -0.0% PASS
total/synth/PUSH24/p1 1.63 1.60 -2.1% PASS
total/synth/PUSH25/p0 1.40 1.40 -0.3% PASS
total/synth/PUSH25/p1 1.64 1.62 -1.3% PASS
total/synth/PUSH26/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH26/p1 1.61 1.84 +14.6% PASS
total/synth/PUSH27/p0 1.40 1.40 -0.0% PASS
total/synth/PUSH27/p1 1.61 1.62 +0.4% PASS
total/synth/PUSH28/p0 1.40 1.40 -0.2% PASS
total/synth/PUSH28/p1 1.65 1.84 +11.7% PASS
total/synth/PUSH29/p0 1.39 1.40 +0.2% PASS
total/synth/PUSH29/p1 1.63 1.62 -0.7% PASS
total/synth/PUSH3/p0 1.39 1.40 +0.0% PASS
total/synth/PUSH3/p1 1.61 1.60 -0.5% PASS
total/synth/PUSH30/p0 1.51 1.52 +0.2% PASS
total/synth/PUSH30/p1 1.64 1.63 -0.6% PASS
total/synth/PUSH31/p0 1.40 1.40 +0.2% PASS
total/synth/PUSH31/p1 1.75 1.77 +1.4% PASS
total/synth/PUSH32/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH32/p1 1.63 1.85 +13.6% PASS
total/synth/PUSH4/p0 1.40 1.39 -0.1% PASS
total/synth/PUSH4/p1 1.60 1.60 +0.1% PASS
total/synth/PUSH5/p0 1.40 1.40 +0.0% PASS
total/synth/PUSH5/p1 1.61 1.83 +14.2% PASS
total/synth/PUSH6/p0 1.40 1.39 -0.4% PASS
total/synth/PUSH6/p1 1.62 1.85 +14.1% PASS
total/synth/PUSH7/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH7/p1 1.63 1.84 +13.3% PASS
total/synth/PUSH8/p0 1.40 1.39 -0.3% PASS
total/synth/PUSH8/p1 1.61 1.63 +1.0% PASS
total/synth/PUSH9/p0 1.40 1.40 +0.1% PASS
total/synth/PUSH9/p1 1.63 1.84 +12.5% PASS
total/synth/RETURNDATASIZE/a0 3.67 3.67 +0.1% PASS
total/synth/RETURNDATASIZE/a1 3.70 3.71 +0.4% PASS
total/synth/SAR/b0 3.92 3.92 -0.0% PASS
total/synth/SAR/b1 4.72 4.72 -0.2% PASS
total/synth/SGT/b0 4.60 4.60 -0.1% PASS
total/synth/SGT/b1 4.09 4.11 +0.4% PASS
total/synth/SHL/b0 3.60 3.60 +0.1% PASS
total/synth/SHL/b1 3.45 3.46 +0.3% PASS
total/synth/SHR/b0 3.47 3.47 +0.1% PASS
total/synth/SHR/b1 3.46 3.64 +5.2% PASS
total/synth/SIGNEXTEND/b0 3.43 3.42 -0.5% PASS
total/synth/SIGNEXTEND/b1 3.69 3.83 +4.0% PASS
total/synth/SLT/b0 4.29 4.28 -0.1% PASS
total/synth/SLT/b1 4.09 4.08 -0.3% PASS
total/synth/SUB/b0 3.22 3.23 +0.3% PASS
total/synth/SUB/b1 3.46 3.47 +0.3% PASS
total/synth/SWAP1/s0 3.44 3.44 -0.0% PASS
total/synth/SWAP10/s0 3.45 3.45 -0.0% PASS
total/synth/SWAP11/s0 3.45 3.45 -0.1% PASS
total/synth/SWAP12/s0 3.46 3.46 +0.1% PASS
total/synth/SWAP13/s0 3.46 3.46 +0.1% PASS
total/synth/SWAP14/s0 3.46 3.48 +0.4% PASS
total/synth/SWAP15/s0 3.74 3.74 -0.0% PASS
total/synth/SWAP16/s0 3.50 3.50 +0.0% PASS
total/synth/SWAP2/s0 3.44 3.44 +0.0% PASS
total/synth/SWAP3/s0 3.44 3.44 +0.0% PASS
total/synth/SWAP4/s0 3.44 3.44 +0.0% PASS
total/synth/SWAP5/s0 3.44 3.45 +0.1% PASS
total/synth/SWAP6/s0 3.45 3.45 +0.1% PASS
total/synth/SWAP7/s0 3.45 3.45 +0.2% PASS
total/synth/SWAP8/s0 3.45 3.45 -0.0% PASS
total/synth/SWAP9/s0 3.45 3.45 -0.0% PASS
total/synth/XOR/b0 3.10 3.10 -0.0% PASS
total/synth/XOR/b1 3.26 3.49 +7.3% PASS
total/synth/loop_v1 6.77 6.71 -0.9% PASS
total/synth/loop_v2 6.72 6.70 -0.3% 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.82 0.82 -0.6% PASS
total/main/blake2b_huff/empty 0.01 0.01 -1.2% PASS
total/main/blake2b_shifts/8415nulls 4.41 4.41 -0.0% PASS
total/main/sha1_divs/5311 0.58 0.58 -0.1% PASS
total/main/sha1_divs/empty 0.01 0.01 -0.1% PASS
total/main/sha1_shifts/5311 0.54 0.54 +0.0% PASS
total/main/sha1_shifts/empty 0.01 0.01 +0.0% PASS
total/main/snailtracer/benchmark 30.93 31.04 +0.4% PASS
total/main/structarray_alloc/nfts_rank 0.27 0.27 -0.6% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 +0.5% PASS
total/main/swap_math/received 0.00 0.00 +0.2% PASS
total/main/swap_math/spent 0.00 0.00 -1.6% PASS
total/main/weierstrudel/1 0.24 0.24 +0.1% PASS
total/main/weierstrudel/15 2.58 2.57 -0.3% PASS
total/micro/JUMPDEST_n0/empty 0.00 0.00 +0.6% PASS
total/micro/jump_around/empty 0.05 0.06 +13.0% PASS
total/micro/loop_with_many_jumpdests/empty 0.00 0.00 +0.0% PASS
total/micro/memory_grow_mload/by1 0.01 0.01 -0.5% PASS
total/micro/memory_grow_mload/by16 0.01 0.01 +1.8% PASS
total/micro/memory_grow_mload/by32 0.01 0.01 -0.4% PASS
total/micro/memory_grow_mload/nogrow 0.01 0.01 -0.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 +2.0% PASS
total/micro/memory_grow_mstore/by32 0.01 0.01 -0.3% PASS
total/micro/memory_grow_mstore/nogrow 0.01 0.01 +0.4% PASS
total/micro/signextend/one 0.07 0.07 -0.1% PASS
total/micro/signextend/zero 0.07 0.07 -0.4% PASS
total/synth/ADD/b0 0.00 0.00 -0.3% PASS
total/synth/ADD/b1 0.00 0.00 -0.4% PASS
total/synth/ADDRESS/a0 0.15 0.15 -0.0% PASS
total/synth/ADDRESS/a1 0.15 0.15 -0.1% PASS
total/synth/AND/b0 0.00 0.00 -0.2% PASS
total/synth/AND/b1 0.00 0.00 -0.3% PASS
total/synth/BYTE/b0 0.00 0.00 -0.3% PASS
total/synth/BYTE/b1 0.00 0.00 -2.6% PASS
total/synth/CALLDATASIZE/a0 0.07 0.07 +0.0% PASS
total/synth/CALLDATASIZE/a1 0.07 0.07 -0.0% PASS
total/synth/CALLER/a0 0.18 0.18 -0.0% PASS
total/synth/CALLER/a1 0.18 0.18 -0.0% PASS
total/synth/CALLVALUE/a0 0.19 0.19 -0.1% PASS
total/synth/CALLVALUE/a1 0.19 0.19 +0.7% PASS
total/synth/CODESIZE/a0 0.07 0.07 -0.0% PASS
total/synth/CODESIZE/a1 0.07 0.07 +0.0% PASS
total/synth/DUP1/d0 0.00 0.00 -0.2% PASS
total/synth/DUP1/d1 0.00 0.00 -0.2% PASS
total/synth/DUP10/d0 0.00 0.00 +0.5% PASS
total/synth/DUP10/d1 0.00 0.00 -0.1% PASS
total/synth/DUP11/d0 0.00 0.00 -0.1% PASS
total/synth/DUP11/d1 0.00 0.00 -0.3% PASS
total/synth/DUP12/d0 0.00 0.00 +0.1% PASS
total/synth/DUP12/d1 0.00 0.00 -0.1% PASS
total/synth/DUP13/d0 0.00 0.00 -0.4% PASS
total/synth/DUP13/d1 0.00 0.00 -0.3% PASS
total/synth/DUP14/d0 0.00 0.00 -0.7% PASS
total/synth/DUP14/d1 0.00 0.00 -0.4% PASS
total/synth/DUP15/d0 0.00 0.00 -1.2% PASS
total/synth/DUP15/d1 0.00 0.00 +0.4% PASS
total/synth/DUP16/d0 0.00 0.00 -0.7% PASS
total/synth/DUP16/d1 0.00 0.00 +0.0% PASS
total/synth/DUP2/d0 0.00 0.00 -0.2% PASS
total/synth/DUP2/d1 0.00 0.00 -0.3% PASS
total/synth/DUP3/d0 0.00 0.00 -0.5% PASS
total/synth/DUP3/d1 0.00 0.00 -0.3% PASS
total/synth/DUP4/d0 0.00 0.00 -0.3% PASS
total/synth/DUP4/d1 0.00 0.00 -0.1% PASS
total/synth/DUP5/d0 0.00 0.00 -0.2% PASS
total/synth/DUP5/d1 0.00 0.00 -0.5% PASS
total/synth/DUP6/d0 0.00 0.00 +0.4% PASS
total/synth/DUP6/d1 0.00 0.00 -0.3% PASS
total/synth/DUP7/d0 0.00 0.00 -0.1% PASS
total/synth/DUP7/d1 0.00 0.00 -0.4% PASS
total/synth/DUP8/d0 0.00 0.00 -0.4% PASS
total/synth/DUP8/d1 0.00 0.00 -0.1% PASS
total/synth/DUP9/d0 0.00 0.00 +0.1% PASS
total/synth/DUP9/d1 0.00 0.00 -0.3% PASS
total/synth/EQ/b0 0.00 0.00 -0.6% PASS
total/synth/EQ/b1 0.00 0.00 -0.4% PASS
total/synth/GAS/a0 0.76 0.76 -0.0% PASS
total/synth/GAS/a1 0.76 0.76 -0.0% PASS
total/synth/GT/b0 0.00 0.00 -0.3% PASS
total/synth/GT/b1 0.00 0.00 -0.3% PASS
total/synth/ISZERO/u0 0.00 0.00 -0.5% PASS
total/synth/JUMPDEST/n0 0.00 0.00 -0.1% PASS
total/synth/LT/b0 0.00 0.00 +0.2% PASS
total/synth/LT/b1 0.00 0.00 -0.3% PASS
total/synth/MSIZE/a0 0.00 0.00 -0.1% PASS
total/synth/MSIZE/a1 0.00 0.00 -0.3% PASS
total/synth/MUL/b0 0.00 0.00 -0.1% PASS
total/synth/MUL/b1 0.00 0.00 -0.1% PASS
total/synth/NOT/u0 0.00 0.00 -0.5% PASS
total/synth/OR/b0 0.00 0.00 -0.4% PASS
total/synth/OR/b1 0.00 0.00 -0.0% PASS
total/synth/PC/a0 0.00 0.00 -0.1% PASS
total/synth/PC/a1 0.00 0.00 -0.4% PASS
total/synth/PUSH1/p0 0.00 0.00 -0.6% PASS
total/synth/PUSH1/p1 0.00 0.00 -0.4% PASS
total/synth/PUSH10/p0 0.00 0.00 -0.4% PASS
total/synth/PUSH10/p1 0.00 0.00 -0.8% PASS
total/synth/PUSH11/p0 0.00 0.00 -1.8% PASS
total/synth/PUSH11/p1 0.00 0.00 +0.3% PASS
total/synth/PUSH12/p0 0.00 0.00 +1.4% PASS
total/synth/PUSH12/p1 0.00 0.00 +0.6% PASS
total/synth/PUSH13/p0 0.00 0.00 -1.2% PASS
total/synth/PUSH13/p1 0.00 0.00 -0.0% PASS
total/synth/PUSH14/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH14/p1 0.00 0.00 -0.3% PASS
total/synth/PUSH15/p0 0.00 0.00 +0.8% PASS
total/synth/PUSH15/p1 0.00 0.00 +1.0% PASS
total/synth/PUSH16/p0 0.00 0.00 -1.8% PASS
total/synth/PUSH16/p1 0.00 0.00 +0.2% PASS
total/synth/PUSH17/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH17/p1 0.00 0.00 -1.6% PASS
total/synth/PUSH18/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH18/p1 0.00 0.00 -0.3% PASS
total/synth/PUSH19/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH19/p1 0.00 0.00 -0.7% PASS
total/synth/PUSH2/p0 0.00 0.00 +0.3% PASS
total/synth/PUSH2/p1 0.00 0.00 -0.1% PASS
total/synth/PUSH20/p0 0.00 0.00 -0.2% PASS
total/synth/PUSH20/p1 0.00 0.00 -0.3% PASS
total/synth/PUSH21/p0 0.00 0.00 -0.4% PASS
total/synth/PUSH21/p1 0.00 0.00 -0.2% PASS
total/synth/PUSH22/p0 1.40 1.40 +0.3% PASS
total/synth/PUSH22/p1 1.61 1.59 -1.3% PASS
total/synth/PUSH23/p0 1.40 1.39 -0.5% PASS
total/synth/PUSH23/p1 1.66 1.62 -2.8% PASS
total/synth/PUSH24/p0 1.40 1.40 -0.0% PASS
total/synth/PUSH24/p1 1.62 1.60 -0.9% PASS
total/synth/PUSH25/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH25/p1 1.62 1.59 -2.2% PASS
total/synth/PUSH26/p0 1.40 1.32 -5.2% PASS
total/synth/PUSH26/p1 1.60 1.60 -0.1% PASS
total/synth/PUSH27/p0 1.40 1.40 -0.0% PASS
total/synth/PUSH27/p1 1.60 1.61 +0.5% PASS
total/synth/PUSH28/p0 1.40 1.40 -0.3% PASS
total/synth/PUSH28/p1 1.62 1.61 -0.4% PASS
total/synth/PUSH29/p0 1.40 1.40 +0.0% PASS
total/synth/PUSH29/p1 1.68 1.59 -5.2% PASS
total/synth/PUSH3/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH3/p1 0.00 0.00 -0.2% PASS
total/synth/PUSH30/p0 1.48 1.48 +0.2% PASS
total/synth/PUSH30/p1 1.62 1.59 -2.3% PASS
total/synth/PUSH31/p0 1.40 1.40 -0.3% PASS
total/synth/PUSH31/p1 1.68 1.68 +0.3% PASS
total/synth/PUSH32/p0 1.40 1.40 -0.1% PASS
total/synth/PUSH32/p1 1.63 1.61 -1.7% PASS
total/synth/PUSH4/p0 0.00 0.00 +0.4% PASS
total/synth/PUSH4/p1 0.00 0.00 +0.7% PASS
total/synth/PUSH5/p0 0.00 0.00 +0.5% PASS
total/synth/PUSH5/p1 0.00 0.00 -1.0% PASS
total/synth/PUSH6/p0 0.00 0.00 -0.2% PASS
total/synth/PUSH6/p1 0.00 0.00 +1.1% PASS
total/synth/PUSH7/p0 0.00 0.00 +0.2% PASS
total/synth/PUSH7/p1 0.00 0.00 -1.5% PASS
total/synth/PUSH8/p0 0.00 0.00 -0.2% PASS
total/synth/PUSH8/p1 0.00 0.00 -2.2% PASS
total/synth/PUSH9/p0 0.00 0.00 -3.0% PASS
total/synth/PUSH9/p1 0.00 0.00 -1.1% PASS
total/synth/RETURNDATASIZE/a0 0.03 0.03 +0.0% PASS
total/synth/RETURNDATASIZE/a1 0.03 0.03 +0.1% PASS
total/synth/SAR/b0 0.00 0.00 -0.4% PASS
total/synth/SAR/b1 0.00 0.00 -0.3% PASS
total/synth/SGT/b0 0.00 0.00 -0.2% PASS
total/synth/SGT/b1 0.00 0.00 +0.0% PASS
total/synth/SHL/b0 0.00 0.00 -0.1% PASS
total/synth/SHL/b1 0.00 0.00 -0.1% PASS
total/synth/SHR/b0 0.00 0.00 -0.2% PASS
total/synth/SHR/b1 0.00 0.00 -0.2% PASS
total/synth/SIGNEXTEND/b0 0.00 0.00 +0.1% PASS
total/synth/SIGNEXTEND/b1 0.00 0.00 -0.1% PASS
total/synth/SLT/b0 0.00 0.00 -0.6% PASS
total/synth/SLT/b1 0.00 0.00 -0.4% PASS
total/synth/SUB/b0 0.00 0.00 -0.1% PASS
total/synth/SUB/b1 0.00 0.00 -0.4% PASS
total/synth/SWAP1/s0 0.00 0.00 -0.0% PASS
total/synth/SWAP10/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP11/s0 0.00 0.00 +0.1% PASS
total/synth/SWAP12/s0 0.00 0.00 -0.3% PASS
total/synth/SWAP13/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP14/s0 0.00 0.00 -0.2% PASS
total/synth/SWAP15/s0 0.00 0.00 +0.1% PASS
total/synth/SWAP16/s0 0.00 0.00 -2.1% PASS
total/synth/SWAP2/s0 0.00 0.00 -0.3% PASS
total/synth/SWAP3/s0 0.00 0.00 -0.5% PASS
total/synth/SWAP4/s0 0.00 0.00 -0.2% PASS
total/synth/SWAP5/s0 0.00 0.00 -0.3% PASS
total/synth/SWAP6/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP7/s0 0.00 0.00 +0.1% PASS
total/synth/SWAP8/s0 0.00 0.00 -0.4% PASS
total/synth/SWAP9/s0 0.00 0.00 -0.1% PASS
total/synth/XOR/b0 0.00 0.00 -0.5% PASS
total/synth/XOR/b1 0.00 0.00 -0.3% PASS
total/synth/loop_v1 1.50 1.49 -0.4% PASS
total/synth/loop_v2 1.38 1.38 -0.1% PASS

Summary: 194 benchmarks, 0 regressions


@zoowii zoowii merged commit 7a4d2a5 into DTVMStack:main May 15, 2026
16 checks passed
ZR74 pushed a commit to ZR74/DTVM that referenced this pull request May 18, 2026
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
(cherry picked from commit 7a4d2a5)
@abmcar abmcar deleted the ci/fetchcontent-cache branch May 20, 2026 07:48
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