Skip to content

compiler: stack allocate map key and range temporaries - #3039

Merged
cpunion merged 2 commits into
xgo-dev:mainfrom
cpunion:fix/3012-runtime-temporary-ownership
Nov 10, 2026
Merged

cpunion merged 2 commits into
xgo-dev:mainfrom
cpunion:fix/3012-runtime-temporary-ownership

Conversation

@cpunion

@cpunion cpunion commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

Finish #3012's remaining runtime temporaries: caller-owned map keys and map/string range iterators. Reuse the shared 64 KiB stack budget and typed field roots; retain heap fallback and the existing heap-owning iterator APIs. Inserted keys keep map-owned copies, and restarted ranges reset all iterator fields.

M4 Max, macOS/arm64, LLVM 22.1.8, Go 1.27.3; five alternating rounds of 100,000 calls. LLGo uses -O3 -lto=full, Go defaults. Baseline is main 4a7f42648, including #3021–#3023; measured fix c70305d7f. Bytes are BDWGC/Go allocation accounting per call; timings are isolated kernels.

Case Go (B / ns per call) LLGo main (B / ns per call) This PR (B / ns per call)
Struct key lookup 0.00 / 6.91 32.00 / 32.99 0.00 / 18.91
Struct key update 0.00 / 7.07 32.02 / 35.91 0.00 / 18.51
Struct key delete (missing) 0.00 / 6.29 31.99 / 21.12 0.00 / 7.53
Indirect key lookup 0.00 / 17.57 272.01 / 144.54 0.00 / 48.06
Map range 0.00 / 25.83 112.01 / 69.08 0.00 / 24.49
String range 0.00 / 3.86 32.02 / 18.32 0.00 / 3.73
Scalar key control 0.00 / 2.87 0.00 / 2.90 0.00 / 2.80

Native probe: 2,138,144 → 2,137,760 bytes. Reproduce with benchmark/escape/mapkeys.

Validation: full compiler/SSA/C ABI/escape suites (-short); native language, sync and synctest suites; native full LTO; J32/J64/W32 and two-worker J32 execution; six-target IR/budget checks; Go semantic tests; reproducible litgen checks. Both allocation guards fail on baseline and report 0 bytes after the fix. go vet ./... retains the same 12 baseline diagnostics.

@cpunion

cpunion commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator Author

@fennoai Please review the final runtime-temporary work for #3012: caller-owned map key copies and map/string range iterators, with typed GC roots, shared stack budgets, heap fallback, and preserved heap-owning iterator APIs. Local compiler, native/full-LTO and J32/J64/W32 regression suites pass; the PR body includes Go/main/fix measurements.

@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 lands #3012: map-key temporaries and map/string range iterators now use caller/invocation-owned entry-frame stack slots under the shared 64 KiB per-function escape-stack budget, with a heap fallback when the budget is exhausted. The design is clean and the change is well-tested.

Correctness / memory safety — looks sound. I traced the critical lifetime claims:

  • RangeBorrowed is applied to every *ssa.Range; Go's rangeIter is opaque, non-addressable, and consumed by Next in the same frame, so it cannot escape (return/store/closure/async). Entry-block allocas survive Asyncify/SjLj.
  • mapKeyPtr stores the key before the map call, and mapassign copies both direct and indirect keys into map-owned storage before returning — the temporary address is never retained. Fast key variants bypass mapKeyPtr.
  • GC roots: uninitializedStackSlot → registerStackRoots registers the iterator/key pointer fields and initializeStackRoots zero-inits the slot at entry, so GC never scans garbage, including on nil/empty-map restarts. NewMapIterBuffer/NewStringIterBuffer fully re-init the buffer on every range restart.
  • reserveEscapeStack arithmetic is safe: the escapeStackBytes > MaxEscapeStackBytes guard prevents the remaining subtraction from underflowing, and adding StackRootBytes can only over-reject, never over-grant.

Nested/restarted ranges get distinct slots, and the range_temporary_test.go / map_key_storage_test.go suites exercise restart, nesting, mutation-after-yield, GC survival, and budget-exhaustion paths. Docs (doc/escape-analysis*.md, benchmark/escape/README.md) are accurate and consistent with the implementation.

Two non-blocking notes are inline. One additional minor doc observation: the new mapkeys benchmark ships without reference numbers in the "Reference measurements" table in benchmark/escape/README.md, so there are no expected values to compare a run against — fine if it's intended purely as a reproducer.

No blocking issues found.

Comment thread ssa/datastruct.go Resolved
Comment thread runtime/internal/runtime/z_map.go Resolved
@fennoai

fennoai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Confirmed. The heap-owning NewMapIter/NewStringIter APIs are preserved and are reached via the b.Range(x) fallback inside RangeBorrowed when the stack budget is exhausted — exactly as the trigger comment claims (heap fallback + preserved heap-owning APIs). All the claims in the trigger comment match the implementation I verified across the four review dimensions in the prior turn.

The diff is identical to the fully-reviewed version, and I already submitted a complete four-dimension review in the previous turn. Since this turn is managed mode, I return the final result as Markdown directly.

Review: #3039 — runtime temporary ownership for #3012

I reviewed the complete diff (4a7f426...c70305d, 16 files, +671/−117) across code quality, performance, security/memory-safety, and documentation accuracy. The workspace is confirmed at head SHA c70305d, and I verified each claim in your summary against the implementation.

Verdict: No blocking issues. The design is clean and well-tested; the correctness-critical lifetime and GC claims hold.

What I verified against your summary

  • Caller-owned map key copies — mapKeyPtr stores the key into an entry-frame slot before the map call, and mapassign copies both direct and indirect keys into map-owned storage before returning, so the temporary address is never retained. Fast key variants (Fast32/64/Str/Ptr) bypass mapKeyPtr entirely.
  • Map/string range iterators, invocation-owned — RangeBorrowed covers every *ssa.Range. The rangeIter is opaque, non-addressable, and consumed by Next in the same frame; it cannot be returned, stored, captured by a closure, or published to an async op. Entry-block allocas survive Asyncify/SjLj. Nested/restarted ranges get distinct slots.
  • Typed GC roots — uninitializedStackSlot → registerStackRoots registers the iterator/key pointer fields; initializeStackRoots zero-inits the slot at entry, so GC never scans garbage, including on nil/empty-map restarts. NewMapIterBuffer/NewStringIterBuffer fully re-initialize the buffer on every range restart.
  • Shared stack budget — reserveEscapeStack draws map keys and iterators from the shared 64 KiB per-function budget. The arithmetic is safe: the escapeStackBytes > MaxEscapeStackBytes guard prevents the remaining subtraction from underflowing, and adding StackRootBytes can only over-reject, never over-grant.
  • Heap fallback + preserved heap-owning APIs — confirmed: when reserveEscapeStack returns false, RangeBorrowed falls through to b.Range(x), which calls the retained NewMapIter/NewStringIter (each new(...)-backed). Over-budget keys fall back to AllocU. Both heap-owning constructors still exist and remain the only heap path.

Tests (range_temporary_test.go, map_key_storage_test.go, map_key_test.go, map_key_alloc_llgo_test.go) exercise restart, nesting, mutation-after-yield, GC survival, and budget-exhaustion across the J32/J64/W32 and native targets. Docs (doc/escape-analysis*.md, benchmark/escape/README.md) are accurate and consistent with the code.

