Skip to content

build/wasm: pin one LLGo Binaryen release for Emscripten and WASI - #2652

Merged
cpunion merged 7 commits into
xgo-dev:mainfrom
cpunion:codex/binaryen-toolchain
Sep 26, 2026
Merged

cpunion merged 7 commits into
xgo-dev:mainfrom
cpunion:codex/binaryen-toolchain

Conversation

@cpunion

@cpunion cpunion commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

LLGo's Emscripten and WASI post-link paths can select different Binaryen installations. CI also paired Emscripten 4.0.21 (Binaryen 125) with Binaryen 132, and upstream Binaryen 132 does not contain LLGo's reviewed DWARF/Asyncify backport or the Memory64 DWARF repair.

Install the published xgo-dev/binaryen llgo-v132.3 release for all CI host platforms. Archive SHA-256 values are pinned in the repository and checked before extraction. Export its root as EM_BINARYEN_ROOT and its wasm-opt as WASMOPT, so Emscripten and the standalone WASI post-link use the same toolchain. Both required tools are checked and their versions logged. An explicit WASMOPT remains an override; a failed post-link reports the selected executable path and version. Update Wasm runtime and benchmark CI to Emscripten 6.0.8, whose expected Binaryen version is 132.

Validation: the llgo-v132.3 release workflow passed all six platform build/test jobs and published seven archives. Each .sha256 sidecar matches its GitHub asset digest. The macOS ARM64 archive passed a local SHA-256 check, extraction, and version checks for wasm-opt and wasm-emscripten-finalize. With that release and Emscripten 6.0.8, dependent #2662 passed final-Wasm DWARF verification, Go/C++ source lookup, and Node/Wasmtime execution for J32, J64, and W32 at O0/O2. The stacked #2662 head also passed the full dev/test_wasm_single_worker.sh test-command suite with llgo-v132.3. Focused internal/build post-link tests, 15 CI policy tests, workflow actionlint, and git diff --check passed. Previous PR CI on llgo-v132.2 passed both Wasm runtime suites, cross-compile, multi-host Binaryen setup, and Codecov patch coverage; CI will re-run on this pin update.

Related: #2632, xgo-dev/binaryen#2, xgo-dev/binaryen#4, and dependent #2662.

@codecov

codecov Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cpunion
cpunion force-pushed the codex/binaryen-toolchain branch from fda1e16 to 08e58d7 Compare September 23, 2026 11:08
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

LLGo baseline benchmarks

