Skip to content

compiler: scan typed stack fields on explicit GC root targets - #3022

Merged
cpunion merged 16 commits into
xgo-dev:mainfrom
cpunion:feat/escape-typed-stack-roots-3012
Nov 9, 2026
Merged

cpunion merged 16 commits into
xgo-dev:mainfrom
cpunion:feat/escape-typed-stack-roots-3012

Conversation

@cpunion

@cpunion cpunion commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

Explicit-root targets currently retain pointer-bearing temporaries on the heap because rooting their address does not scan fields changed by a borrowing callee:

var holder struct { P *T }
replace(&holder) // assigns P, then may run GC
use(holder.P)

Register physical stack-field addresses and read their current pointers during collection. One finalized frame preserves entry allocas, initialization, replay/head guards and shared stack budgets. Enable eligible locals, interface boxes, closure/slice/map storage, synchronous receiver words and invocation-owned defer records. KeepAlive now uses the general mechanism. Loop/asynchronous/oversized storage retains heap ownership.

Depends on #3021; #2997 is merged. Incremental diff: cpunion/llgo@7eb338c...feat/escape-typed-stack-roots-3012

Validation: full compiler/SSA/escape/C ABI/compile-command suites; LLVM layout/optimization checks for J32/J64/W32; Go and native LLGo execution; actual J32, J64 and W32 execution, including two-worker J32, callee mutation, panic/defer and Goexit. Physical pointer-width tests cover Wasm32 C fields without overreading a Go word. Panic payloads use scanned explicit roots across longjmp; the macOS coverage regression passes six repetitions.

Part 2 of #3012 (sections 4, 7–8).

@fennoai fennoai Bot 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.

Review summary

This PR adds a whole-program frontend escape-analysis pass (internal/goescape/) plus SSA stack-allocation lowering and typed-stack-field GC roots so collectors scan pointer fields of explicitly-rooted stack objects. The design is careful and well-documented, and it is backed by an extensive test suite (escape precision, stack-root, transient, keepalive, J32/J64/W32 execution).

I ran code-quality, performance, security/memory-safety, and documentation-accuracy passes over the full diff.

Memory safety / GC soundness: I traced the stack-promotion decisions, the field-address root init ordering (buildGCRoots + initializeStackRoots publish the frame head only after zero-init and SetGCRoot stores complete; managed allocas are hoisted so field addresses dominate safepoints), the RootValue width decode, the read-only string/byte borrow revocation, and the budget arithmetic. I did not find a substantiated dangling-pointer, missed-root, overread, or overflow. The outlineGCRoots path is correctly disabled whenever stack objects are present, and both budget subtractions are guarded against unsigned underflow.

The findings below are a documentation mismatch plus a few non-blocking quality/performance notes. None are blocking.

  • One doc row contradicts the implemented map behavior.
  • Two compile-time cost notes (redundant recomputation) with easy memoization fixes.
  • One misleading comment.

Comment thread doc/escape-analysis.md Resolved
Comment thread internal/goescape/analysis.go Resolved
Comment thread internal/goescape/copy.go Resolved
Comment thread internal/goescape/capture.go Resolved
@codecov

codecov Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.08738% with 12 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/goescape/capture.go 93.42% 5 Missing ⚠️
internal/goescape/copy.go 95.91% 4 Missing ⚠️
internal/build/wasm_lto.go 75.00% 1 Missing ⚠️
internal/goescape/ssa.go 97.87% 1 Missing ⚠️
ssa/gcroot_stack.go 98.33% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

a26aeeb124ab | 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 155941 B +3287 B / +2.2% (worse) 88932 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 155024 B +3395 B / +2.2% (worse) 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 142573 B +2577 B / +1.8% (worse) 92103 B 0 B / +0.0%
cprintf/w32-goos-wasip1/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 1633337 B +16215 B / +1.0% (worse) 119298 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 1690898 B +15842 B / +0.9% (worse) 89416 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 1514224 B +7755 B / +0.5% (worse) 122540 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 1074741 B +12387 B / +1.2% (worse) 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 1076028 B +12853 B / +1.2% (worse) 0 B 0 B / 0.0%
j32-emscripten/LLGo 155131 B +3265 B / +2.1% (worse) 88932 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 154420 B +3324 B / +2.2% (worse) 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 141774 B +2520 B / +1.8% (worse) 92103 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1372717 B +22047 B / +1.6% (worse) 95650 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 1385625 B +20898 B / +1.5% (worse) 79699 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1256979 B +18260 B / +1.5% (worse) 99450 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 1042035 B +41138 B / +4.1% (worse) 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1043191 B +41285 B / +4.1% (worse) 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 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 9.378 s -1.269 s / -11.9% (better)
j32-goos-js 9.393 s -1.115 s / -10.6% (better)
j64-emscripten-memory64 8.592 s -1.185 s / -12.1% (better)
reflectcall/w32-wasi 31.866 s -674.5 ms / -2.1% (better)
w32-goos-wasip1 4.629 s -810.1 ms / -14.9% (better)
w32-wasi 4.498 s -463.5 ms / -9.3% (better)

Compared with f4f1d75b62cc measured in the same runner job.

@cpunion
cpunion force-pushed the feat/escape-typed-stack-roots-3012 branch from f38064d to 8b11bfa Compare November 8, 2026 22:46
@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown

LLGo baseline benchmarks

8b11bfa37a6f | workflow run | long-term charts