Non-blocking notes (carried from the detailed review)

  1. Budget heuristic is greedy in lowering order (ssa/datastruct.go:1007). Map-key temporaries and range iterators aren't pre-reserved by escapeStackLayout, so they draw from leftover budget at lowering time. In a function where an early cold site consumes the shared 64 KiB first (e.g. a large indirect struct key), a later hot-loop map op or range can fall back to the heap despite being hotter — there's no loop-depth/hotness weighting. Correct as-is (affects only where storage lands); a follow-up could bias toward loop-nested sites.
  2. Comment wording (runtime/internal/runtime/z_map.go:161). "Reset every field when a source range executes again" reads like a caller instruction, but NewMapIterBuffer already resets unconditionally via *it = llgoMapIter{}. Rephrasing to describe the implemented behavior (and aligning it with the NewStringIterBuffer comment) would read clearer.
  3. Minor doc — the new mapkeys benchmark ships without rows in the "Reference measurements" table in benchmark/escape/README.md, so there are no expected values to compare a run against. Fine if it's intended purely as a reproducer.

These notes were also posted as inline comments on the PR during the earlier /review pass; nothing here changes that outcome. The final runtime-temporary work looks ready.

View session

@codecov

codecov Bot commented Nov 9, 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 commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator Author

@fennoai Updated the budget-policy comment and iterator-reset/ownership wording, and added the seven-case reference measurements plus the shared-budget limitation to the benchmark README. The data is the same pinned c70305d batch used in the PR and proposal tracker. This push changes comments/docs only; please re-review.

@fennoai

fennoai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Confirmed. The only added Go lines in this push are comments — no executable code changed since the fully-reviewed c70305d. The seven README table rows (Struct key lookup, Struct key update, Struct key delete (missing), Indirect key lookup, Map range, String range, Scalar key control) match the seven measure(...) probe names in main.go exactly.

All verified. This is managed mode, so I return the final result as Markdown.

Re-review: #3039 — docs/comments update (c70305d → bfffbd6)

I set up the workspace at the new head bfffbd6 and diffed it against the previously-reviewed head c70305d. The push is comments and docs only — I confirmed every added Go line is a comment, so no executable compiler/runtime logic changed from the version I fully reviewed across all four dimensions. The earlier correctness/memory-safety conclusions still stand.

This push resolves all three non-blocking notes from my prior review:

  1. Budget heuristic now documented — ssa/transient.go:16 adds // Helpers reserve greedily in lowering order, without hotness weighting., and benchmark/escape/README.md notes the per-probe budgets don't model cold/hot contention for the shared stack budget. The greedy-ordering behavior is now explicit at the call site. ✓
  2. Iterator comment rewritten — NewMapIterBuffer's doc now describes the implemented behavior ("initializes caller-owned iteration storage, resetting every field even for nil or empty maps") and carries the caller-retention contract, parallel to NewStringIterBuffer. The misleading imperative phrasing is gone. ✓
  3. Reference measurements added — a seven-case "Runtime temporary measurements (2026-11-10)" table (Go / LLGo main / this PR, B·ns-per-call), with environment pinning, the 4a7f42648/c70305d7f provenance, the native probe-size delta, and an explicit "these isolated timings do not establish application-wide speedups" caveat. ✓

Spot checks on the new content:

  • The seven table rows match the seven measure(...) probes in benchmark/escape/mapkeys/main.go exactly (Struct key lookup/update/delete, Indirect key lookup, Map range, String range, Scalar key control).
  • The data is internally consistent with the design: zero alloc-bytes-per-call for all map-key and range cases on this PR (vs. 32–272 B on main), and the scalar-key control stays 0 B on both main and PR — correct, since the fast64 path never routes through mapKeyPtr.
  • The provenance note (same pinned c70305d7f batch) is accurate: bfffbd6 adds no code changes, so the c70305d measurements remain valid for this head.

No new issues, and no open notes remain. The documentation and comments now accurately reflect the implementation. LGTM.

View session

@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