b969914fe900 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 7160 B 0 B / +0.0% 387 B 0 B / +0.0% 462.095 ms -19.99 ms / -4.1% (better) 1.309 ms +67.2 us / +5.4% (worse)
Linux cprintf-lto 6912 B 0 B / +0.0% 368 B 0 B / +0.0% 454.984 ms -25.98 ms / -5.4% (better) 1.256 ms +12.29 us / +1.0% (worse)
Linux fmtprintf 1637752 B 0 B / +0.0% 484801 B 0 B / +0.0% 3.884 s -13.68 ms / -0.4% (better) 3.090 ms -102.3 us / -3.2% (better)
Linux fmtprintf-lto 1478056 B 0 B / +0.0% 422422 B 0 B / +0.0% 10.705 s -328.9 ms / -3.0% (better) 3.003 ms +98.97 us / +3.4% (worse)
Linux println 61344 B 0 B / +0.0% 14171 B 0 B / +0.0% 487.770 ms -25.65 ms / -5.0% (better) 1.650 ms -365 us / -18.1% (better)
Linux println-lto 54152 B 0 B / +0.0% 12073 B 0 B / +0.0% 677.396 ms +5.223 ms / +0.8% (worse) 1.591 ms -62.06 us / -3.8% (better)
macOS cprintf 68064 B 0 B / +0.0% 4429 B 0 B / +0.0% 771.155 ms +48.52 ms / +6.7% (worse) 3.503 ms +214.3 us / +6.5% (worse)
macOS cprintf-lto 84288 B 0 B / +0.0% 193 B 0 B / +0.0% 686.653 ms -270.9 ms / -28.3% (better) 2.831 ms -1.897 ms / -40.1% (better)
macOS fmtprintf 1483792 B 0 B / +0.0% 860028 B 0 B / +0.0% 3.382 s -1.576 s / -31.8% (better) 5.864 ms -1.731 ms / -22.8% (better)
macOS fmtprintf-lto 1175808 B 0 B / +0.0% 832668 B 0 B / +0.0% 7.863 s -2.092 s / -21.0% (better) 6.509 ms -3.577 ms / -35.5% (better)
macOS println 114512 B 0 B / +0.0% 34330 B 0 B / +0.0% 595.309 ms -294.2 ms / -33.1% (better) 3.635 ms -2.036 ms / -35.9% (better)
macOS println-lto 118720 B 0 B / +0.0% 32308 B 0 B / +0.0% 728.930 ms -431.2 ms / -37.2% (better) 4.854 ms -2.464 ms / -33.7% (better)
Windows MinGW cprintf 19456 B 0 B / +0.0% 4550 B 0 B / +0.0% 1.172 s +42.09 ms / +3.7% (worse) 3.426 ms -5.7 us / -0.2% (better)
Windows MinGW cprintf-lto 17920 B 0 B / +0.0% 4486 B 0 B / +0.0% 1.154 s -37.21 ms / -3.1% (better) 3.495 ms -184.9 us / -5.0% (better)
Windows MinGW fmtprintf 1910784 B 0 B / +0.0% 586422 B 0 B / +0.0% 4.283 s +111.7 ms / +2.7% (worse) 8.203 ms -1.181 ms / -12.6% (better)
Windows MinGW fmtprintf-lto 1933824 B 0 B / +0.0% 535158 B 0 B / +0.0% 10.289 s +283.1 ms / +2.8% (worse) 8.121 ms -578.1 us / -6.6% (better)
Windows MinGW println 70656 B 0 B / +0.0% 23062 B 0 B / +0.0% 1.157 s +3.518 ms / +0.3% (worse) 6.791 ms +309.6 us / +4.8% (worse)
Windows MinGW println-lto 65024 B 0 B / +0.0% 20358 B 0 B / +0.0% 1.397 s +18.12 ms / +1.3% (worse) 6.704 ms +31.2 us / +0.5% (worse)
Windows MinGW 386 cprintf 43008 B 0 B / +0.0% 5326 B 0 B / +0.0% 1.071 s -16.43 ms / -1.5% (better) 5.004 ms -272 us / -5.2% (better)
Windows MinGW 386 cprintf-lto 20992 B 0 B / +0.0% 5094 B 0 B / +0.0% 1.119 s -8.876 ms / -0.8% (better) 5.676 ms +111.7 us / +2.0% (worse)
Windows MinGW 386 fmtprintf 1875968 B 0 B / +0.0% 462622 B 0 B / +0.0% 4.126 s +3.288 ms / +0.1% (worse) 9.993 ms -530.8 us / -5.0% (better)
Windows MinGW 386 fmtprintf-lto 2152448 B 0 B / +0.0% 440178 B 0 B / +0.0% 9.638 s +107.1 ms / +1.1% (worse) 10.204 ms -1.223 ms / -10.7% (better)
Windows MinGW 386 println 91136 B 0 B / +0.0% 19814 B 0 B / +0.0% 1.095 s -15.88 ms / -1.4% (better) 8.705 ms -604 us / -6.5% (better)
Windows MinGW 386 println-lto 69120 B 0 B / +0.0% 17726 B 0 B / +0.0% 1.296 s -24.15 ms / -1.8% (better) 8.381 ms -458.6 us / -5.2% (better)
Windows MinGW ARM64 cprintf 18944 B 0 B / +0.0% 4408 B 0 B / +0.0% 1.364 s +65.06 ms / +5.0% (worse) 6.322 ms +35.5 us / +0.6% (worse)
Windows MinGW ARM64 cprintf-lto 17920 B 0 B / +0.0% 4340 B 0 B / +0.0% 1.557 s +208.6 ms / +15.5% (worse) 8.313 ms +2.344 ms / +39.3% (worse)
Windows MinGW ARM64 fmtprintf 1799168 B 0 B / +0.0% 499204 B 0 B / +0.0% 3.971 s +33.94 ms / +0.9% (worse) 11.409 ms -267.5 us / -2.3% (better)
Windows MinGW ARM64 fmtprintf-lto 1857536 B 0 B / +0.0% 465312 B 0 B / +0.0% 9.109 s +77.18 ms / +0.9% (worse) 11.506 ms -20.2 us / -0.2% (better)
Windows MinGW ARM64 println 67072 B 0 B / +0.0% 21816 B 0 B / +0.0% 1.371 s +121.8 ms / +9.8% (worse) 10.409 ms +437.2 us / +4.4% (worse)
Windows MinGW ARM64 println-lto 63488 B 0 B / +0.0% 19436 B 0 B / +0.0% 1.517 s +83.89 ms / +5.9% (worse) 10.588 ms +585.2 us / +5.9% (worse)
Windows MSVC cprintf 120320 B 0 B / +0.0% 65782 B 0 B / +0.0% 894.429 ms -7.42 ms / -0.8% (better) 3.516 ms +121.3 us / +3.6% (worse)
Windows MSVC cprintf-lto 119808 B 0 B / +0.0% 65718 B 0 B / +0.0% 920.286 ms -14.7 ms / -1.6% (better) 3.408 ms -54.2 us / -1.6% (better)
Windows MSVC fmtprintf 1624576 B 0 B / +0.0% 681958 B 0 B / +0.0% 3.749 s +31.02 ms / +0.8% (worse) 10.384 ms +1.288 ms / +14.2% (worse)
Windows MSVC fmtprintf-lto 1615872 B 0 B / +0.0% 635126 B 0 B / +0.0% 8.963 s +1.793 ms / +0.02001% (worse) 9.338 ms -402.2 us / -4.1% (better)
Windows MSVC println 192000 B 0 B / +0.0% 118486 B 0 B / +0.0% 906.002 ms -9.421 ms / -1.0% (better) 7.183 ms -1.008 ms / -12.3% (better)
Windows MSVC println-lto 189952 B 0 B / +0.0% 116326 B 0 B / +0.0% 1.094 s -14.24 ms / -1.3% (better) 7.292 ms +232.7 us / +3.3% (worse)
Windows MSVC 386 cprintf 9728 B 0 B / +0.0% 3931 B 0 B / +0.0% 1.014 s +108.3 ms / +12.0% (worse) 5.652 ms +259.6 us / +4.8% (worse)
Windows MSVC 386 cprintf-lto 9216 B 0 B / +0.0% 3853 B 0 B / +0.0% 990.860 ms -120 ms / -10.8% (better) 5.851 ms -1.394 ms / -19.2% (better)
Windows MSVC 386 fmtprintf 1189376 B 0 B / +0.0% 446005 B 0 B / +0.0% 4.038 s +179.1 ms / +4.6% (worse) 11.821 ms +808 us / +7.3% (worse)
Windows MSVC 386 fmtprintf-lto 1224192 B 0 B / +0.0% 416617 B 0 B / +0.0% 8.951 s +145.6 ms / +1.7% (worse) 11.459 ms -665.4 us / -5.5% (better)
Windows MSVC 386 println 34304 B 0 B / +0.0% 18641 B 0 B / +0.0% 1.163 s +232 ms / +24.9% (worse) 12.601 ms +1.288 ms / +11.4% (worse)
Windows MSVC 386 println-lto 32256 B 0 B / +0.0% 16839 B 0 B / +0.0% 1.184 s +65.46 ms / +5.9% (worse) 9.591 ms +553 us / +6.1% (worse)
Windows MSVC ARM64 cprintf 11264 B 0 B / +0.0% 3976 B 0 B / +0.0% 1.061 s +131.1 us / +0.01236% (worse) 6.876 ms +105.8 us / +1.6% (worse)
Windows MSVC ARM64 cprintf-lto 10752 B 0 B / +0.0% 3868 B 0 B / +0.0% 1.072 s -6.947 ms / -0.6% (better) 6.921 ms +306.6 us / +4.6% (worse)
Windows MSVC ARM64 fmtprintf 1370112 B 0 B / +0.0% 498868 B 0 B / +0.0% 3.821 s +34.55 ms / +0.9% (worse) 14.526 ms +913.9 us / +6.7% (worse)
Windows MSVC ARM64 fmtprintf-lto 1387008 B 0 B / +0.0% 465732 B 0 B / +0.0% 8.688 s +146.1 ms / +1.7% (worse) 15.069 ms +810.3 us / +5.7% (worse)
Windows MSVC ARM64 println 41472 B 0 B / +0.0% 21608 B 0 B / +0.0% 1.072 s +1.451 ms / +0.1% (worse) 12.388 ms +377.3 us / +3.1% (worse)
Windows MSVC ARM64 println-lto 39424 B 0 B / +0.0% 19340 B 0 B / +0.0% 1.237 s +1.796 ms / +0.1% (worse) 11.803 ms -228.1 us / -1.9% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.560 ns/op -0.16 ns/op / -1.1% (better)
Linux BenchmarkMergeCompilerFlags 202.800 ns/op +8.8 ns/op / +4.5% (worse)
Linux BenchmarkMergeLinkerFlags 131.700 ns/op +5.2 ns/op / +4.1% (worse)
Linux BenchmarkChannelBuffered 55.300 ns/op +0.2 ns/op / +0.4% (worse)
Linux BenchmarkChannelHandoff 15278 ns/op +1442 ns/op / +10.4% (worse)
Linux BenchmarkDefer 47.380 ns/op +0.9 ns/op / +1.9% (worse)
Linux BenchmarkDirectCall 1.569 ns/op +0.006 ns/op / +0.4% (worse)
Linux BenchmarkGlobalRead 1.555 ns/op +0.002 ns/op / +0.1% (worse)
Linux BenchmarkGlobalWrite 7.782 ns/op +0.019 ns/op / +0.2% (worse)
Linux BenchmarkGoroutine 20825 ns/op -358 ns/op / -1.7% (better)
Linux BenchmarkInterfaceCall 5.887 ns/op -0.005 ns/op / -0.1% (better)
Linux BenchmarkRuntimeGetG 2.503 ns/op +0.075 ns/op / +3.1% (worse)
macOS BenchmarkLookupPCRandom 12.740 ns/op -3.91 ns/op / -23.5% (better)
macOS BenchmarkMergeCompilerFlags 103.600 ns/op -60.8 ns/op / -37.0% (better)
macOS BenchmarkMergeLinkerFlags 59.700 ns/op -25.48 ns/op / -29.9% (better)
macOS BenchmarkChannelBuffered 46.380 ns/op +14.49 ns/op / +45.4% (worse)
macOS BenchmarkChannelHandoff 10992 ns/op +4319 ns/op / +64.7% (worse)
macOS BenchmarkDefer 48.420 ns/op +1.91 ns/op / +4.1% (worse)
macOS BenchmarkDirectCall 1.173 ns/op -0.086 ns/op / -6.8% (better)
macOS BenchmarkGlobalRead 1.053 ns/op -0.292 ns/op / -21.7% (better)
macOS BenchmarkGlobalWrite 1.109 ns/op -0.28 ns/op / -20.2% (better)
macOS BenchmarkGoroutine 68721 ns/op +15346 ns/op / +28.8% (worse)
macOS BenchmarkInterfaceCall 5.205 ns/op +0.218 ns/op / +4.4% (worse)
macOS BenchmarkRuntimeGetG 2.609 ns/op +0.331 ns/op / +14.5% (worse)
Windows MinGW BenchmarkLookupPCRandom 13.290 ns/op +0.11 ns/op / +0.8% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 623.600 ns/op +3.3 ns/op / +0.5% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 562.700 ns/op +21.5 ns/op / +4.0% (worse)
Windows MinGW BenchmarkChannelBuffered 30.430 ns/op -1.45 ns/op / -4.5% (better)
Windows MinGW BenchmarkChannelHandoff 998.800 ns/op -88.2 ns/op / -8.1% (better)
Windows MinGW BenchmarkDefer 58.130 ns/op -0.21 ns/op / -0.4% (better)
Windows MinGW BenchmarkDirectCall 1.547 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkGlobalRead 1.547 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalWrite 2.470 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkGoroutine 85677 ns/op +3081 ns/op / +3.7% (worse)
Windows MinGW BenchmarkInterfaceCall 8.063 ns/op -0.002 ns/op / -0.0248% (better)
Windows MinGW BenchmarkRuntimeGetG 2.482 ns/op -0.045 ns/op / -1.8% (better)
Windows MinGW 386 BenchmarkLookupPCRandom 26.520 ns/op +0.04 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 766.500 ns/op +31.8 ns/op / +4.3% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 705.700 ns/op +19.6 ns/op / +2.9% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 39.390 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkChannelHandoff 920.300 ns/op +130.9 ns/op / +16.6% (worse)
Windows MinGW 386 BenchmarkDefer 43.510 ns/op +0.85 ns/op / +2.0% (worse)
Windows MinGW 386 BenchmarkDirectCall 1.547 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGlobalRead 1.547 ns/op -0.003 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkGlobalWrite 7.777 ns/op +0.008 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGoroutine 88374 ns/op +1680 ns/op / +1.9% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 8.353 ns/op +0.006 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkRuntimeGetG 2.168 ns/op -0.001 ns/op / -0.0461% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.070 ns/op -0.02 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 564.900 ns/op +4.5 ns/op / +0.8% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 529.800 ns/op -0.2 ns/op / -0.03774% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 39.640 ns/op +1.81 ns/op / +4.8% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 2806 ns/op +517 ns/op / +22.6% (worse)
Windows MinGW ARM64 BenchmarkDefer 52.570 ns/op +0.35 ns/op / +0.7% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.591 ns/op +0.0008 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGlobalRead 0.884 ns/op -0.0006 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.590 ns/op +0.0001 ns/op / +0.01697% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 58931 ns/op +77 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.215 ns/op +0.01 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 2.255 ns/op +0.449 ns/op / +24.9% (worse)
Windows MSVC BenchmarkLookupPCRandom 12.480 ns/op +0.16 ns/op / +1.3% (worse)
Windows MSVC BenchmarkMergeCompilerFlags 529.200 ns/op -18 ns/op / -3.3% (better)
Windows MSVC BenchmarkMergeLinkerFlags 455.400 ns/op -13.1 ns/op / -2.8% (better)
Windows MSVC BenchmarkChannelBuffered 31.720 ns/op -0.36 ns/op / -1.1% (better)
Windows MSVC BenchmarkChannelHandoff 1291 ns/op -45 ns/op / -3.4% (better)
Windows MSVC BenchmarkDefer 55.230 ns/op +0.45 ns/op / +0.8% (worse)
Windows MSVC BenchmarkDirectCall 1.747 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalRead 1.747 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalWrite 2.787 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGoroutine 66221 ns/op +1663 ns/op / +2.6% (worse)
Windows MSVC BenchmarkInterfaceCall 8.396 ns/op -0.249 ns/op / -2.9% (better)
Windows MSVC BenchmarkRuntimeGetG 2.452 ns/op +0.004 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 26.560 ns/op +0.09 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 771.800 ns/op +27 ns/op / +3.6% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 696.200 ns/op +13.2 ns/op / +1.9% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 39.280 ns/op +0.14 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 809.100 ns/op -79.7 ns/op / -9.0% (better)
Windows MSVC 386 BenchmarkDefer 45.360 ns/op -2.05 ns/op / -4.3% (better)
Windows MSVC 386 BenchmarkDirectCall 1.860 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkGlobalRead 1.867 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGlobalWrite 7.797 ns/op -0.011 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkGoroutine 89802 ns/op +123 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 8.230 ns/op -0.02 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 1.935 ns/op +0.001 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12 ns/op -0.05 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 562.100 ns/op -71.8 ns/op / -11.3% (better)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 527.200 ns/op -51.4 ns/op / -8.9% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 38.940 ns/op +1.23 ns/op / +3.3% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 1919 ns/op +114 ns/op / +6.3% (worse)
Windows MSVC ARM64 BenchmarkDefer 63.780 ns/op +0.45 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op -0.0001 ns/op / -0.01696% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.885 ns/op +0.0004 ns/op / +0.04523% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.764 ns/op +0.019 ns/op / +0.5% (worse)
Windows MSVC ARM64 BenchmarkGoroutine 54244 ns/op +1463 ns/op / +2.8% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.140 ns/op -0.001 ns/op / -0.02415% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.808 ns/op +0.017 ns/op / +0.9% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 898.500 ns/op -6.4 ns/op / -0.7% (better)
Linux AfterFuncZeroDelivery/LLGo 39168 ns/op +3886 ns/op / +11.0% (worse)
Linux CreateStop/Go 290.800 ns/op +0.4 ns/op / +0.1% (worse)
Linux CreateStop/LLGo 1820 ns/op +247 ns/op / +15.7% (worse)
Linux RearmStopped/Go 115.100 ns/op +0.4 ns/op / +0.3% (worse)
Linux RearmStopped/LLGo 1498 ns/op +200 ns/op / +15.4% (worse)
Linux ResetActive/Go 67.720 ns/op +0.21 ns/op / +0.3% (worse)
Linux ResetActive/LLGo 654.400 ns/op -527.6 ns/op / -44.6% (better)
Linux ResetHeap1024/Go 67.180 ns/op +0.04 ns/op / +0.1% (worse)
Linux ResetHeap1024/LLGo 175 ns/op +1 ns/op / +0.6% (worse)
macOS AfterFuncZeroDelivery/Go 406.100 ns/op -161.7 ns/op / -28.5% (better)
macOS AfterFuncZeroDelivery/LLGo 63243 ns/op -37224 ns/op / -37.1% (better)
macOS CreateStop/Go 126.900 ns/op -56.4 ns/op / -30.8% (better)
macOS CreateStop/LLGo 498 ns/op -375.7 ns/op / -43.0% (better)
macOS RearmStopped/Go 55.210 ns/op -16.01 ns/op / -22.5% (better)
macOS RearmStopped/LLGo 335.500 ns/op -199.1 ns/op / -37.2% (better)
macOS ResetActive/Go 41.250 ns/op -8.97 ns/op / -17.9% (better)
macOS ResetActive/LLGo 157.400 ns/op -61 ns/op / -27.9% (better)
macOS ResetHeap1024/Go 40.660 ns/op -12.86 ns/op / -24.0% (better)
macOS ResetHeap1024/LLGo 83.700 ns/op -44 ns/op / -34.5% (better)
Windows MinGW AfterFuncZeroDelivery/Go 573.300 ns/op +0.6 ns/op / +0.1% (worse)
Windows MinGW AfterFuncZeroDelivery/LLGo 170133 ns/op +1490 ns/op / +0.9% (worse)
Windows MinGW CreateStop/Go 116.300 ns/op -1.6 ns/op / -1.4% (better)
Windows MinGW CreateStop/LLGo 458.600 ns/op +30.6 ns/op / +7.1% (worse)
Windows MinGW RearmStopped/Go 31.240 ns/op -0.18 ns/op / -0.6% (better)
Windows MinGW RearmStopped/LLGo 271.900 ns/op -1.8 ns/op / -0.7% (better)
Windows MinGW ResetActive/Go 20.120 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW ResetActive/LLGo 274.200 ns/op +122.1 ns/op / +80.3% (worse)
Windows MinGW ResetHeap1024/Go 20.400 ns/op -0.06 ns/op / -0.3% (better)
Windows MinGW ResetHeap1024/LLGo 129.600 ns/op +6.4 ns/op / +5.2% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 939.300 ns/op -25.4 ns/op / -2.6% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 190338 ns/op +679 ns/op / +0.4% (worse)
Windows MinGW 386 CreateStop/Go 189 ns/op -4.7 ns/op / -2.4% (better)
Windows MinGW 386 CreateStop/LLGo 494.800 ns/op -24 ns/op / -4.6% (better)
Windows MinGW 386 RearmStopped/Go 63.580 ns/op +0.61 ns/op / +1.0% (worse)
Windows MinGW 386 RearmStopped/LLGo 339.600 ns/op -4.7 ns/op / -1.4% (better)
Windows MinGW 386 ResetActive/Go 39 ns/op +0.11 ns/op / +0.3% (worse)
Windows MinGW 386 ResetActive/LLGo 977.400 ns/op +4.7 ns/op / +0.5% (worse)
Windows MinGW 386 ResetHeap1024/Go 39.370 ns/op +0.15 ns/op / +0.4% (worse)
Windows MinGW 386 ResetHeap1024/LLGo 187.300 ns/op -0.8 ns/op / -0.4% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 669.400 ns/op -8 ns/op / -1.2% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 137398 ns/op +7102 ns/op / +5.5% (worse)
Windows MinGW ARM64 CreateStop/Go 200.100 ns/op -2.6 ns/op / -1.3% (better)
Windows MinGW ARM64 CreateStop/LLGo 353.500 ns/op -8.3 ns/op / -2.3% (better)
Windows MinGW ARM64 RearmStopped/Go 70.690 ns/op +0.11 ns/op / +0.2% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 249 ns/op -2.7 ns/op / -1.1% (better)
Windows MinGW ARM64 ResetActive/Go 30.870 ns/op -0.19 ns/op / -0.6% (better)
Windows MinGW ARM64 ResetActive/LLGo 119.700 ns/op -3.1 ns/op / -2.5% (better)
Windows MinGW ARM64 ResetHeap1024/Go 30.990 ns/op -0.1 ns/op / -0.3% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 127 ns/op -0.2 ns/op / -0.2% (better)
Windows MSVC AfterFuncZeroDelivery/Go 492.900 ns/op +13.5 ns/op / +2.8% (worse)
Windows MSVC AfterFuncZeroDelivery/LLGo 140451 ns/op +536 ns/op / +0.4% (worse)
Windows MSVC CreateStop/Go 115.400 ns/op -1.2 ns/op / -1.0% (better)
Windows MSVC CreateStop/LLGo 438.100 ns/op -30.2 ns/op / -6.4% (better)
Windows MSVC RearmStopped/Go 31.540 ns/op -0.06 ns/op / -0.2% (better)
Windows MSVC RearmStopped/LLGo 276.400 ns/op +1 ns/op / +0.4% (worse)
Windows MSVC ResetActive/Go 19.040 ns/op -0.04 ns/op / -0.2% (better)
Windows MSVC ResetActive/LLGo 162.800 ns/op +10.9 ns/op / +7.2% (worse)
Windows MSVC ResetHeap1024/Go 19.040 ns/op -0.31 ns/op / -1.6% (better)
Windows MSVC ResetHeap1024/LLGo 131.700 ns/op +0.8 ns/op / +0.6% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/Go 964.800 ns/op +9.9 ns/op / +1.0% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 185327 ns/op -5954 ns/op / -3.1% (better)
Windows MSVC 386 CreateStop/Go 196.800 ns/op +1.7 ns/op / +0.9% (worse)
Windows MSVC 386 CreateStop/LLGo 478.500 ns/op -15.4 ns/op / -3.1% (better)
Windows MSVC 386 RearmStopped/Go 63.510 ns/op -0.06 ns/op / -0.1% (better)
Windows MSVC 386 RearmStopped/LLGo 321.600 ns/op -13 ns/op / -3.9% (better)
Windows MSVC 386 ResetActive/Go 39.070 ns/op +0.1 ns/op / +0.3% (worse)
Windows MSVC 386 ResetActive/LLGo 974.700 ns/op +38.8 ns/op / +4.1% (worse)
Windows MSVC 386 ResetHeap1024/Go 39.620 ns/op +0.16 ns/op / +0.4% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 171.300 ns/op -0.2 ns/op / -0.1% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 659.600 ns/op -16.4 ns/op / -2.4% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 128169 ns/op +9493 ns/op / +8.0% (worse)
Windows MSVC ARM64 CreateStop/Go 195.800 ns/op +2.1 ns/op / +1.1% (worse)
Windows MSVC ARM64 CreateStop/LLGo 462 ns/op +24.4 ns/op / +5.6% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.580 ns/op -0.07 ns/op / -0.1% (better)
Windows MSVC ARM64 RearmStopped/LLGo 274.800 ns/op -1.6 ns/op / -0.6% (better)
Windows MSVC ARM64 ResetActive/Go 31 ns/op -0.06 ns/op / -0.2% (better)
Windows MSVC ARM64 ResetActive/LLGo 139.900 ns/op -6.6 ns/op / -4.5% (better)
Windows MSVC ARM64 ResetHeap1024/Go 31.070 ns/op -0.06 ns/op / -0.2% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 137.900 ns/op -0.2 ns/op / -0.1% (better)