String equality benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkStringEquality/bytes/equal/1024/Go 25.820 ns/op +0.05 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/bytes/equal/1024/LLGo 63.230 ns/op -0.1 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/equal/128/Go 8.416 ns/op +0.033 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/bytes/equal/128/LLGo 12.070 ns/op -0.02 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/equal/8/Go 5.815 ns/op -0.005 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/bytes/equal/8/LLGo 4.273 ns/op -0.388 ns/op / -8.3% (better)
Linux BenchmarkStringEquality/bytes/first/1024/Go 6.630 ns/op +0.005 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/LLGo 2.717 ns/op -0.392 ns/op / -12.6% (better)
Linux BenchmarkStringEquality/bytes/first/128/Go 6.628 ns/op +0.009 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/first/128/LLGo 2.722 ns/op -0.427 ns/op / -13.6% (better)
Linux BenchmarkStringEquality/bytes/first/8/Go 5.838 ns/op +0.019 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/bytes/first/8/LLGo 2.719 ns/op -0.424 ns/op / -13.5% (better)
Linux BenchmarkStringEquality/bytes/last/1024/Go 25.770 ns/op +0.66 ns/op / +2.6% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/LLGo 62.500 ns/op -3.43 ns/op / -5.2% (better)
Linux BenchmarkStringEquality/bytes/last/128/Go 8.174 ns/op +0.026 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/bytes/last/128/LLGo 11.900 ns/op -0.27 ns/op / -2.2% (better)
Linux BenchmarkStringEquality/bytes/last/8/Go 5.842 ns/op +0.022 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/bytes/last/8/LLGo 3.493 ns/op -0.411 ns/op / -10.5% (better)
Linux BenchmarkStringEquality/strings/equal/1024/Go 23.210 ns/op +0.05 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/equal/1024/LLGo 54.710 ns/op -1.54 ns/op / -2.7% (better)
Linux BenchmarkStringEquality/strings/equal/128/Go 8.252 ns/op +0.016 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/equal/128/LLGo 11.490 ns/op -0.93 ns/op / -7.5% (better)
Linux BenchmarkStringEquality/strings/equal/8/Go 5.828 ns/op -0.018 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/strings/equal/8/LLGo 4.540 ns/op +0.26 ns/op / +6.1% (worse)
Linux BenchmarkStringEquality/strings/first/1024/Go 6.601 ns/op -0.003 ns/op / -0.04543% (better)
Linux BenchmarkStringEquality/strings/first/1024/LLGo 3.492 ns/op +0.773 ns/op / +28.4% (worse)
Linux BenchmarkStringEquality/strings/first/128/Go 6.601 ns/op +0.006 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/strings/first/128/LLGo 3.497 ns/op +0.716 ns/op / +25.7% (worse)
Linux BenchmarkStringEquality/strings/first/8/Go 5.819 ns/op -0.001 ns/op / -0.01718% (better)
Linux BenchmarkStringEquality/strings/first/8/LLGo 3.499 ns/op +0.565 ns/op / +19.3% (worse)
Linux BenchmarkStringEquality/strings/last/1024/Go 22.800 ns/op +0.17 ns/op / +0.8% (worse)
Linux BenchmarkStringEquality/strings/last/1024/LLGo 54.510 ns/op -1.67 ns/op / -3.0% (better)
Linux BenchmarkStringEquality/strings/last/128/Go 8.158 ns/op +0.018 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/last/128/LLGo 11.050 ns/op -1.11 ns/op / -9.1% (better)
Linux BenchmarkStringEquality/strings/last/8/Go 5.842 ns/op +0.022 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/strings/last/8/LLGo 4.305 ns/op +0.745 ns/op / +20.9% (worse)
macOS BenchmarkStringEquality/bytes/equal/1024/Go 27.690 ns/op -7.14 ns/op / -20.5% (better)
macOS BenchmarkStringEquality/bytes/equal/1024/LLGo 21.790 ns/op -8.89 ns/op / -29.0% (better)
macOS BenchmarkStringEquality/bytes/equal/128/Go 5.464 ns/op -4.886 ns/op / -47.2% (better)
macOS BenchmarkStringEquality/bytes/equal/128/LLGo 4.305 ns/op -0.578 ns/op / -11.8% (better)
macOS BenchmarkStringEquality/bytes/equal/8/Go 3.249 ns/op -4.735 ns/op / -59.3% (better)
macOS BenchmarkStringEquality/bytes/equal/8/LLGo 2.703 ns/op -0.007 ns/op / -0.3% (better)
macOS BenchmarkStringEquality/bytes/first/1024/Go 3.467 ns/op -5.619 ns/op / -61.8% (better)
macOS BenchmarkStringEquality/bytes/first/1024/LLGo 1.587 ns/op -0.324 ns/op / -17.0% (better)
macOS BenchmarkStringEquality/bytes/first/128/Go 3.914 ns/op -1.611 ns/op / -29.2% (better)
macOS BenchmarkStringEquality/bytes/first/128/LLGo 1.598 ns/op -0.19 ns/op / -10.6% (better)
macOS BenchmarkStringEquality/bytes/first/8/Go 3.243 ns/op -3.129 ns/op / -49.1% (better)
macOS BenchmarkStringEquality/bytes/first/8/LLGo 1.674 ns/op -0.141 ns/op / -7.8% (better)
macOS BenchmarkStringEquality/bytes/last/1024/Go 23.760 ns/op -10.84 ns/op / -31.3% (better)
macOS BenchmarkStringEquality/bytes/last/1024/LLGo 21.440 ns/op -5.52 ns/op / -20.5% (better)
macOS BenchmarkStringEquality/bytes/last/128/Go 5.506 ns/op -6.154 ns/op / -52.8% (better)
macOS BenchmarkStringEquality/bytes/last/128/LLGo 3.651 ns/op -0.534 ns/op / -12.8% (better)
macOS BenchmarkStringEquality/bytes/last/8/Go 3.246 ns/op -0.607 ns/op / -15.8% (better)
macOS BenchmarkStringEquality/bytes/last/8/LLGo 2.333 ns/op -1.369 ns/op / -37.0% (better)
macOS BenchmarkStringEquality/strings/equal/1024/Go 27.210 ns/op -13.16 ns/op / -32.6% (better)
macOS BenchmarkStringEquality/strings/equal/1024/LLGo 21.950 ns/op -6.19 ns/op / -22.0% (better)
macOS BenchmarkStringEquality/strings/equal/128/Go 5.315 ns/op -5.045 ns/op / -48.7% (better)
macOS BenchmarkStringEquality/strings/equal/128/LLGo 4.157 ns/op -1.842 ns/op / -30.7% (better)
macOS BenchmarkStringEquality/strings/equal/8/Go 3.250 ns/op -1.84 ns/op / -36.1% (better)
macOS BenchmarkStringEquality/strings/equal/8/LLGo 2.622 ns/op -0.225 ns/op / -7.9% (better)
macOS BenchmarkStringEquality/strings/first/1024/Go 4.076 ns/op -1.297 ns/op / -24.1% (better)
macOS BenchmarkStringEquality/strings/first/1024/LLGo 1.568 ns/op -0.224 ns/op / -12.5% (better)
macOS BenchmarkStringEquality/strings/first/128/Go 3.985 ns/op -0.798 ns/op / -16.7% (better)
macOS BenchmarkStringEquality/strings/first/128/LLGo 1.564 ns/op -0.189 ns/op / -10.8% (better)
macOS BenchmarkStringEquality/strings/first/8/Go 3.244 ns/op -1.589 ns/op / -32.9% (better)
macOS BenchmarkStringEquality/strings/first/8/LLGo 1.680 ns/op -0.108 ns/op / -6.0% (better)
macOS BenchmarkStringEquality/strings/last/1024/Go 26.130 ns/op -23.63 ns/op / -47.5% (better)
macOS BenchmarkStringEquality/strings/last/1024/LLGo 21.480 ns/op -4.74 ns/op / -18.1% (better)
macOS BenchmarkStringEquality/strings/last/128/Go 5.524 ns/op -0.779 ns/op / -12.4% (better)
macOS BenchmarkStringEquality/strings/last/128/LLGo 3.529 ns/op -0.443 ns/op / -11.2% (better)
macOS BenchmarkStringEquality/strings/last/8/Go 3.246 ns/op -2.021 ns/op / -38.4% (better)
macOS BenchmarkStringEquality/strings/last/8/LLGo 2.503 ns/op -0.731 ns/op / -22.6% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/Go 20.200 ns/op +0.01 ns/op / +0.04953% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/LLGo 41.760 ns/op -0.22 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/Go 7.478 ns/op -0.056 ns/op / -0.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/LLGo 11.080 ns/op -0.06 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/Go 5.946 ns/op -0.103 ns/op / -1.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/LLGo 4.689 ns/op -0.285 ns/op / -5.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/Go 5.976 ns/op -0.044 ns/op / -0.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/LLGo 3.708 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/128/Go 5.979 ns/op +0.035 ns/op / +0.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/128/LLGo 3.732 ns/op +0.023 ns/op / +0.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/8/Go 5.952 ns/op -0.002 ns/op / -0.03359% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/LLGo 3.706 ns/op -0.041 ns/op / -1.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/Go 19.350 ns/op +0.05 ns/op / +0.3% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/LLGo 41.120 ns/op +0.07 ns/op / +0.2% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/Go 6.610 ns/op -0.069 ns/op / -1.0% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/128/LLGo 10.730 ns/op -0.2 ns/op / -1.8% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/Go 5.962 ns/op +0.051 ns/op / +0.9% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/8/LLGo 4.367 ns/op -0.052 ns/op / -1.2% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/Go 20.120 ns/op -0.21 ns/op / -1.0% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/LLGo 38.710 ns/op +0.52 ns/op / +1.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/128/Go 7.655 ns/op +0.091 ns/op / +1.2% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/128/LLGo 7.159 ns/op -0.646 ns/op / -8.3% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/8/Go 6.344 ns/op +0.063 ns/op / +1.0% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/LLGo 3.395 ns/op -0.311 ns/op / -8.4% (better)
Windows MinGW BenchmarkStringEquality/strings/first/1024/Go 5.892 ns/op -0.001 ns/op / -0.01697% (better)
Windows MinGW BenchmarkStringEquality/strings/first/1024/LLGo 2.787 ns/op +0.312 ns/op / +12.6% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/Go 5.980 ns/op +0.027 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/LLGo 2.776 ns/op +0.239 ns/op / +9.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/Go 5.968 ns/op -0.007 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/strings/first/8/LLGo 2.863 ns/op +0.357 ns/op / +14.2% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/1024/Go 19.480 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkStringEquality/strings/last/1024/LLGo 38.080 ns/op +0.6 ns/op / +1.6% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/128/Go 6.669 ns/op +0.052 ns/op / +0.8% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/128/LLGo 6.976 ns/op -0.664 ns/op / -8.7% (better)
Windows MinGW BenchmarkStringEquality/strings/last/8/Go 5.950 ns/op -0.01 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/strings/last/8/LLGo 3.446 ns/op +0.325 ns/op / +10.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/Go 21.260 ns/op +0.74 ns/op / +3.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 28.960 ns/op +0.08 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/Go 6.190 ns/op -0.059 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/LLGo 5.642 ns/op -0.215 ns/op / -3.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/Go 4.787 ns/op -0.226 ns/op / -4.5% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/LLGo 3.145 ns/op -0.311 ns/op / -9.0% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/Go 4.400 ns/op -0.877 ns/op / -16.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/LLGo 2.162 ns/op -0.344 ns/op / -13.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/Go 6.071 ns/op +1.043 ns/op / +20.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/LLGo 2.155 ns/op -0.339 ns/op / -13.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/Go 5.289 ns/op +0.408 ns/op / +8.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/LLGo 2.187 ns/op -0.323 ns/op / -12.9% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/Go 20.750 ns/op +0.53 ns/op / +2.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/LLGo 29.230 ns/op +0.78 ns/op / +2.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/Go 6.128 ns/op +0.181 ns/op / +3.0% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/LLGo 5.129 ns/op -0.189 ns/op / -3.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/Go 5.549 ns/op +0.103 ns/op / +1.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/LLGo 2.683 ns/op -0.393 ns/op / -12.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/Go 20.150 ns/op +0.14 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/LLGo 26.340 ns/op -1.05 ns/op / -3.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/Go 6.156 ns/op +0.249 ns/op / +4.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/LLGo 5.377 ns/op -0.203 ns/op / -3.6% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/Go 4.640 ns/op +0.127 ns/op / +2.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/LLGo 2.907 ns/op -0.437 ns/op / -13.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/Go 4.560 ns/op -0.037 ns/op / -0.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/LLGo 2.141 ns/op -0.356 ns/op / -14.3% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/Go 4.618 ns/op -0.114 ns/op / -2.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/LLGo 2.140 ns/op -0.298 ns/op / -12.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/Go 4.870 ns/op +0.507 ns/op / +11.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/LLGo 2.172 ns/op -0.157 ns/op / -6.7% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/Go 19.500 ns/op +0.29 ns/op / +1.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/LLGo 25.920 ns/op -1.71 ns/op / -6.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/Go 5.989 ns/op -0.068 ns/op / -1.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/LLGo 5.065 ns/op -0.367 ns/op / -6.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/Go 4.692 ns/op -0.857 ns/op / -15.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/LLGo 2.673 ns/op -0.39 ns/op / -12.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.150 ns/op +0.06 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 39.210 ns/op -0.68 ns/op / -1.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.763 ns/op +0.042 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.229 ns/op -0.156 ns/op / -2.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.717 ns/op -0.024 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.517 ns/op -0.288 ns/op / -10.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.723 ns/op -0.029 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.548 ns/op -0.417 ns/op / -21.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.785 ns/op -0.033 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.569 ns/op -0.321 ns/op / -17.0% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.440 ns/op -0.039 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.593 ns/op -0.306 ns/op / -16.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/Go 31.140 ns/op +0.2 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39 ns/op -0.91 ns/op / -2.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.730 ns/op +0.035 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.745 ns/op -0.265 ns/op / -3.8% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.543 ns/op +0.084 ns/op / +2.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.220 ns/op -0.351 ns/op / -13.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.440 ns/op -0.09 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.790 ns/op -0.98 ns/op / -2.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.058 ns/op -0.019 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.837 ns/op -0.188 ns/op / -3.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.917 ns/op -0.018 ns/op / -0.5% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.666 ns/op +0.142 ns/op / +5.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.516 ns/op +0.012 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.591 ns/op -0.074 ns/op / -4.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/Go 4.548 ns/op -0.011 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.595 ns/op -0.079 ns/op / -4.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/Go 3.922 ns/op +0.025 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.564 ns/op -0.039 ns/op / -2.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.130 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.590 ns/op -0.46 ns/op / -1.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/Go 5.914 ns/op -0.014 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.501 ns/op -0.156 ns/op / -2.8% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/Go 3.870 ns/op -0.056 ns/op / -1.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.148 ns/op -0.049 ns/op / -2.2% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/Go 20 ns/op -0.28 ns/op / -1.4% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/LLGo 41.160 ns/op -0.45 ns/op / -1.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/Go 7.484 ns/op +0.022 ns/op / +0.3% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/LLGo 11.680 ns/op +0.64 ns/op / +5.8% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/Go 5.984 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/LLGo 5.072 ns/op +0.38 ns/op / +8.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/Go 6.081 ns/op +0.171 ns/op / +2.9% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/LLGo 3.722 ns/op +0.014 ns/op / +0.4% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/Go 5.960 ns/op +0.029 ns/op / +0.5% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/LLGo 3.790 ns/op -0.043 ns/op / -1.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/Go 5.910 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/8/LLGo 3.708 ns/op +0.001 ns/op / +0.02698% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/Go 19.750 ns/op +0.36 ns/op / +1.9% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/LLGo 43.290 ns/op +1.84 ns/op / +4.4% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/Go 6.530 ns/op -0.201 ns/op / -3.0% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/128/LLGo 11.760 ns/op +0.97 ns/op / +9.0% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/Go 5.873 ns/op -0.055 ns/op / -0.9% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/8/LLGo 4.365 ns/op -0.006 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/Go 20.080 ns/op -0.39 ns/op / -1.9% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/LLGo 37.700 ns/op -1.75 ns/op / -4.4% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/Go 7.455 ns/op +0.019 ns/op / +0.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/128/LLGo 6.994 ns/op -0.822 ns/op / -10.5% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/8/Go 6.016 ns/op -0.051 ns/op / -0.8% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/8/LLGo 3.705 ns/op +0.284 ns/op / +8.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/1024/Go 5.891 ns/op -0.025 ns/op / -0.4% (better)
Windows MSVC BenchmarkStringEquality/strings/first/1024/LLGo 2.469 ns/op -0.385 ns/op / -13.5% (better)
Windows MSVC BenchmarkStringEquality/strings/first/128/Go 6.002 ns/op +0.041 ns/op / +0.7% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/LLGo 2.474 ns/op -0.306 ns/op / -11.0% (better)
Windows MSVC BenchmarkStringEquality/strings/first/8/Go 6.044 ns/op +0.095 ns/op / +1.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/LLGo 2.529 ns/op -0.271 ns/op / -9.7% (better)
Windows MSVC BenchmarkStringEquality/strings/last/1024/Go 19.450 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/last/1024/LLGo 37.500 ns/op -1.39 ns/op / -3.6% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/Go 6.577 ns/op -0.079 ns/op / -1.2% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/LLGo 6.868 ns/op -0.87 ns/op / -11.2% (better)
Windows MSVC BenchmarkStringEquality/strings/last/8/Go 5.880 ns/op -0.016 ns/op / -0.3% (better)
Windows MSVC BenchmarkStringEquality/strings/last/8/LLGo 3.095 ns/op -0.405 ns/op / -11.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/Go 30.750 ns/op -0.15 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 84.760 ns/op -0.55 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/Go 9.898 ns/op +0.005 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/LLGo 16.250 ns/op -0.24 ns/op / -1.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/Go 7.311 ns/op -0.081 ns/op / -1.1% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.408 ns/op +0.132 ns/op / +2.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/Go 8.028 ns/op -0.047 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/LLGo 4.011 ns/op -0.002 ns/op / -0.04984% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/Go 8.004 ns/op -0.04 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/LLGo 4.014 ns/op -0.011 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/Go 6.998 ns/op -0.04 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/LLGo 4.087 ns/op +0.074 ns/op / +1.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/Go 30.330 ns/op -0.11 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/LLGo 84.710 ns/op -0.85 ns/op / -1.0% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/Go 9.532 ns/op -0.026 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/LLGo 15.640 ns/op -0.33 ns/op / -2.1% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/Go 7.834 ns/op +0.428 ns/op / +5.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.743 ns/op +0.077 ns/op / +1.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/Go 28.670 ns/op -0.18 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/LLGo 94.180 ns/op -0.91 ns/op / -1.0% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/Go 9.476 ns/op -0.071 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/LLGo 16.540 ns/op -0.27 ns/op / -1.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/Go 7.258 ns/op -0.389 ns/op / -5.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/LLGo 5.002 ns/op +0.05 ns/op / +1.0% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/Go 7.780 ns/op -0.069 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.708 ns/op -0.048 ns/op / -1.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/Go 7.773 ns/op -0.021 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/LLGo 3.729 ns/op -0.019 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/Go 7.126 ns/op +0.259 ns/op / +3.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/LLGo 3.757 ns/op -0.102 ns/op / -2.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/Go 28.040 ns/op +0.05 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/LLGo 93.330 ns/op -1.62 ns/op / -1.7% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/Go 9.013 ns/op -0.049 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/LLGo 16.020 ns/op -0.44 ns/op / -2.7% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/Go 7.159 ns/op -0.014 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/LLGo 4.673 ns/op +0.031 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.210 ns/op +0.12 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 39 ns/op -1.06 ns/op / -2.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.770 ns/op +0.047 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 6.987 ns/op -0.47 ns/op / -6.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.724 ns/op +0.009 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.717 ns/op -0.007 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.717 ns/op +0.007 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.736 ns/op -0.08 ns/op / -4.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.731 ns/op -0.017 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.748 ns/op -0.011 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.425 ns/op -0.119 ns/op / -3.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.731 ns/op -0.047 ns/op / -2.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/Go 30.970 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.130 ns/op -0.82 ns/op / -2.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.638 ns/op -0.052 ns/op / -0.8% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.622 ns/op -0.503 ns/op / -7.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.545 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.340 ns/op -0.033 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.410 ns/op +0.05 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.890 ns/op -0.9 ns/op / -2.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.088 ns/op +0.026 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.938 ns/op -0.116 ns/op / -1.9% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.945 ns/op +0.04 ns/op / +1.0% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.672 ns/op -0.039 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.524 ns/op +0.033 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.564 ns/op -0.049 ns/op / -3.0% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/Go 4.571 ns/op +0.015 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.593 ns/op -0.007 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/Go 3.870 ns/op -0.028 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.544 ns/op -0.076 ns/op / -4.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.160 ns/op +0.05 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.370 ns/op -1.09 ns/op / -3.0% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/Go 5.915 ns/op -0.011 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.489 ns/op -0.2 ns/op / -3.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/Go 3.862 ns/op -0.017 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.281 ns/op +0.076 ns/op / +3.4% (worse)

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8576 B 0 B / +0.0% 387 B 0 B / +0.0% 1.056 s -19.72 ms / -1.8% (better) 1.261 ms -5.773 us / -0.5% (better)
Linux cprintf-lto 8240 B 0 B / +0.0% 368 B 0 B / +0.0% 1.147 s +43.13 ms / +3.9% (worse) 1.412 ms +93.44 us / +7.1% (worse)
Linux fmtprintf 1938712 B -2112 B / -0.1% (better) 268158 B -396 B / -0.1% (better) 6.954 s +247.3 ms / +3.7% (worse) 3.270 ms +95.35 us / +3.0% (worse)
Linux fmtprintf-lto 1016472 B -1160 B / -0.1% (better) 209464 B -358 B / -0.2% (better) 15.703 s -397.6 ms / -2.5% (better) 3.050 ms +74.5 us / +2.5% (worse)
Linux println 259440 B -392 B / -0.2% (better) 18955 B +42 B / +0.2% (worse) 1.168 s +93.44 ms / +8.7% (worse) 1.623 ms +11.21 us / +0.7% (worse)
Linux println-lto 102392 B +128 B / +0.1% (worse) 15618 B +43 B / +0.3% (worse) 1.771 s -69.56 ms / -3.8% (better) 1.671 ms -41.59 us / -2.4% (better)
macOS cprintf 50944 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.383 s +84.04 ms / +6.5% (worse) 3.236 ms -586.6 us / -15.3% (better)
macOS cprintf-lto 50608 B 0 B / +0.0% 161 B 0 B / +0.0% 1.223 s -33.07 ms / -2.6% (better) 3.317 ms -321.1 us / -8.8% (better)
macOS fmtprintf 1232416 B -48 B / -0.003895% (better) 673693 B -308 B / -0.0457% (better) 5.850 s +728.2 ms / +14.2% (worse) 7.805 ms -2.838 ms / -26.7% (better)
macOS fmtprintf-lto 871312 B -64 B / -0.007345% (better) 519877 B -328 B / -0.1% (better) 9.192 s +372.6 ms / +4.2% (worse) 5.601 ms -540.9 us / -8.8% (better)
macOS println 100592 B -32 B / -0.0318% (better) 26195 B +96 B / +0.4% (worse) 1.278 s -112 ms / -8.1% (better) 3.707 ms -3.888 ms / -51.2% (better)
macOS println-lto 85632 B -48 B / -0.1% (better) 22479 B +92 B / +0.4% (worse) 2.281 s +869.4 ms / +61.6% (worse) 8.251 ms +4.313 ms / +109.5% (worse)
Windows MinGW cprintf 741376 B -512 B / -0.1% (better) 4230 B 0 B / +0.0% 1.981 s +35.79 ms / +1.8% (worse) 3.432 ms +66.9 us / +2.0% (worse)
Windows MinGW cprintf-lto 55808 B 0 B / +0.0% 4182 B 0 B / +0.0% 2.023 s -4.08 ms / -0.2% (better) 3.321 ms -237.8 us / -6.7% (better)
Windows MinGW fmtprintf 5135360 B -9728 B / -0.2% (better) 359286 B -1040 B / -0.3% (better) 6.709 s -469.1 ms / -6.5% (better) 9.203 ms -385 us / -4.0% (better)
Windows MinGW fmtprintf-lto 2758656 B -6656 B / -0.2% (better) 305414 B -1184 B / -0.4% (better) 10.796 s -259.9 ms / -2.4% (better) 9.726 ms -1.598 ms / -14.1% (better)
Windows MinGW println 803840 B -512 B / -0.1% (better) 27206 B +64 B / +0.2% (worse) 1.972 s -84.63 ms / -4.1% (better) 6.754 ms +76.1 us / +1.1% (worse)
Windows MinGW println-lto 233472 B +1536 B / +0.7% (worse) 22550 B +80 B / +0.4% (worse) 2.280 s -237.1 ms / -9.4% (better) 6.637 ms -827.8 us / -11.1% (better)
Windows MinGW 386 cprintf 750080 B 0 B / +0.0% 22518 B +48 B / +0.2% (worse) 1.673 s -13.91 ms / -0.8% (better) 8.966 ms +365.9 us / +4.3% (worse)
Windows MinGW 386 cprintf-lto 282112 B +512 B / +0.2% (worse) 19590 B +52 B / +0.3% (worse) 1.934 s -11.98 ms / -0.6% (better) 8.188 ms -511.8 us / -5.9% (better)
Windows MinGW 386 fmtprintf 4494848 B -6656 B / -0.1% (better) 282960 B -1104 B / -0.4% (better) 5.569 s -41.52 ms / -0.7% (better) 11.176 ms +374.8 us / +3.5% (worse)
Windows MinGW 386 fmtprintf-lto 2886656 B -6656 B / -0.2% (better) 255302 B -948 B / -0.4% (better) 9.069 s -69.64 ms / -0.8% (better) 11.164 ms -192.8 us / -1.7% (better)
Windows MinGW 386 println 748544 B -512 B / -0.1% (better) 22464 B +48 B / +0.2% (worse) 1.654 s -20.57 ms / -1.2% (better) 8.183 ms -630.1 us / -7.1% (better)
Windows MinGW 386 println-lto 281088 B +1024 B / +0.4% (worse) 19524 B +52 B / +0.3% (worse) 1.924 s -29.79 ms / -1.5% (better) 8.395 ms -515.5 us / -5.8% (better)
Windows MinGW ARM64 cprintf 751104 B +512 B / +0.1% (worse) 4028 B 0 B / +0.0% 2.171 s -58.76 ms / -2.6% (better) 6.245 ms -644.1 us / -9.3% (better)
Windows MinGW ARM64 cprintf-lto 55296 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.150 s -109.9 ms / -4.9% (better) 6.281 ms -327.5 us / -5.0% (better)
Windows MinGW ARM64 fmtprintf 5079040 B -9216 B / -0.2% (better) 300060 B -992 B / -0.3% (better) 6.336 s -23.77 ms / -0.4% (better) 13.538 ms -1.201 ms / -8.1% (better)
Windows MinGW ARM64 fmtprintf-lto 2818560 B -7168 B / -0.3% (better) 256464 B -992 B / -0.4% (better) 10.087 s +135.5 ms / +1.4% (worse) 14.165 ms +954.8 us / +7.2% (worse)
Windows MinGW ARM64 println 811520 B +512 B / +0.1% (worse) 25408 B +108 B / +0.4% (worse) 2.132 s -155.3 ms / -6.8% (better) 10.977 ms -625.6 us / -5.4% (better)
Windows MinGW ARM64 println-lto 236544 B +512 B / +0.2% (worse) 21800 B +104 B / +0.5% (worse) 2.425 s -53.93 ms / -2.2% (better) 10.607 ms -520.7 us / -4.7% (better)
Windows MSVC cprintf 986112 B 0 B / +0.0% 66003 B 0 B / +0.0% 2.023 s -6.601 ms / -0.3% (better) 3.608 ms +49.5 us / +1.4% (worse)
Windows MSVC cprintf-lto 303616 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.980 s -71.93 ms / -3.5% (better) 3.347 ms -108.2 us / -3.1% (better)
Windows MSVC fmtprintf 5435904 B -8704 B / -0.2% (better) 455350 B -1040 B / -0.2% (better) 6.618 s -138.7 ms / -2.1% (better) 10.771 ms -1.217 ms / -10.2% (better)
Windows MSVC fmtprintf-lto 3083264 B -7680 B / -0.2% (better) 403766 B -1232 B / -0.3% (better) 10.843 s +161.6 ms / +1.5% (worse) 12.419 ms +925.6 us / +8.1% (worse)
Windows MSVC println 1117696 B -1024 B / -0.1% (better) 123350 B +64 B / +0.1% (worse) 1.941 s -77.84 ms / -3.9% (better) 7.088 ms -323.7 us / -4.4% (better)
Windows MSVC println-lto 553984 B 0 B / +0.0% 119366 B +80 B / +0.1% (worse) 2.295 s +65.3 ms / +2.9% (worse) 7.833 ms +406.3 us / +5.5% (worse)
Windows MSVC 386 cprintf 658944 B 0 B / +0.0% 21170 B +20 B / +0.1% (worse) 1.881 s -260.1 ms / -12.1% (better) 9.355 ms -2.061 ms / -18.1% (better)
Windows MSVC 386 cprintf-lto 222208 B +1024 B / +0.5% (worse) 19007 B +48 B / +0.3% (worse) 2.145 s -13.44 ms / -0.6% (better) 9.045 ms -605.1 us / -6.3% (better)
Windows MSVC 386 fmtprintf 4221952 B -6144 B / -0.1% (better) 266390 B -1132 B / -0.4% (better) 6.388 s +95.36 ms / +1.5% (worse) 12.441 ms +492.7 us / +4.1% (worse)
Windows MSVC 386 fmtprintf-lto 2700800 B -4608 B / -0.2% (better) 235041 B -960 B / -0.4% (better) 9.915 s -54.61 ms / -0.5% (better) 12.266 ms -956.2 us / -7.2% (better)
Windows MSVC 386 println 656896 B 0 B / +0.0% 21116 B +20 B / +0.1% (worse) 1.995 s +131.2 ms / +7.0% (worse) 12.387 ms +2.998 ms / +31.9% (worse)
Windows MSVC 386 println-lto 220160 B +512 B / +0.2% (worse) 18937 B +48 B / +0.3% (worse) 2.120 s -10.92 ms / -0.5% (better) 9.559 ms +352.2 us / +3.8% (worse)
Windows MSVC ARM64 cprintf 753664 B +512 B / +0.1% (worse) 4240 B 0 B / +0.0% 1.946 s -37.83 ms / -1.9% (better) 6.707 ms -605.4 us / -8.3% (better)
Windows MSVC ARM64 cprintf-lto 60928 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.972 s -49.91 ms / -2.5% (better) 6.700 ms -611.4 us / -8.4% (better)
Windows MSVC ARM64 fmtprintf 5075456 B -9216 B / -0.2% (better) 300380 B -1016 B / -0.3% (better) 6.182 s -24.3 ms / -0.4% (better) 15.999 ms -1.3 us / -0.008125% (better)
Windows MSVC ARM64 fmtprintf-lto 2826752 B -7168 B / -0.3% (better) 257408 B -992 B / -0.4% (better) 9.721 s +55.46 ms / +0.6% (worse) 16.697 ms +575.6 us / +3.6% (worse)
Windows MSVC ARM64 println 813568 B -1024 B / -0.1% (better) 25892 B +88 B / +0.3% (worse) 1.951 s -25.06 ms / -1.3% (better) 12.055 ms -425.1 us / -3.4% (better)
Windows MSVC ARM64 println-lto 242176 B 0 B / +0.0% 22352 B +112 B / +0.5% (worse) 2.210 s -62.14 ms / -2.7% (better) 12.502 ms -934.4 us / -7.0% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.700 ns/op +0.25 ns/op / +1.7% (worse)
Linux BenchmarkMergeCompilerFlags 198.500 ns/op +3.1 ns/op / +1.6% (worse)
Linux BenchmarkMergeLinkerFlags 137.200 ns/op +3 ns/op / +2.2% (worse)
Linux BenchmarkChannelBuffered 72.350 ns/op +0.36 ns/op / +0.5% (worse)
Linux BenchmarkChannelHandoff 13257 ns/op -1073 ns/op / -7.5% (better)
Linux BenchmarkDefer 18.790 ns/op +1.59 ns/op / +9.2% (worse)
Linux BenchmarkDirectCall 1.559 ns/op -0.005 ns/op / -0.3% (better)
Linux BenchmarkGlobalRead 1.551 ns/op -0.005 ns/op / -0.3% (better)
Linux BenchmarkGlobalWrite 7.775 ns/op +0.007 ns/op / +0.1% (worse)
Linux BenchmarkGoroutine 25395 ns/op +1419 ns/op / +5.9% (worse)
Linux BenchmarkInterfaceCall 4.674 ns/op -0.052 ns/op / -1.1% (better)
Linux BenchmarkRuntimeGetG 2.438 ns/op -0.001 ns/op / -0.041% (better)
macOS BenchmarkLookupPCRandom 16.860 ns/op +3.8 ns/op / +29.1% (worse)
macOS BenchmarkMergeCompilerFlags 140.100 ns/op +25.4 ns/op / +22.1% (worse)
macOS BenchmarkMergeLinkerFlags 77.770 ns/op +7.67 ns/op / +10.9% (worse)
macOS BenchmarkChannelBuffered 26.400 ns/op -11.55 ns/op / -30.4% (better)
macOS BenchmarkChannelHandoff 8069 ns/op -4597 ns/op / -36.3% (better)
macOS BenchmarkDefer 10.840 ns/op -4.73 ns/op / -30.4% (better)
macOS BenchmarkDirectCall 1.080 ns/op -0.076 ns/op / -6.6% (better)
macOS BenchmarkGlobalRead 1.088 ns/op 0 ns/op / +0.0%
macOS BenchmarkGlobalWrite 1.312 ns/op +0.197 ns/op / +17.7% (worse)
macOS BenchmarkGoroutine 97267 ns/op +23556 ns/op / +32.0% (worse)
macOS BenchmarkInterfaceCall 3.371 ns/op -1.039 ns/op / -23.6% (better)
macOS BenchmarkRuntimeGetG 2.470 ns/op -0.583 ns/op / -19.1% (better)
Windows MinGW BenchmarkLookupPCRandom 13.120 ns/op +0.16 ns/op / +1.2% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 629 ns/op -10.9 ns/op / -1.7% (better)
Windows MinGW BenchmarkMergeLinkerFlags 548 ns/op -8.8 ns/op / -1.6% (better)
Windows MinGW BenchmarkChannelBuffered 36.230 ns/op -4.4 ns/op / -10.8% (better)
Windows MinGW BenchmarkChannelHandoff 1164 ns/op +33 ns/op / +2.9% (worse)
Windows MinGW BenchmarkDefer 14.290 ns/op -0.59 ns/op / -4.0% (better)
Windows MinGW BenchmarkDirectCall 1.548 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 1.548 ns/op -0.31 ns/op / -16.7% (better)
Windows MinGW BenchmarkGlobalWrite 2.471 ns/op +0.009 ns/op / +0.4% (worse)
Windows MinGW BenchmarkGoroutine 94853 ns/op +3494 ns/op / +3.8% (worse)
Windows MinGW BenchmarkInterfaceCall 6.844 ns/op -0.589 ns/op / -7.9% (better)
Windows MinGW BenchmarkRuntimeGetG 2.172 ns/op +0.006 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 60.260 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 639.100 ns/op -20.2 ns/op / -3.1% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 635.300 ns/op -11 ns/op / -1.7% (better)
Windows MinGW 386 BenchmarkChannelBuffered 58.660 ns/op -0.25 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkChannelHandoff 1528 ns/op -166 ns/op / -9.8% (better)
Windows MinGW 386 BenchmarkDefer 11.250 ns/op -0.53 ns/op / -4.5% (better)
Windows MinGW 386 BenchmarkDirectCall 1.023 ns/op +0.1551 ns/op / +17.9% (worse)
Windows MinGW 386 BenchmarkGlobalRead 1.174 ns/op +0.034 ns/op / +3.0% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 14.870 ns/op +0.05 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkGoroutine 201663 ns/op +8301 ns/op / +4.3% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 3.952 ns/op -0.04 ns/op / -1.0% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 1.161 ns/op -0.079 ns/op / -6.4% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.010 ns/op -0.11 ns/op / -0.9% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 563 ns/op +12.7 ns/op / +2.3% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 528.600 ns/op +7.3 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 42.530 ns/op -0.47 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 3218 ns/op +246 ns/op / +8.3% (worse)
Windows MinGW ARM64 BenchmarkDefer 12.090 ns/op +0.29 ns/op / +2.5% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.590 ns/op +0.0006 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGlobalRead 0.590 ns/op -0.0761 ns/op / -11.4% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.589 ns/op -0.0739 ns/op / -11.1% (better)
Windows MinGW ARM64 BenchmarkGoroutine 61122 ns/op +606 ns/op / +1.0% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 3.853 ns/op -0.111 ns/op / -2.8% (better)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.769 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkLookupPCRandom 12.870 ns/op -0.3 ns/op / -2.3% (better)
Windows MSVC BenchmarkMergeCompilerFlags 628.500 ns/op +3.6 ns/op / +0.6% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 532.900 ns/op -4.7 ns/op / -0.9% (better)
Windows MSVC BenchmarkChannelBuffered 32.520 ns/op -1.71 ns/op / -5.0% (better)
Windows MSVC BenchmarkChannelHandoff 1292 ns/op +70 ns/op / +5.7% (worse)
Windows MSVC BenchmarkDefer 14.890 ns/op +0.61 ns/op / +4.3% (worse)
Windows MSVC BenchmarkDirectCall 1.549 ns/op -0.309 ns/op / -16.6% (better)
Windows MSVC BenchmarkGlobalRead 1.549 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalWrite 2.473 ns/op +0.015 ns/op / +0.6% (worse)
Windows MSVC BenchmarkGoroutine 90198 ns/op +2492 ns/op / +2.8% (worse)
Windows MSVC BenchmarkInterfaceCall 7.146 ns/op -0.61 ns/op / -7.9% (better)
Windows MSVC BenchmarkRuntimeGetG 2.481 ns/op +0.311 ns/op / +14.3% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 26.590 ns/op +0.07 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 724.600 ns/op +17.6 ns/op / +2.5% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 680.700 ns/op +10.8 ns/op / +1.6% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 44.740 ns/op +1.2 ns/op / +2.8% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 1118 ns/op -117 ns/op / -9.5% (better)
Windows MSVC 386 BenchmarkDefer 15.540 ns/op -0.56 ns/op / -3.5% (better)
Windows MSVC 386 BenchmarkDirectCall 1.548 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGlobalRead 1.549 ns/op -0.314 ns/op / -16.9% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.784 ns/op +0.001 ns/op / +0.01285% (worse)
Windows MSVC 386 BenchmarkGoroutine 106886 ns/op -2405 ns/op / -2.2% (better)
Windows MSVC 386 BenchmarkInterfaceCall 7.435 ns/op +0.002 ns/op / +0.02691% (worse)
Windows MSVC 386 BenchmarkRuntimeGetG 1.925 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.130 ns/op +0.02 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 577 ns/op -2.9 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 530 ns/op -3 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 45.350 ns/op -0.55 ns/op / -1.2% (better)
Windows MSVC ARM64 BenchmarkChannelHandoff 2455 ns/op -682 ns/op / -21.7% (better)
Windows MSVC ARM64 BenchmarkDefer 11.760 ns/op -0.44 ns/op / -3.6% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.663 ns/op +0.0739 ns/op / +12.5% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.589 ns/op -0.0741 ns/op / -11.2% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.751 ns/op -0.042 ns/op / -1.1% (better)
Windows MSVC ARM64 BenchmarkGoroutine 58042 ns/op -3367 ns/op / -5.5% (better)
Windows MSVC ARM64 BenchmarkInterfaceCall 3.855 ns/op -0.016 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.773 ns/op -0.029 ns/op / -1.6% (better)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 911.900 ns/op +7.4 ns/op / +0.8% (worse)
Linux AfterFuncZeroDelivery/LLGo 37511 ns/op +744 ns/op / +2.0% (worse)
Linux CreateStop/Go 290.700 ns/op +0.7 ns/op / +0.2% (worse)
Linux CreateStop/LLGo 1499 ns/op +68 ns/op / +4.8% (worse)
Linux RearmStopped/Go 116.300 ns/op +0.4 ns/op / +0.3% (worse)
Linux RearmStopped/LLGo 1061 ns/op -8 ns/op / -0.7% (better)
Linux ResetActive/Go 68.730 ns/op +0.17 ns/op / +0.2% (worse)
Linux ResetActive/LLGo 599.700 ns/op -28.9 ns/op / -4.6% (better)
Linux ResetHeap1024/Go 67.400 ns/op +0.31 ns/op / +0.5% (worse)
Linux ResetHeap1024/LLGo 132.900 ns/op +0.7 ns/op / +0.5% (worse)
macOS AfterFuncZeroDelivery/Go 434.100 ns/op -195.4 ns/op / -31.0% (better)
macOS AfterFuncZeroDelivery/LLGo 49196 ns/op -13177 ns/op / -21.1% (better)
macOS CreateStop/Go 201.800 ns/op +42.9 ns/op / +27.0% (worse)
macOS CreateStop/LLGo 366.300 ns/op -237.6 ns/op / -39.3% (better)
macOS RearmStopped/Go 58.610 ns/op -19.18 ns/op / -24.7% (better)
macOS RearmStopped/LLGo 271.800 ns/op -100.9 ns/op / -27.1% (better)
macOS ResetActive/Go 40.840 ns/op -6.68 ns/op / -14.1% (better)
macOS ResetActive/LLGo 189.300 ns/op -9.3 ns/op / -4.7% (better)
macOS ResetHeap1024/Go 39.020 ns/op -16.59 ns/op / -29.8% (better)
macOS ResetHeap1024/LLGo 62.350 ns/op -49.15 ns/op / -44.1% (better)
Windows MinGW AfterFuncZeroDelivery/Go 552.400 ns/op -11.4 ns/op / -2.0% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 185288 ns/op +2413 ns/op / +1.3% (worse)
Windows MinGW CreateStop/Go 117.100 ns/op -0.7 ns/op / -0.6% (better)
Windows MinGW CreateStop/LLGo 720.700 ns/op -74.6 ns/op / -9.4% (better)
Windows MinGW RearmStopped/Go 31.540 ns/op +0.2 ns/op / +0.6% (worse)
Windows MinGW RearmStopped/LLGo 253.500 ns/op +28.6 ns/op / +12.7% (worse)
Windows MinGW ResetActive/Go 20.080 ns/op -0.05 ns/op / -0.2% (better)
Windows MinGW ResetActive/LLGo 179.400 ns/op -6.2 ns/op / -3.3% (better)
Windows MinGW ResetHeap1024/Go 20.360 ns/op -0.16 ns/op / -0.8% (better)
Windows MinGW ResetHeap1024/LLGo 100.500 ns/op -1.4 ns/op / -1.4% (better)
Windows MinGW 386 AfterFuncZeroDelivery/Go 866.400 ns/op +0.2 ns/op / +0.02309% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 258027 ns/op -29375 ns/op / -10.2% (better)
Windows MinGW 386 CreateStop/Go 221.900 ns/op -0.2 ns/op / -0.1% (better)
Windows MinGW 386 CreateStop/LLGo 1038 ns/op +281.5 ns/op / +37.2% (worse)
Windows MinGW 386 RearmStopped/Go 81.230 ns/op +0.7 ns/op / +0.9% (worse)
Windows MinGW 386 RearmStopped/LLGo 323.700 ns/op -147.8 ns/op / -31.3% (better)
Windows MinGW 386 ResetActive/Go 39.460 ns/op +0.58 ns/op / +1.5% (worse)
Windows MinGW 386 ResetActive/LLGo 415.800 ns/op -12.1 ns/op / -2.8% (better)
Windows MinGW 386 ResetHeap1024/Go 39.140 ns/op +0.08 ns/op / +0.2% (worse)
Windows MinGW 386 ResetHeap1024/LLGo 119.600 ns/op +4.2 ns/op / +3.6% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 659.600 ns/op -14.3 ns/op / -2.1% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 143438 ns/op +4538 ns/op / +3.3% (worse)
Windows MinGW ARM64 CreateStop/Go 205.400 ns/op -4 ns/op / -1.9% (better)
Windows MinGW ARM64 CreateStop/LLGo 313.200 ns/op +5.7 ns/op / +1.9% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.590 ns/op -0.05 ns/op / -0.1% (better)
Windows MinGW ARM64 RearmStopped/LLGo 163.100 ns/op +3 ns/op / +1.9% (worse)
Windows MinGW ARM64 ResetActive/Go 31.040 ns/op +0.06 ns/op / +0.2% (worse)
Windows MinGW ARM64 ResetActive/LLGo 85.190 ns/op +0.91 ns/op / +1.1% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 31.040 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 91.280 ns/op -1.5 ns/op / -1.6% (better)
Windows MSVC AfterFuncZeroDelivery/Go 568.900 ns/op -0.1 ns/op / -0.01757% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 185328 ns/op +3189 ns/op / +1.8% (worse)
Windows MSVC CreateStop/Go 115.900 ns/op -0.2 ns/op / -0.2% (better)
Windows MSVC CreateStop/LLGo 445 ns/op +4.9 ns/op / +1.1% (worse)
Windows MSVC RearmStopped/Go 31.380 ns/op -0.39 ns/op / -1.2% (better)
Windows MSVC RearmStopped/LLGo 221 ns/op -26 ns/op / -10.5% (better)
Windows MSVC ResetActive/Go 20.080 ns/op +0.05 ns/op / +0.2% (worse)
Windows MSVC ResetActive/LLGo 199.600 ns/op -33.1 ns/op / -14.2% (better)
Windows MSVC ResetHeap1024/Go 20.440 ns/op +0.1 ns/op / +0.5% (worse)
Windows MSVC ResetHeap1024/LLGo 104.700 ns/op -0.4 ns/op / -0.4% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 948.300 ns/op -8.2 ns/op / -0.9% (better)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 201221 ns/op +1273 ns/op / +0.6% (worse)
Windows MSVC 386 CreateStop/Go 190.800 ns/op -1.4 ns/op / -0.7% (better)
Windows MSVC 386 CreateStop/LLGo 443.600 ns/op -102.8 ns/op / -18.8% (better)
Windows MSVC 386 RearmStopped/Go 63.410 ns/op +0.14 ns/op / +0.2% (worse)
Windows MSVC 386 RearmStopped/LLGo 474.700 ns/op +74.5 ns/op / +18.6% (worse)
Windows MSVC 386 ResetActive/Go 38.900 ns/op +0.01 ns/op / +0.02571% (worse)
Windows MSVC 386 ResetActive/LLGo 1074 ns/op +31 ns/op / +3.0% (worse)
Windows MSVC 386 ResetHeap1024/Go 39.360 ns/op +0.09 ns/op / +0.2% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 141.400 ns/op +0.7 ns/op / +0.5% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 682.800 ns/op +18.7 ns/op / +2.8% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 144094 ns/op +965 ns/op / +0.7% (worse)
Windows MSVC ARM64 CreateStop/Go 203.300 ns/op +4.8 ns/op / +2.4% (worse)
Windows MSVC ARM64 CreateStop/LLGo 340 ns/op -44.9 ns/op / -11.7% (better)
Windows MSVC ARM64 RearmStopped/Go 70.840 ns/op +0.18 ns/op / +0.3% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 178.700 ns/op +2.1 ns/op / +1.2% (worse)
Windows MSVC ARM64 ResetActive/Go 31.280 ns/op +0.31 ns/op / +1.0% (worse)
Windows MSVC ARM64 ResetActive/LLGo 124 ns/op +19.6 ns/op / +18.8% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.150 ns/op +0.15 ns/op / +0.5% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 91.620 ns/op -0.74 ns/op / -0.8% (better)

Compared with a87e123ec339 measured in the same runner job.

@cpunion
cpunion force-pushed the feat/escape-typed-stack-roots-3012 branch from 7d600ca to a26aeeb Compare November 9, 2026 12:50
@cpunion
cpunion merged commit d7c601f into xgo-dev:main Nov 9, 2026
148 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