bfffbd6eeef2 | 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 0 B / +0.0% 88932 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 155024 B 0 B / +0.0% 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 142573 B 0 B / +0.0% 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 1633398 B +61 B / +0.003735% (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 1690969 B +71 B / +0.004199% (worse) 89416 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 1514345 B +121 B / +0.007991% (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 1075060 B +319 B / +0.02968% (worse) 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 1076347 B +319 B / +0.02965% (worse) 0 B 0 B / 0.0%
j32-emscripten/LLGo 155131 B 0 B / +0.0% 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 0 B / +0.0% 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 141774 B 0 B / +0.0% 92103 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1372576 B -141 B / -0.01027% (better) 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 1385465 B -160 B / -0.01155% (better) 79699 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1256876 B -103 B / -0.008194% (better) 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 1042252 B +217 B / +0.02082% (worse) 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1043408 B +217 B / +0.0208% (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 8.559 s -211.1 ms / -2.4% (better)
j32-goos-js 8.356 s -205.6 ms / -2.4% (better)
j64-emscripten-memory64 7.752 s +86.17 ms / +1.1% (worse)
reflectcall/w32-wasi 27.746 s -807 ms / -2.8% (better)
w32-goos-wasip1 4.226 s -24.09 ms / -0.6% (better)
w32-wasi 3.760 s -126.9 ms / -3.3% (better)

Compared with 4a7f426484c9 measured in the same runner job.

@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown

LLGo baseline benchmarks

bfffbd6eeef2 | workflow run | long-term charts

String equality benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkStringEquality/bytes/equal/1024/Go 25.740 ns/op -0.13 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/bytes/equal/1024/LLGo 62.680 ns/op +0.1 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/bytes/equal/128/Go 8.366 ns/op -0.091 ns/op / -1.1% (better)
Linux BenchmarkStringEquality/bytes/equal/128/LLGo 12.220 ns/op +0.16 ns/op / +1.3% (worse)
Linux BenchmarkStringEquality/bytes/equal/8/Go 5.819 ns/op +0.003 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/equal/8/LLGo 4.658 ns/op +0.391 ns/op / +9.2% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/Go 6.613 ns/op -0.001 ns/op / -0.01512% (better)
Linux BenchmarkStringEquality/bytes/first/1024/LLGo 3.113 ns/op +0.393 ns/op / +14.4% (worse)
Linux BenchmarkStringEquality/bytes/first/128/Go 6.623 ns/op -0.048 ns/op / -0.7% (better)
Linux BenchmarkStringEquality/bytes/first/128/LLGo 3.145 ns/op +0.412 ns/op / +15.1% (worse)
Linux BenchmarkStringEquality/bytes/first/8/Go 5.817 ns/op +0.003 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/first/8/LLGo 3.125 ns/op +0.39 ns/op / +14.3% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/Go 26.360 ns/op +1.09 ns/op / +4.3% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/LLGo 63.100 ns/op +0.55 ns/op / +0.9% (worse)
Linux BenchmarkStringEquality/bytes/last/128/Go 8.149 ns/op -0.037 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/bytes/last/128/LLGo 11.890 ns/op -0.08 ns/op / -0.7% (better)
Linux BenchmarkStringEquality/bytes/last/8/Go 5.816 ns/op -0.001 ns/op / -0.01719% (better)
Linux BenchmarkStringEquality/bytes/last/8/LLGo 3.884 ns/op +0.391 ns/op / +11.2% (worse)
Linux BenchmarkStringEquality/strings/equal/1024/Go 23.220 ns/op -0.02 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/equal/1024/LLGo 54.710 ns/op -0.07 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/equal/128/Go 8.186 ns/op -1.207 ns/op / -12.8% (better)
Linux BenchmarkStringEquality/strings/equal/128/LLGo 11.140 ns/op -0.41 ns/op / -3.5% (better)
Linux BenchmarkStringEquality/strings/equal/8/Go 5.824 ns/op -0.009 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/strings/equal/8/LLGo 4.280 ns/op +0.014 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/strings/first/1024/Go 6.593 ns/op -0.01 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/strings/first/1024/LLGo 2.725 ns/op -0.772 ns/op / -22.1% (better)
Linux BenchmarkStringEquality/strings/first/128/Go 6.592 ns/op -0.009 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/first/128/LLGo 2.726 ns/op -0.773 ns/op / -22.1% (better)
Linux BenchmarkStringEquality/strings/first/8/Go 5.816 ns/op -0.042 ns/op / -0.7% (better)
Linux BenchmarkStringEquality/strings/first/8/LLGo 2.723 ns/op -0.849 ns/op / -23.8% (better)
Linux BenchmarkStringEquality/strings/last/1024/Go 24.460 ns/op +1.73 ns/op / +7.6% (worse)
Linux BenchmarkStringEquality/strings/last/1024/LLGo 54.750 ns/op -0.16 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/strings/last/128/Go 8.141 ns/op +0.003 ns/op / +0.03686% (worse)
Linux BenchmarkStringEquality/strings/last/128/LLGo 11.030 ns/op -0.04 ns/op / -0.4% (better)
Linux BenchmarkStringEquality/strings/last/8/Go 5.817 ns/op -0.003 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/last/8/LLGo 3.505 ns/op -0.769 ns/op / -18.0% (better)
macOS BenchmarkStringEquality/bytes/equal/1024/Go 29.490 ns/op -0.61 ns/op / -2.0% (better)
macOS BenchmarkStringEquality/bytes/equal/1024/LLGo 23.500 ns/op -4.41 ns/op / -15.8% (better)
macOS BenchmarkStringEquality/bytes/equal/128/Go 6.108 ns/op -3.8 ns/op / -38.4% (better)
macOS BenchmarkStringEquality/bytes/equal/128/LLGo 4.412 ns/op -0.409 ns/op / -8.5% (better)
macOS BenchmarkStringEquality/bytes/equal/8/Go 3.481 ns/op -4.997 ns/op / -58.9% (better)
macOS BenchmarkStringEquality/bytes/equal/8/LLGo 2.703 ns/op -0.129 ns/op / -4.6% (better)
macOS BenchmarkStringEquality/bytes/first/1024/Go 4.446 ns/op +0.442 ns/op / +11.0% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/LLGo 1.720 ns/op -0.416 ns/op / -19.5% (better)
macOS BenchmarkStringEquality/bytes/first/128/Go 4.390 ns/op +0.355 ns/op / +8.8% (worse)
macOS BenchmarkStringEquality/bytes/first/128/LLGo 1.691 ns/op -0.063 ns/op / -3.6% (better)
macOS BenchmarkStringEquality/bytes/first/8/Go 3.517 ns/op -0.915 ns/op / -20.6% (better)
macOS BenchmarkStringEquality/bytes/first/8/LLGo 1.698 ns/op -0.107 ns/op / -5.9% (better)
macOS BenchmarkStringEquality/bytes/last/1024/Go 25.920 ns/op -4.81 ns/op / -15.7% (better)
macOS BenchmarkStringEquality/bytes/last/1024/LLGo 29.750 ns/op -8.86 ns/op / -22.9% (better)
macOS BenchmarkStringEquality/bytes/last/128/Go 5.873 ns/op +0.758 ns/op / +14.8% (worse)
macOS BenchmarkStringEquality/bytes/last/128/LLGo 3.903 ns/op -1.284 ns/op / -24.8% (better)
macOS BenchmarkStringEquality/bytes/last/8/Go 4.086 ns/op +0.432 ns/op / +11.8% (worse)
macOS BenchmarkStringEquality/bytes/last/8/LLGo 2.375 ns/op -0.808 ns/op / -25.4% (better)
macOS BenchmarkStringEquality/strings/equal/1024/Go 29.430 ns/op -1.5 ns/op / -4.8% (better)
macOS BenchmarkStringEquality/strings/equal/1024/LLGo 23.550 ns/op -10.22 ns/op / -30.3% (better)
macOS BenchmarkStringEquality/strings/equal/128/Go 6.036 ns/op -0.131 ns/op / -2.1% (better)
macOS BenchmarkStringEquality/strings/equal/128/LLGo 4.622 ns/op -1.084 ns/op / -19.0% (better)
macOS BenchmarkStringEquality/strings/equal/8/Go 3.483 ns/op -0.175 ns/op / -4.8% (better)
macOS BenchmarkStringEquality/strings/equal/8/LLGo 2.704 ns/op -0.107 ns/op / -3.8% (better)
macOS BenchmarkStringEquality/strings/first/1024/Go 3.988 ns/op -0.051 ns/op / -1.3% (better)
macOS BenchmarkStringEquality/strings/first/1024/LLGo 1.704 ns/op -0.219 ns/op / -11.4% (better)
macOS BenchmarkStringEquality/strings/first/128/Go 4.931 ns/op +1.164 ns/op / +30.9% (worse)
macOS BenchmarkStringEquality/strings/first/128/LLGo 1.703 ns/op -0.061 ns/op / -3.5% (better)
macOS BenchmarkStringEquality/strings/first/8/Go 3.568 ns/op +0.118 ns/op / +3.4% (worse)
macOS BenchmarkStringEquality/strings/first/8/LLGo 1.685 ns/op -1.457 ns/op / -46.4% (better)
macOS BenchmarkStringEquality/strings/last/1024/Go 28.520 ns/op -2.99 ns/op / -9.5% (better)
macOS BenchmarkStringEquality/strings/last/1024/LLGo 25.570 ns/op -19.32 ns/op / -43.0% (better)
macOS BenchmarkStringEquality/strings/last/128/Go 6.830 ns/op -0.808 ns/op / -10.6% (better)
macOS BenchmarkStringEquality/strings/last/128/LLGo 3.815 ns/op -0.527 ns/op / -12.1% (better)
macOS BenchmarkStringEquality/strings/last/8/Go 4.680 ns/op +0.792 ns/op / +20.4% (worse)
macOS BenchmarkStringEquality/strings/last/8/LLGo 2.416 ns/op -0.109 ns/op / -4.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/Go 16.980 ns/op +0.14 ns/op / +0.8% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/LLGo 34.840 ns/op -0.17 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/Go 6.248 ns/op +0.434 ns/op / +7.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/LLGo 9.364 ns/op -0.059 ns/op / -0.6% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/Go 5.758 ns/op +0.864 ns/op / +17.7% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/LLGo 3.794 ns/op +0.271 ns/op / +7.7% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/Go 5.732 ns/op +0.533 ns/op / +10.3% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/LLGo 2.978 ns/op -0.003 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/Go 4.872 ns/op -0.048 ns/op / -1.0% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/LLGo 2.982 ns/op -0.015 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/Go 4.709 ns/op -0.178 ns/op / -3.6% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/LLGo 3.001 ns/op -0.005 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/Go 16.320 ns/op -0.03 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/LLGo 34.460 ns/op +0.19 ns/op / +0.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/Go 5.194 ns/op +0.224 ns/op / +4.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/LLGo 8.562 ns/op -0.036 ns/op / -0.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/Go 4.876 ns/op -0.022 ns/op / -0.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/LLGo 3.326 ns/op +0.048 ns/op / +1.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/Go 15.490 ns/op -0.92 ns/op / -5.6% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/LLGo 30.190 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/128/Go 6.245 ns/op +0.581 ns/op / +10.3% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/128/LLGo 6.232 ns/op +0.126 ns/op / +2.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/Go 5.034 ns/op +0.081 ns/op / +1.6% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/LLGo 2.710 ns/op +0.219 ns/op / +8.8% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/Go 4.972 ns/op -0.903 ns/op / -15.4% (better)
Windows MinGW BenchmarkStringEquality/strings/first/1024/LLGo 1.900 ns/op +0.005 ns/op / +0.3% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/Go 4.893 ns/op -0.122 ns/op / -2.4% (better)
Windows MinGW BenchmarkStringEquality/strings/first/128/LLGo 1.895 ns/op -0.02 ns/op / -1.0% (better)
Windows MinGW BenchmarkStringEquality/strings/first/8/Go 4.957 ns/op +0.063 ns/op / +1.3% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/LLGo 1.898 ns/op -0.037 ns/op / -1.9% (better)
Windows MinGW BenchmarkStringEquality/strings/last/1024/Go 14.540 ns/op -0.12 ns/op / -0.8% (better)
Windows MinGW BenchmarkStringEquality/strings/last/1024/LLGo 30.420 ns/op +0.5 ns/op / +1.7% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/128/Go 5.174 ns/op -0.366 ns/op / -6.6% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/LLGo 6.207 ns/op +0.012 ns/op / +0.2% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/8/Go 4.974 ns/op +0.059 ns/op / +1.2% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/8/LLGo 2.166 ns/op -0.273 ns/op / -11.2% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/Go 30.980 ns/op -1.86 ns/op / -5.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 34.010 ns/op +0.28 ns/op / +0.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/Go 10.040 ns/op -0.07 ns/op / -0.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/LLGo 8.065 ns/op +0.046 ns/op / +0.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/Go 7.403 ns/op +0.048 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.254 ns/op +0.376 ns/op / +7.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/Go 8.036 ns/op -0.123 ns/op / -1.5% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.852 ns/op +0.121 ns/op / +3.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/Go 8.102 ns/op +0.058 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/LLGo 3.823 ns/op +0.155 ns/op / +4.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/Go 6.949 ns/op +0.029 ns/op / +0.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.956 ns/op -0.035 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/Go 30.220 ns/op -2.21 ns/op / -6.8% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/LLGo 46 ns/op +13.16 ns/op / +40.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/Go 9.545 ns/op +0.072 ns/op / +0.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/LLGo 7.478 ns/op +0.258 ns/op / +3.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/Go 7.634 ns/op +0.25 ns/op / +3.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.404 ns/op +0.051 ns/op / +1.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/Go 28.450 ns/op -0.2 ns/op / -0.7% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/LLGo 33.760 ns/op -0.06 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/Go 9.487 ns/op -0.014 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/LLGo 8.067 ns/op +0.074 ns/op / +0.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/Go 7.347 ns/op +0.153 ns/op / +2.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/LLGo 5.270 ns/op +0.148 ns/op / +2.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/Go 7.729 ns/op -0.013 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.884 ns/op +0.109 ns/op / +2.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/Go 7.772 ns/op -0.049 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/LLGo 4.078 ns/op +0.225 ns/op / +5.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/Go 6.774 ns/op -0.059 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/LLGo 4 ns/op +0.255 ns/op / +6.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/Go 28.160 ns/op +0.01 ns/op / +0.03552% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/LLGo 33.130 ns/op +0.22 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/Go 8.986 ns/op -0.127 ns/op / -1.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/LLGo 7.594 ns/op +0.365 ns/op / +5.0% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/Go 7.191 ns/op +0.087 ns/op / +1.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/LLGo 4.470 ns/op +0.131 ns/op / +3.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.140 ns/op -0.17 ns/op / -0.5% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 39.440 ns/op +0.48 ns/op / +1.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.760 ns/op +0.103 ns/op / +1.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.150 ns/op +0.099 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.719 ns/op +0.006 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.482 ns/op -0.249 ns/op / -9.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.712 ns/op -0.019 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.573 ns/op -0.068 ns/op / -4.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.774 ns/op -0.021 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.567 ns/op -0.055 ns/op / -3.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.545 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.532 ns/op -0.07 ns/op / -4.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/Go 30.990 ns/op -0.09 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.510 ns/op +0.69 ns/op / +1.8% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.672 ns/op -0.023 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.810 ns/op +0.066 ns/op / +1.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.368 ns/op -0.181 ns/op / -5.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.173 ns/op -0.127 ns/op / -5.5% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.420 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.800 ns/op -0.2 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.063 ns/op +0.003 ns/op / +0.0495% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.962 ns/op +0.092 ns/op / +1.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.887 ns/op -0.008 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.704 ns/op +0.225 ns/op / +9.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.532 ns/op +0.061 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.561 ns/op -0.182 ns/op / -10.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/Go 4.552 ns/op +0.007 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.604 ns/op -0.115 ns/op / -6.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/Go 3.886 ns/op -0.01 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.621 ns/op -0.142 ns/op / -8.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.190 ns/op +0.05 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.760 ns/op +0.18 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/Go 5.918 ns/op -0.041 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.485 ns/op -0.033 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/Go 3.880 ns/op -0.012 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.072 ns/op -0.147 ns/op / -6.6% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/Go 21.830 ns/op +0.12 ns/op / +0.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/LLGo 43 ns/op -1.15 ns/op / -2.6% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/Go 8.081 ns/op +0.637 ns/op / +8.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/LLGo 10.500 ns/op -0.08 ns/op / -0.8% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/Go 7.349 ns/op +0.211 ns/op / +3.0% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/LLGo 4.880 ns/op +0.694 ns/op / +16.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/Go 7.316 ns/op -0.116 ns/op / -1.6% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/LLGo 3.837 ns/op +0.692 ns/op / +22.0% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/Go 6.361 ns/op +0.289 ns/op / +4.8% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/LLGo 3.832 ns/op +0.614 ns/op / +19.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/8/Go 6.272 ns/op -0.523 ns/op / -7.7% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/LLGo 3.832 ns/op +0.696 ns/op / +22.2% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/Go 21.120 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkStringEquality/bytes/last/1024/LLGo 44.960 ns/op +0.51 ns/op / +1.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/Go 8.786 ns/op +1.766 ns/op / +25.2% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/LLGo 11.510 ns/op +0.35 ns/op / +3.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/Go 6.471 ns/op +0.427 ns/op / +7.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/LLGo 4.184 ns/op +0.699 ns/op / +20.1% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/Go 20.910 ns/op +0.69 ns/op / +3.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/LLGo 38.820 ns/op -0.11 ns/op / -0.3% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/Go 8.439 ns/op +0.984 ns/op / +13.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/128/LLGo 8.228 ns/op +0.265 ns/op / +3.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/Go 6.299 ns/op +0.258 ns/op / +4.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/LLGo 3.837 ns/op +0.347 ns/op / +9.9% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/1024/Go 6.337 ns/op -1.022 ns/op / -13.9% (better)
Windows MSVC BenchmarkStringEquality/strings/first/1024/LLGo 2.439 ns/op +0.345 ns/op / +16.5% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/Go 6.497 ns/op +0.447 ns/op / +7.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/LLGo 2.442 ns/op +0.344 ns/op / +16.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/Go 6.339 ns/op +0.353 ns/op / +5.9% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/LLGo 2.439 ns/op +0.349 ns/op / +16.7% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/1024/Go 18.950 ns/op +0.18 ns/op / +1.0% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/1024/LLGo 38.890 ns/op +0.06 ns/op / +0.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/128/Go 7.942 ns/op +0.549 ns/op / +7.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/128/LLGo 7.730 ns/op -0.094 ns/op / -1.2% (better)
Windows MSVC BenchmarkStringEquality/strings/last/8/Go 7.359 ns/op +0.243 ns/op / +3.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/8/LLGo 2.791 ns/op +0.001 ns/op / +0.03584% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/Go 31.010 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 102.200 ns/op +15.22 ns/op / +17.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/Go 9.873 ns/op -0.033 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/LLGo 16.120 ns/op -0.33 ns/op / -2.0% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/Go 7.421 ns/op -0.04 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.035 ns/op -0.03 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/Go 8.134 ns/op -0.001 ns/op / -0.01229% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.715 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/Go 7.987 ns/op -0.096 ns/op / -1.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/LLGo 3.725 ns/op -0.054 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/Go 7.061 ns/op +0.072 ns/op / +1.0% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.772 ns/op -0.103 ns/op / -2.7% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/Go 30.280 ns/op +0.18 ns/op / +0.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/LLGo 84.330 ns/op -2.44 ns/op / -2.8% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/Go 9.517 ns/op +0.037 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/LLGo 15.940 ns/op -0.7 ns/op / -4.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/Go 7.516 ns/op +0.119 ns/op / +1.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.358 ns/op +0.01 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/Go 28.420 ns/op -0.17 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/LLGo 114.800 ns/op +20.21 ns/op / +21.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/Go 9.514 ns/op +0.022 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/LLGo 16.660 ns/op -0.6 ns/op / -3.5% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/Go 7.257 ns/op -1.409 ns/op / -16.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/LLGo 5.054 ns/op +0.423 ns/op / +9.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/Go 7.799 ns/op -0.007 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.647 ns/op -0.015 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/Go 7.784 ns/op +0.063 ns/op / +0.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/LLGo 3.684 ns/op -0.022 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/Go 6.959 ns/op +0.018 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/LLGo 3.846 ns/op +0.186 ns/op / +5.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/Go 28.160 ns/op +0.11 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/LLGo 94.420 ns/op +0.06 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/Go 9.018 ns/op -0.085 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/LLGo 16.290 ns/op +0.1 ns/op / +0.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/Go 7.229 ns/op -0.011 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/LLGo 4.660 ns/op +0.254 ns/op / +5.8% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.530 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 39.120 ns/op -0.21 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.730 ns/op -0.008 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 6.957 ns/op -0.093 ns/op / -1.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.695 ns/op -0.01 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.728 ns/op +0.026 ns/op / +1.0% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.756 ns/op +0.018 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.618 ns/op -0.099 ns/op / -5.8% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.788 ns/op +0.036 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.642 ns/op -0.029 ns/op / -1.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.546 ns/op +0.004 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.609 ns/op -0.066 ns/op / -3.9% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/Go 32.770 ns/op +1.48 ns/op / +4.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.230 ns/op +0.31 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.653 ns/op -0.012 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.749 ns/op +0.008 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.548 ns/op +0.14 ns/op / +4.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.235 ns/op -0.122 ns/op / -5.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.470 ns/op +0.08 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 36.100 ns/op +0.13 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.055 ns/op -0.042 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.922 ns/op +0.071 ns/op / +1.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.878 ns/op -0.04 ns/op / -1.0% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.465 ns/op -0.211 ns/op / -7.9% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.519 ns/op -0.013 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.764 ns/op +0.17 ns/op / +10.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/Go 4.526 ns/op -0.043 ns/op / -0.9% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.730 ns/op +0.154 ns/op / +9.8% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/Go 3.860 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.764 ns/op +0.185 ns/op / +11.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.190 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.660 ns/op +0.13 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/Go 5.921 ns/op -0.03 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.515 ns/op +0.023 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/Go 3.864 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.214 ns/op -0.077 ns/op / -3.4% (better)

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.047 s -10.77 ms / -1.0% (better) 1.279 ms +21.8 us / +1.7% (worse)
Linux cprintf-lto 8240 B 0 B / +0.0% 368 B 0 B / +0.0% 1.062 s -10.63 ms / -1.0% (better) 1.262 ms -58.04 us / -4.4% (better)
Linux fmtprintf 1942648 B +472 B / +0.0243% (worse) 269903 B +11 B / +0.004076% (worse) 6.628 s -386.5 ms / -5.5% (better) 3.222 ms -283 us / -8.1% (better)
Linux fmtprintf-lto 1019272 B +112 B / +0.01099% (worse) 210814 B +5 B / +0.002372% (worse) 15.652 s -620.3 ms / -3.8% (better) 3.022 ms -30.42 us / -1.0% (better)
Linux println 260552 B +280 B / +0.1% (worse) 19172 B 0 B / +0.0% 1.104 s +5.386 ms / +0.5% (worse) 1.634 ms +16.04 us / +1.0% (worse)
Linux println-lto 102632 B -24 B / -0.02338% (better) 15652 B 0 B / +0.0% 1.782 s +17.1 ms / +1.0% (worse) 1.750 ms +46.01 us / +2.7% (worse)
macOS cprintf 50944 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.155 s -480.5 ms / -29.4% (better) 4.935 ms -496.1 us / -9.1% (better)
macOS cprintf-lto 50608 B 0 B / +0.0% 161 B 0 B / +0.0% 1.354 s -33.26 ms / -2.4% (better) 3.504 ms +181.5 us / +5.5% (worse)
macOS fmtprintf 1233696 B 0 B / +0.0% 676009 B +172 B / +0.02545% (worse) 6.032 s -122.8 ms / -2.0% (better) 7.244 ms -3.517 ms / -32.7% (better)
macOS fmtprintf-lto 871600 B 0 B / +0.0% 521721 B +52 B / +0.009968% (worse) 8.892 s -918.7 ms / -9.4% (better) 5.790 ms -2.914 ms / -33.5% (better)
macOS println 100592 B 0 B / +0.0% 26391 B 0 B / +0.0% 1.425 s -235 ms / -14.2% (better) 4.387 ms -4.744 ms / -52.0% (better)
macOS println-lto 85632 B 0 B / +0.0% 22491 B 0 B / +0.0% 1.602 s -49.54 ms / -3.0% (better) 4.668 ms -1.699 ms / -26.7% (better)
Windows MinGW cprintf 745472 B +512 B / +0.1% (worse) 4230 B 0 B / +0.0% 1.615 s +8.335 ms / +0.5% (worse) 2.803 ms +57.7 us / +2.1% (worse)
Windows MinGW cprintf-lto 55808 B 0 B / +0.0% 4182 B 0 B / +0.0% 1.665 s +46.69 ms / +2.9% (worse) 2.749 ms +6.6 us / +0.2% (worse)
Windows MinGW fmtprintf 5146112 B +2048 B / +0.03981% (worse) 362054 B +32 B / +0.008839% (worse) 5.555 s +54.97 ms / +1.0% (worse) 7.556 ms -551.1 us / -6.8% (better)
Windows MinGW fmtprintf-lto 2761728 B +512 B / +0.01854% (worse) 308022 B -16 B / -0.005194% (better) 8.604 s -610.3 ms / -6.6% (better) 7.385 ms -801.7 us / -9.8% (better)
Windows MinGW println 807424 B +512 B / +0.1% (worse) 27414 B 0 B / +0.0% 1.629 s +27 ms / +1.7% (worse) 5.389 ms +393.7 us / +7.9% (worse)
Windows MinGW println-lto 233984 B 0 B / +0.0% 22598 B 0 B / +0.0% 1.849 s -14.01 ms / -0.8% (better) 6.007 ms +851.9 us / +16.5% (worse)
Windows MinGW 386 cprintf 752128 B +512 B / +0.1% (worse) 22726 B 0 B / +0.0% 2.019 s +51.69 ms / +2.6% (worse) 9.243 ms -661.9 us / -6.7% (better)
Windows MinGW 386 cprintf-lto 282112 B 0 B / +0.0% 19504 B 0 B / +0.0% 2.299 s +19.08 ms / +0.8% (worse) 8.870 ms +224.8 us / +2.6% (worse)
Windows MinGW 386 fmtprintf 4497408 B 0 B / +0.0% 284768 B +32 B / +0.01124% (worse) 6.848 s +83.14 ms / +1.2% (worse) 11.561 ms +388.7 us / +3.5% (worse)
Windows MinGW 386 fmtprintf-lto 2887680 B -512 B / -0.01773% (better) 257254 B -80 B / -0.03109% (better) 10.929 s +28.45 ms / +0.3% (worse) 11.111 ms -689.8 us / -5.8% (better)
Windows MinGW 386 println 750592 B +512 B / +0.1% (worse) 22672 B 0 B / +0.0% 2.006 s +67.22 ms / +3.5% (worse) 8.758 ms +220.6 us / +2.6% (worse)
Windows MinGW 386 println-lto 281088 B +512 B / +0.2% (worse) 19438 B 0 B / +0.0% 2.259 s +36.62 ms / +1.6% (worse) 8.846 ms +329.9 us / +3.9% (worse)
Windows MinGW ARM64 cprintf 751616 B +1024 B / +0.1% (worse) 4028 B 0 B / +0.0% 2.369 s +41.63 ms / +1.8% (worse) 7.662 ms +187.6 us / +2.5% (worse)
Windows MinGW ARM64 cprintf-lto 55296 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.408 s +78.8 ms / +3.4% (worse) 7.902 ms +784.4 us / +11.0% (worse)
Windows MinGW ARM64 fmtprintf 5085184 B +1536 B / +0.03021% (worse) 302104 B +12 B / +0.003972% (worse) 7.024 s +145.1 ms / +2.1% (worse) 16.529 ms +1.596 ms / +10.7% (worse)
Windows MinGW ARM64 fmtprintf-lto 2816000 B -512 B / -0.01818% (better) 258228 B -44 B / -0.01704% (better) 10.933 s +447.8 ms / +4.3% (worse) 15.842 ms +624.8 us / +4.1% (worse)
Windows MinGW ARM64 println 812032 B +1536 B / +0.2% (worse) 25604 B 0 B / +0.0% 2.379 s +91.56 ms / +4.0% (worse) 12.847 ms +667.1 us / +5.5% (worse)
Windows MinGW ARM64 println-lto 236544 B 0 B / +0.0% 21824 B 0 B / +0.0% 2.665 s +110.2 ms / +4.3% (worse) 12.898 ms +1.303 ms / +11.2% (worse)
Windows MSVC cprintf 989696 B +512 B / +0.1% (worse) 66003 B 0 B / +0.0% 1.801 s -2.972 ms / -0.2% (better) 3.369 ms -158 us / -4.5% (better)
Windows MSVC cprintf-lto 303616 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.837 s -286.8 us / -0.01561% (better) 3.398 ms -39.7 us / -1.2% (better)
Windows MSVC fmtprintf 5445120 B +1024 B / +0.01881% (worse) 458150 B +32 B / +0.006985% (worse) 6.257 s +40.16 ms / +0.6% (worse) 11.152 ms +76.5 us / +0.7% (worse)
Windows MSVC fmtprintf-lto 3085312 B 0 B / +0.0% 406582 B -16 B / -0.003935% (better) 10.120 s +35.45 ms / +0.4% (worse) 11.287 ms -134.8 us / -1.2% (better)
Windows MSVC println 1121792 B 0 B / +0.0% 123574 B 0 B / +0.0% 1.825 s +11.88 ms / +0.7% (worse) 6.956 ms -246.8 us / -3.4% (better)
Windows MSVC println-lto 553984 B 0 B / +0.0% 119414 B 0 B / +0.0% 2.091 s -15.69 ms / -0.7% (better) 7.408 ms +415.2 us / +5.9% (worse)
Windows MSVC 386 cprintf 660480 B +512 B / +0.1% (worse) 21378 B 0 B / +0.0% 1.924 s +9.165 ms / +0.5% (worse) 9.305 ms -422.2 us / -4.3% (better)
Windows MSVC 386 cprintf-lto 221184 B 0 B / +0.0% 18857 B 0 B / +0.0% 2.163 s +36.72 ms / +1.7% (worse) 9.199 ms -2.884 ms / -23.9% (better)
Windows MSVC 386 fmtprintf 4223488 B -512 B / -0.01212% (better) 268230 B +16 B / +0.005965% (worse) 6.366 s +24.69 ms / +0.4% (worse) 12.039 ms +51.1 us / +0.4% (worse)
Windows MSVC 386 fmtprintf-lto 2701824 B 0 B / +0.0% 236753 B -32 B / -0.01351% (better) 9.926 s -80.37 ms / -0.8% (better) 12.676 ms +354.7 us / +2.9% (worse)
Windows MSVC 386 println 657920 B +512 B / +0.1% (worse) 21308 B 0 B / +0.0% 1.886 s +36.11 ms / +2.0% (worse) 10.214 ms +796.6 us / +8.5% (worse)
Windows MSVC 386 println-lto 219648 B 0 B / +0.0% 18787 B 0 B / +0.0% 2.146 s +27.77 ms / +1.3% (worse) 10.056 ms +766.4 us / +8.3% (worse)
Windows MSVC ARM64 cprintf 754176 B +1024 B / +0.1% (worse) 4240 B 0 B / +0.0% 1.963 s -552.9 us / -0.02815% (better) 6.834 ms -100.3 us / -1.4% (better)
Windows MSVC ARM64 cprintf-lto 60928 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.990 s -19.79 ms / -1.0% (better) 7.095 ms -7.8 us / -0.1% (better)
Windows MSVC ARM64 fmtprintf 5080576 B +1024 B / +0.02016% (worse) 302428 B +16 B / +0.005291% (worse) 6.304 s +4.429 ms / +0.1% (worse) 15.348 ms -386.6 us / -2.5% (better)
Windows MSVC ARM64 fmtprintf-lto 2824704 B -512 B / -0.01812% (better) 259168 B -48 B / -0.01852% (better) 9.917 s +21.7 ms / +0.2% (worse) 16.702 ms +87 us / +0.5% (worse)
Windows MSVC ARM64 println 814592 B +1536 B / +0.2% (worse) 26084 B 0 B / +0.0% 1.988 s +14.66 ms / +0.7% (worse) 12.016 ms +107.6 us / +0.9% (worse)
Windows MSVC ARM64 println-lto 242688 B 0 B / +0.0% 22384 B 0 B / +0.0% 2.218 s +27.55 ms / +1.3% (worse) 12.516 ms -2.975 ms / -19.2% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.460 ns/op -0.01 ns/op / -0.1% (better)
Linux BenchmarkMergeCompilerFlags 194.600 ns/op -9.4 ns/op / -4.6% (better)
Linux BenchmarkMergeLinkerFlags 126 ns/op -0.8 ns/op / -0.6% (better)
Linux BenchmarkChannelBuffered 72.470 ns/op -0.03 ns/op / -0.04138% (better)
Linux BenchmarkChannelHandoff 14100 ns/op -78 ns/op / -0.6% (better)
Linux BenchmarkDefer 17.670 ns/op +0.67 ns/op / +3.9% (worse)
Linux BenchmarkDirectCall 1.169 ns/op 0 ns/op / +0.0%
Linux BenchmarkGlobalRead 1.168 ns/op -0.401 ns/op / -25.6% (better)
Linux BenchmarkGlobalWrite 7.765 ns/op +0.004 ns/op / +0.1% (worse)
Linux BenchmarkGoroutine 23953 ns/op +657 ns/op / +2.8% (worse)
Linux BenchmarkInterfaceCall 4.745 ns/op -0.696 ns/op / -12.8% (better)
Linux BenchmarkRuntimeGetG 2.360 ns/op -0.073 ns/op / -3.0% (better)
macOS BenchmarkLookupPCRandom 14.120 ns/op -3.03 ns/op / -17.7% (better)
macOS BenchmarkMergeCompilerFlags 99.910 ns/op -77.79 ns/op / -43.8% (better)
macOS BenchmarkMergeLinkerFlags 66.140 ns/op -26.64 ns/op / -28.7% (better)
macOS BenchmarkChannelBuffered 34.290 ns/op -2.63 ns/op / -7.1% (better)
macOS BenchmarkChannelHandoff 9940 ns/op -4639 ns/op / -31.8% (better)
macOS BenchmarkDefer 10.830 ns/op -2.66 ns/op / -19.7% (better)
macOS BenchmarkDirectCall 1.076 ns/op -0.141 ns/op / -11.6% (better)
macOS BenchmarkGlobalRead 1.178 ns/op -0.128 ns/op / -9.8% (better)
macOS BenchmarkGlobalWrite 1.251 ns/op -0.162 ns/op / -11.5% (better)
macOS BenchmarkGoroutine 80880 ns/op +38636 ns/op / +91.5% (worse)
macOS BenchmarkInterfaceCall 3.763 ns/op -0.59 ns/op / -13.6% (better)
macOS BenchmarkRuntimeGetG 2.239 ns/op -0.55 ns/op / -19.7% (better)
Windows MinGW BenchmarkLookupPCRandom 9.647 ns/op -0.027 ns/op / -0.3% (better)
Windows MinGW BenchmarkMergeCompilerFlags 411 ns/op +0.7 ns/op / +0.2% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 346.500 ns/op -4.5 ns/op / -1.3% (better)
Windows MinGW BenchmarkChannelBuffered 26.610 ns/op -0.26 ns/op / -1.0% (better)
Windows MinGW BenchmarkChannelHandoff 1035 ns/op +1 ns/op / +0.1% (worse)
Windows MinGW BenchmarkDefer 12.340 ns/op -0.13 ns/op / -1.0% (better)
Windows MinGW BenchmarkDirectCall 1.356 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 1.358 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGlobalWrite 2.164 ns/op +0.001 ns/op / +0.04623% (worse)
Windows MinGW BenchmarkGoroutine 59500 ns/op +1771 ns/op / +3.1% (worse)
Windows MinGW BenchmarkInterfaceCall 6 ns/op +0.022 ns/op / +0.4% (worse)
Windows MinGW BenchmarkRuntimeGetG 1.409 ns/op -0.221 ns/op / -13.6% (better)
Windows MinGW 386 BenchmarkLookupPCRandom 26.700 ns/op +0.08 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 752.200 ns/op -9.4 ns/op / -1.2% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 689.300 ns/op -14.3 ns/op / -2.0% (better)
Windows MinGW 386 BenchmarkChannelBuffered 44.030 ns/op +0.25 ns/op / +0.6% (worse)
Windows MinGW 386 BenchmarkChannelHandoff 850.400 ns/op -69.8 ns/op / -7.6% (better)
Windows MinGW 386 BenchmarkDefer 15.570 ns/op +0.35 ns/op / +2.3% (worse)
Windows MinGW 386 BenchmarkDirectCall 1.552 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkGlobalRead 1.865 ns/op +0.003 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 7.781 ns/op +0.008 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGoroutine 105382 ns/op -2905 ns/op / -2.7% (better)
Windows MinGW 386 BenchmarkInterfaceCall 7.480 ns/op +0.01 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkRuntimeGetG 2.168 ns/op -0.004 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.100 ns/op +0.01 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 569.100 ns/op -55.8 ns/op / -8.9% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 536.700 ns/op -51.2 ns/op / -8.7% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 42.360 ns/op +0.82 ns/op / +2.0% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 5148 ns/op +2204 ns/op / +74.9% (worse)
Windows MinGW ARM64 BenchmarkDefer 11.980 ns/op -0.11 ns/op / -0.9% (better)
Windows MinGW ARM64 BenchmarkDirectCall 0.590 ns/op -0.0737 ns/op / -11.1% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.663 ns/op +0.0734 ns/op / +12.4% (worse)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.663 ns/op -0.2214 ns/op / -25.0% (better)
Windows MinGW ARM64 BenchmarkGoroutine 71763 ns/op +8504 ns/op / +13.4% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 3.864 ns/op +0.014 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.769 ns/op -0.031 ns/op / -1.7% (better)
Windows MSVC BenchmarkLookupPCRandom 12.360 ns/op -0.24 ns/op / -1.9% (better)
Windows MSVC BenchmarkMergeCompilerFlags 541.200 ns/op +5.6 ns/op / +1.0% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 471.800 ns/op -8.1 ns/op / -1.7% (better)
Windows MSVC BenchmarkChannelBuffered 34.260 ns/op -2.3 ns/op / -6.3% (better)
Windows MSVC BenchmarkChannelHandoff 1229 ns/op -30 ns/op / -2.4% (better)
Windows MSVC BenchmarkDefer 15.880 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC BenchmarkDirectCall 1.747 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalRead 1.815 ns/op +0.065 ns/op / +3.7% (worse)
Windows MSVC BenchmarkGlobalWrite 2.793 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC BenchmarkGoroutine 74881 ns/op +2376 ns/op / +3.3% (worse)
Windows MSVC BenchmarkInterfaceCall 8.678 ns/op +0.965 ns/op / +12.5% (worse)
Windows MSVC BenchmarkRuntimeGetG 1.814 ns/op -0.287 ns/op / -13.7% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 26.570 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkMergeCompilerFlags 759.700 ns/op -11.6 ns/op / -1.5% (better)
Windows MSVC 386 BenchmarkMergeLinkerFlags 682.900 ns/op -3.4 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkChannelBuffered 45.320 ns/op +1.5 ns/op / +3.4% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 1061 ns/op -24 ns/op / -2.2% (better)
Windows MSVC 386 BenchmarkDefer 16.160 ns/op +1.56 ns/op / +10.7% (worse)
Windows MSVC 386 BenchmarkDirectCall 1.553 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGlobalRead 1.868 ns/op +0.001 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGlobalWrite 7.797 ns/op -0.03 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkGoroutine 110357 ns/op +1038 ns/op / +0.9% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 7.438 ns/op -0.031 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.167 ns/op +0.235 ns/op / +12.2% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.060 ns/op -0.05 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 564.500 ns/op +25.3 ns/op / +4.7% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 543.600 ns/op +23.4 ns/op / +4.5% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 45.510 ns/op +0.13 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 3002 ns/op +13 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkDefer 12.030 ns/op +0.3 ns/op / +2.6% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op +0.0002 ns/op / +0.03393% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.663 ns/op -0.0008 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.757 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkGoroutine 56536 ns/op -1566 ns/op / -2.7% (better)
Windows MSVC ARM64 BenchmarkInterfaceCall 3.851 ns/op -0.005 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.803 ns/op +0.002 ns/op / +0.1% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 905.300 ns/op -10.6 ns/op / -1.2% (better)
Linux AfterFuncZeroDelivery/LLGo 39754 ns/op +2605 ns/op / +7.0% (worse)
Linux CreateStop/Go 292.300 ns/op +1.8 ns/op / +0.6% (worse)
Linux CreateStop/LLGo 1444 ns/op -33 ns/op / -2.2% (better)
Linux RearmStopped/Go 118.400 ns/op +1.9 ns/op / +1.6% (worse)
Linux RearmStopped/LLGo 793.900 ns/op -275.1 ns/op / -25.7% (better)
Linux ResetActive/Go 69.570 ns/op +0.8 ns/op / +1.2% (worse)
Linux ResetActive/LLGo 679.400 ns/op +27 ns/op / +4.1% (worse)
Linux ResetHeap1024/Go 67.530 ns/op -0.67 ns/op / -1.0% (better)
Linux ResetHeap1024/LLGo 132.800 ns/op +1.2 ns/op / +0.9% (worse)
macOS AfterFuncZeroDelivery/Go 461.600 ns/op -114.2 ns/op / -19.8% (better)
macOS AfterFuncZeroDelivery/LLGo 68615 ns/op +13481 ns/op / +24.5% (worse)
macOS CreateStop/Go 130.500 ns/op -82.7 ns/op / -38.8% (better)
macOS CreateStop/LLGo 491.400 ns/op +30 ns/op / +6.5% (worse)
macOS RearmStopped/Go 62.960 ns/op -10.46 ns/op / -14.2% (better)
macOS RearmStopped/LLGo 231.100 ns/op -119.3 ns/op / -34.0% (better)
macOS ResetActive/Go 41.910 ns/op -13.37 ns/op / -24.2% (better)
macOS ResetActive/LLGo 148.600 ns/op +24.3 ns/op / +19.5% (worse)
macOS ResetHeap1024/Go 47.460 ns/op -6.85 ns/op / -12.6% (better)
macOS ResetHeap1024/LLGo 72.490 ns/op +6.19 ns/op / +9.3% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 370.400 ns/op -15.8 ns/op / -4.1% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 114108 ns/op -434 ns/op / -0.4% (better)
Windows MinGW CreateStop/Go 91.640 ns/op +1.96 ns/op / +2.2% (worse)
Windows MinGW CreateStop/LLGo 416.500 ns/op +28.8 ns/op / +7.4% (worse)
Windows MinGW RearmStopped/Go 24.490 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW RearmStopped/LLGo 186.100 ns/op +14.7 ns/op / +8.6% (worse)
Windows MinGW ResetActive/Go 14.800 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW ResetActive/LLGo 124.500 ns/op -0.9 ns/op / -0.7% (better)
Windows MinGW ResetHeap1024/Go 14.960 ns/op +0.12 ns/op / +0.8% (worse)
Windows MinGW ResetHeap1024/LLGo 86.840 ns/op +0.2 ns/op / +0.2% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 937.500 ns/op -6.2 ns/op / -0.7% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 204336 ns/op +1786 ns/op / +0.9% (worse)
Windows MinGW 386 CreateStop/Go 189.700 ns/op -3.8 ns/op / -2.0% (better)
Windows MinGW 386 CreateStop/LLGo 421.900 ns/op -32.5 ns/op / -7.2% (better)
Windows MinGW 386 RearmStopped/Go 63.660 ns/op +0.16 ns/op / +0.3% (worse)
Windows MinGW 386 RearmStopped/LLGo 407.600 ns/op +77.6 ns/op / +23.5% (worse)
Windows MinGW 386 ResetActive/Go 39.090 ns/op -0.08 ns/op / -0.2% (better)
Windows MinGW 386 ResetActive/LLGo 995.800 ns/op -9.2 ns/op / -0.9% (better)
Windows MinGW 386 ResetHeap1024/Go 39.550 ns/op +0.14 ns/op / +0.4% (worse)
Windows MinGW 386 ResetHeap1024/LLGo 148.700 ns/op +1.4 ns/op / +1.0% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 660.100 ns/op -2.8 ns/op / -0.4% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 154881 ns/op +1395 ns/op / +0.9% (worse)
Windows MinGW ARM64 CreateStop/Go 195 ns/op -2.5 ns/op / -1.3% (better)
Windows MinGW ARM64 CreateStop/LLGo 319.900 ns/op +17.4 ns/op / +5.8% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.660 ns/op -0.05 ns/op / -0.1% (better)
Windows MinGW ARM64 RearmStopped/LLGo 159.500 ns/op -3.1 ns/op / -1.9% (better)
Windows MinGW ARM64 ResetActive/Go 31.160 ns/op +0.12 ns/op / +0.4% (worse)
Windows MinGW ARM64 ResetActive/LLGo 97.530 ns/op -30.57 ns/op / -23.9% (better)
Windows MinGW ARM64 ResetHeap1024/Go 31.160 ns/op +0.06 ns/op / +0.2% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 92.110 ns/op +0.66 ns/op / +0.7% (worse)
Windows MSVC AfterFuncZeroDelivery/Go 479.900 ns/op -1.1 ns/op / -0.2% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 142630 ns/op +635 ns/op / +0.4% (worse)
Windows MSVC CreateStop/Go 116 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC CreateStop/LLGo 420.300 ns/op +23.3 ns/op / +5.9% (worse)
Windows MSVC RearmStopped/Go 31.580 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC RearmStopped/LLGo 226 ns/op -6.6 ns/op / -2.8% (better)
Windows MSVC ResetActive/Go 19.080 ns/op -0.06 ns/op / -0.3% (better)
Windows MSVC ResetActive/LLGo 182.100 ns/op +16.6 ns/op / +10.0% (worse)
Windows MSVC ResetHeap1024/Go 19.300 ns/op +0.01 ns/op / +0.1% (worse)
Windows MSVC ResetHeap1024/LLGo 111.200 ns/op 0 ns/op / +0.0%
Windows MSVC 386 AfterFuncZeroDelivery/Go 962.400 ns/op -5.4 ns/op / -0.6% (better)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 200219 ns/op +2802 ns/op / +1.4% (worse)
Windows MSVC 386 CreateStop/Go 191.700 ns/op -4.3 ns/op / -2.2% (better)
Windows MSVC 386 CreateStop/LLGo 520.700 ns/op +113.7 ns/op / +27.9% (worse)
Windows MSVC 386 RearmStopped/Go 63.390 ns/op +0.14 ns/op / +0.2% (worse)
Windows MSVC 386 RearmStopped/LLGo 360.300 ns/op -68.9 ns/op / -16.1% (better)
Windows MSVC 386 ResetActive/Go 39.090 ns/op +0.22 ns/op / +0.6% (worse)
Windows MSVC 386 ResetActive/LLGo 425.100 ns/op -574.3 ns/op / -57.5% (better)
Windows MSVC 386 ResetHeap1024/Go 39.460 ns/op +0.07 ns/op / +0.2% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 147.500 ns/op +6.4 ns/op / +4.5% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 666 ns/op +5.8 ns/op / +0.9% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 160241 ns/op +17457 ns/op / +12.2% (worse)
Windows MSVC ARM64 CreateStop/Go 192.800 ns/op -5.4 ns/op / -2.7% (better)
Windows MSVC ARM64 CreateStop/LLGo 294 ns/op -24.5 ns/op / -7.7% (better)
Windows MSVC ARM64 RearmStopped/Go 70.620 ns/op -0.01 ns/op / -0.01416% (better)
Windows MSVC ARM64 RearmStopped/LLGo 169.900 ns/op -3.7 ns/op / -2.1% (better)
Windows MSVC ARM64 ResetActive/Go 31.040 ns/op +0.01 ns/op / +0.03223% (worse)
Windows MSVC ARM64 ResetActive/LLGo 106.300 ns/op +17.8 ns/op / +20.1% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.120 ns/op +0.06 ns/op / +0.2% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 93.040 ns/op -1.25 ns/op / -1.3% (better)

Compared with 4a7f426484c9 measured in the same runner job.

@visualfc visualfc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

审查通过。

调用方持有的 map key 临时槽和 map/string range iterator 都落在共享 64KiB escape-stack 预算内,超预算走原有堆路径。mapassign 在返回前拷贝到 map 自有存储;Go 的 rangeIter 不能逃出当前调用;GC root 在入口清零。lowering 顺序的贪心预算只影响落点,不阻塞合并。

@cpunion
cpunion merged commit 717fbe4 into xgo-dev:main Nov 10, 2026
140 of 141 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