Compared with be496b2cc5c3 measured in the same runner job.

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

b969914fe900 | workflow run | long-term charts

WebAssembly output sizes
Example, profile and compiler Wasm module vs base Generated JS glue vs base
cprintf/j32-emscripten/LLGo 135610 B 0 B / +0.0% 70901 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 134108 B 0 B / +0.0% 69235 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 124046 B 0 B / +0.0% 74134 B 0 B / +0.0%
cprintf/w32-goos-wasip1/LLGo 138444 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 138170 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 3087288 B 0 B / +0.0% 115325 B 0 B / +0.0%
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 3082171 B 0 B / +0.0% 98999 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 2826659 B 0 B / +0.0% 122264 B 0 B / +0.0%
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 2827999 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 2694467 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-emscripten/LLGo 134897 B 0 B / +0.0% 70901 B 0 B / +0.0%
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 133563 B 0 B / +0.0% 69235 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 123371 B 0 B / +0.0% 74134 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1479250 B 0 B / +0.0% 89361 B 0 B / +0.0%
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1482639 B 0 B / +0.0% 87695 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1366522 B 0 B / +0.0% 94654 B 0 B / +0.0%
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 1533364 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1458829 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/LLGo 137725 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 137518 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 5.320 s -99.47 ms / -1.8% (better)
j32-goos-js 5.538 s +54.03 ms / +1.0% (worse)
j64-emscripten-memory64 4.745 s +15.92 ms / +0.3% (worse)
reflectcall/w32-wasi 24.953 s -1.352 s / -5.1% (better)
w32-goos-wasip1 4.431 s -107.3 ms / -2.4% (better)
w32-wasi 4.577 s +171.1 ms / +3.9% (worse)

Compared with be496b2cc5c3 measured in the same runner job.

@cpunion cpunion changed the title build/wasm: select one Binaryen installation for Emscripten and WASI build/wasm: pin one LLGo Binaryen release for Emscripten and WASI Sep 23, 2026
@cpunion
cpunion merged commit 6cc9923 into xgo-dev:main Sep 26, 2026
88 checks passed
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