Skip to content

build: fix function value lookup without prebuilt PCLN - #3044

Merged
cpunion merged 3 commits into
xgo-dev:mainfrom
cpunion:fix/2857-pcln-function-value-fallback
Nov 11, 2026
Merged

cpunion merged 3 commits into
xgo-dev:mainfrom
cpunion:fix/2857-pcln-function-value-fallback

Conversation

@cpunion

@cpunion cpunion commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2857.

Record true entry addresses for address-taken native functions, reusing the existing Win32 mechanism. With LLGO_PCLNPOST=0, unaligned amd64 function-value PCs previously resolved to the preceding function because entry anchors follow the prologue.

The existing Linux fallback test now explicitly disables prebuilding and checks cold, warmed and function-value lookups. Cross-target object tests cover ELF, Mach-O and COFF; macOS PCLN packaging and native/full-LTO pruning checks pass. go vet ./... matches the 12 baseline diagnostics.

CI: retain official HTTPS mirror fallback in the existing Ubuntu setup helper after repeated archive TLS failures; no new jobs.

@cpunion

cpunion commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

@fennoai Please review. This fixes #2857 by preserving exact entry PCs for address-taken functions, with the prebuilt rewrite explicitly disabled in the Linux regression test.

@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 is a clean, well-scoped fix for #2857. Broadening the exact-entry inline-asm record from the Win32-only gate (siteObjectCOFF && PointerSize()==4 && functionAddressTaken) to if functionAddressTaken(fn) correctly makes reflect.ValueOf(fn).Pointer() → FuncForPC(...).Entry() resolve to the true entry on every target when the prebuilt PCLN rewrite is disabled, instead of the post-prologue anchor.

Correctness / safety — verified clean:

  • The ${0:c} / "X" operand is a body-local inline-asm use, not llvm.used / llvm.compiler.used. So it does not pin otherwise-dead functions: if the containing body is DCE'd, the record goes with it. GlobalDCE behavior is unchanged, matching the existing "X" pattern in ssa/globaldce.go.
  • The per-target object emission is actively validated: the generalized TestFuncInfoUsesExactEntryForAddressTakenFunction cross-emits a real object (EmitToMemoryBuffer) for all 8 goos/goarch combos, so a malformed/non-relocatable record would surface as an assembler error rather than silent FuncForPC corruption. Nice.
  • functionAddressTaken is conservative (any non-direct-call use ⇒ address-taken), which is the safe direction here.

Test changes — well targeted: adding LLGO_PCLNPOST=0 is what actually exercises the no-prebuilt-PCLN path, and the new once / closure (same-entry=true) assertions check exactly the contract the PR fixes. t.Setenv is auto-restored, no state leak. No secret/token exposure.

The notes below are all minor (comment accuracy); the code change itself looks correct.

Scope note on the "Known limitation" comment (lines ~894-904, unchanged by this diff): that comment documents the LTO-inlining section bloat (~4x on multipkg) and dead-PC-under-inlinee-symbol-ID effects for the in-body exact-entry record. Previously the exact-entry variant of this record only existed on the Win32/386 path; this PR now emits it for every address-taken function on every target. The per-record size is unchanged (the "X" operand is a relocation, not extra bytes), so this is bounded, but the comment now reads as more narrowly scoped than the behavior. Worth a follow-up to update that comment to state the limitation is now target-general, and to confirm the link-phase dedup mitigation it references actually covers the newly-enabled non-Win32 targets.

Comment thread internal/build/funcinfo_table.go Resolved
Comment thread internal/build/funcinfo_table.go Resolved
@fennoai

fennoai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Confirmed — the workspace is at head dca51b6 and the diff is unchanged from my prior analysis (same 3 files, same stats). The review I already produced from the four subagents is current. In managed mode I return the result as Markdown in my final message without publishing a comment.

Review: PR #3044 — build: fix function value lookup without prebuilt PCLN

This is a clean, well-scoped fix for #2857. Broadening the exact-entry inline-asm record from the Win32-only gate (siteObjectCOFF && PointerSize()==4 && functionAddressTaken) to if functionAddressTaken(fn) correctly makes reflect.ValueOf(fn).Pointer() → FuncForPC(...).Entry() resolve to the true entry on every target when the prebuilt PCLN rewrite is disabled, instead of the post-prologue anchor. The code change itself looks correct.

Verified clean (no findings)

  • No dead-function retention. The ${0:c} / "X" operand is a body-local inline-asm use, not llvm.used / llvm.compiler.used. If the containing function body is DCE'd, the record goes with it — GlobalDCE behavior is unchanged, matching the existing "X" pattern in ssa/globaldce.go. The comment's "without retaining any otherwise dead function" claim holds.
  • Per-target object emission is actively tested. The generalized TestFuncInfoUsesExactEntryForAddressTakenFunction cross-emits a real object (EmitToMemoryBuffer) for all 8 goos/goarch combos, deriving the directive from PointerSize() and the anchor from siteAnchorLabel(runtimeSiteObjectFormat(ctx), …). A malformed/non-relocatable record would surface as an assembler error, not silent FuncForPC corruption.
  • functionAddressTaken is conservative (any non-direct-call use ⇒ address-taken), which is the safe direction for correctness here.
  • Test changes are well targeted. t.Setenv("LLGO_PCLNPOST", "0") is what actually exercises the no-prebuilt-PCLN path, and the new once / closure (same-entry=true) assertions check exactly the contract the PR fixes. t.Setenv is auto-restored; no state leak, no secret/token exposure.

Minor notes (comment accuracy only)

  1. internal/build/funcinfo_table.go (~L950-951) — amd64-only framing of a cross-target hazard. The new comment correctly leads with the target-independent justification, but the concrete symptom is still framed as amd64-only ("can make an entry PC resolve to the preceding function on amd64") while the guard now fires on all targets. The anchor-after-prologue hazard is cross-target; amd64 is just the clearest example from the fixed issue. Marking it illustrative (e.g. "notably on amd64") would stop a future reader re-narrowing the guard.

  2. internal/build/funcinfo_table.go (~L952-953) — ragged line-wrap (nit). The comment is grammatically complete, but the wrap ("may safely carry" / "the true entry instead of…") is a diff-edit artifact from inserting the two new lead sentences. Re-wrapping the paragraph reads cleaner.

  3. internal/build/funcinfo_table.go (~L894-904, unchanged by this diff) — "Known limitation" scope. That comment documents the LTO-inlining section bloat (~4x on multipkg) and dead-PC-under-inlinee-symbol-ID effects for the in-body exact-entry record. Previously the exact-entry variant only existed on the Win32/386 path; this PR now emits it for every address-taken function on every target. Per-record size is unchanged (the "X" operand is a relocation, not extra bytes), so the impact is bounded — but the comment now reads more narrowly than the behavior. Worth a follow-up to state the limitation is target-general and to confirm the link-phase dedup mitigation it references covers the newly-enabled non-Win32 targets.

Verdict: Nothing blocking. The fix is correct and the test coverage targets the exact bug; the only items are the three minor comment-accuracy notes above.

View session

@cpunion

cpunion commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

@fennoai Updated the comments in 80ddf1e, including the target-general LTO behavior. Please re-review.

@fennoai

fennoai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Confirmed: the update since my last review is comment-only in funcinfo_table.go; the executable code and both test files are byte-identical to the version I already reviewed in depth (with four subagents). No new code behavior to re-analyze. All three of my prior notes are resolved. In managed mode I return the result as Markdown in my final message without publishing.

Re-review: PR #3044 @ 80ddf1e

The update since the previous revision (dca51b6) is comment-only in internal/build/funcinfo_table.go — the executable code and both test files are unchanged. All three of my earlier notes are addressed:

  1. ✅ amd64 framing (L951-952) — now "can misattribute an entry PC, notably on byte-aligned amd64". The "notably on" makes it clearly illustrative rather than amd64-exclusive.
  2. ✅ Ragged wrap in the address-taken comment (L949-953) — rewrapped into clean, complete lines; the mangled "may safely carry / the true entry" split is gone.
  3. ✅ "Known limitation" scope (L894-905) — now "Known limitation on native targets" and explicitly describes both record forms (anchor records attribute host PCs to the inlinee; exact-entry records repeat the original function's PC), states the post-link analyzer normalizes/deduplicates both when building the final ftab, and that the runtime falls back to raw records when the rewrite is disabled. This correctly makes the limitation target-general, matching the broadened code path.

Since the fix's logic and tests are identical to what I already validated (body-local "X" operand → no dead-function retention; per-target object emission exercised across all 8 goos/goarch combos; LLGO_PCLNPOST=0 + closure/same-entry=true assertions cover the exact #2857 contract), there's nothing further to flag there.

One remaining nit (pre-existing, non-blocking)

internal/build/funcinfo_table.go ~L900-902 — the rewrap left // !associated on its own short line before // affects only linker GC, so.... It reads fine but is a slightly ragged break; folding !associated onto the following line would tidy it. Purely cosmetic — no need to spin a revision just for this.

Verdict: Comments now accurately describe the generalized, all-target behavior. The fix is correct and well-tested. Approving in spirit (FennoAI posts non-blocking feedback only) — good to merge from my side; the remaining item is an optional nit.

View session

@codecov

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

Copy link
Copy Markdown
Collaborator Author

@fennoai Applied the shared CI fix for the repeated Ubuntu archive TLS failures: prioritized official HTTPS mirrors in the existing setup-deps helper. The helper and workflow-contract tests pass; no jobs, source suites or signing keys changed. Please re-review this CI-only update.

@fennoai

fennoai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

I have a complete picture. The CI workflow runs the test (ubuntu_apt_test.py) before applying the config — so the workflow-contract test is enforced in CI exactly as the author claimed. The analysis confirms the change is sound:

Assessment of the CI change (952bacd):

  • All URLs remain HTTPS — azure.archive.ubuntu.com is Canonical's official Azure-hosted mirror (a real official HTTPS endpoint), added as priority 1 ahead of the existing archive.ubuntu.com/security.ubuntu.com (now priority 2). No HTTP downgrade.
  • Mechanism is correct — these files feed apt's mirror+file: source, which supports the <url>\tpriority:N format. enumerate(mirrors, 1) yields priority:1, priority:2 in order, matching the intent (Azure first, official archive as fallback).
  • No security weakening — signing keys, source suites, and components are untouched; only the two mirror lists are rewritten, and only if path.exists() (i.e., only when the runner already uses them). The 80-llgo-downloads apt.conf (ForceIPv4, retries, timeouts) is unchanged.
  • ports (arm64 etc.) correctly becomes a 1-tuple ("…ports…/",) → single priority:1 line; no spurious Azure entry (Azure mirror is amd64/i386 only). Correct.
  • Tests updated and passing — I ran them: OK (2 tests). The test now covers amd64, i386, and arm64, asserts exact file contents including the \tpriority:N\n format and trailing newline, calls configure twice (idempotency preserved), and still asserts the source list and third-party list are untouched.
  • No trailing-newline bug — the old code wrote url + "\n"; the new code's f-string ends each line with \n and the test expects exactly that (no double newline). Verified.

The trigger comment's claims all check out: CI-only, no jobs/source-suites/signing-keys changed, helper + contract tests pass. The compiler fix and its tests are byte-identical to the revision I already fully reviewed and approved.

In managed mode I return the result as Markdown in my final message.

Re-review: PR #3044 @ 952bacd (CI-only update)

The incremental change since 80ddf1e is confined to two files under .github/actions/setup-deps/ — the compiler fix (funcinfo_table.go) and its tests are unchanged from the revision I already reviewed and approved. I verified the CI claims rather than taking them on trust.

What changed: ubuntu_apt.py now writes the amd64/i386 archive and security mirror lists as a prioritized pair — azure.archive.ubuntu.com at priority:1, the existing official archive.ubuntu.com/security.ubuntu.com at priority:2 — instead of a single URL, to stop apt from randomly picking an unavailable endpoint before the Azure mirror. ubuntu_apt_test.py is updated to match.

Verified clean:

  • ✅ No security weakening. All endpoints stay HTTPS (azure.archive.ubuntu.com is Canonical's official Azure mirror — not a third party, not HTTP). Signing keys, source suites, and components are untouched; only the two mirror lists are rewritten, and only if path.exists(). The 80-llgo-downloads apt.conf (ForceIPv4/retries/timeouts) is unchanged. Matches the trigger's "no jobs, source suites or signing keys changed."
  • ✅ Correct mirror format. The files feed apt's mirror+file: source, which supports <url>\tpriority:N. enumerate(mirrors, 1) produces priority:1 then priority:2 in order — Azure first, official archive as fallback.
  • ✅ arm64/ports handled correctly. Non-amd64/i386 becomes a 1-tuple → a single priority:1 line with no spurious Azure entry (Azure mirror doesn't serve ports). No regression for cross-arch runners.
  • ✅ No newline regression. Each generated line ends with exactly one \n; the test asserts exact contents (no double newline), calls configure twice to confirm idempotency, and still checks the source and third-party lists are left intact.
  • ✅ Tests pass. I ran python3 -m unittest ubuntu_apt_test → OK (2 tests, now covering amd64/i386/arm64). CI runs this same test before applying the config (action.yml:858-859), so the contract is enforced in the pipeline.

Minor nit (optional, non-blocking): the else branch binds archive = security = (...) to the same tuple object. It's read-only here so there's no aliasing hazard, and it mirrors the pre-existing style — fine as is; just noting it in case the branches later diverge.

Verdict: The CI fix is correct, HTTPS-only, and preserves signing/source integrity, with tests updated and passing. Combined with the already-approved compiler fix for #2857 (comments now accurately describe the target-general behavior), I see nothing blocking — good to merge from my side.

View task

@github-actions

Copy link
Copy Markdown

LLGo baseline benchmarks

952bacd7a1bb | workflow run | long-term charts

String equality benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkStringEquality/bytes/equal/1024/Go 25.800 ns/op -4.53 ns/op / -14.9% (better)
Linux BenchmarkStringEquality/bytes/equal/1024/LLGo 62.580 ns/op -0.44 ns/op / -0.7% (better)
Linux BenchmarkStringEquality/bytes/equal/128/Go 8.568 ns/op +0.199 ns/op / +2.4% (worse)
Linux BenchmarkStringEquality/bytes/equal/128/LLGo 12.440 ns/op +0.39 ns/op / +3.2% (worse)
Linux BenchmarkStringEquality/bytes/equal/8/Go 5.827 ns/op -0.029 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/bytes/equal/8/LLGo 4.355 ns/op +0.079 ns/op / +1.8% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/Go 6.636 ns/op -0.031 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/bytes/first/1024/LLGo 2.729 ns/op +0.008 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/bytes/first/128/Go 6.643 ns/op +0.008 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/first/128/LLGo 3.258 ns/op +0.513 ns/op / +18.7% (worse)
Linux BenchmarkStringEquality/bytes/first/8/Go 5.833 ns/op +0.005 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/first/8/LLGo 2.734 ns/op +0.01 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/Go 25.170 ns/op -0.14 ns/op / -0.6% (better)
Linux BenchmarkStringEquality/bytes/last/1024/LLGo 62.690 ns/op +0.06 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/last/128/Go 8.665 ns/op +0.488 ns/op / +6.0% (worse)
Linux BenchmarkStringEquality/bytes/last/128/LLGo 11.960 ns/op +0.13 ns/op / +1.1% (worse)
Linux BenchmarkStringEquality/bytes/last/8/Go 5.864 ns/op +0.032 ns/op / +0.5% (worse)
Linux BenchmarkStringEquality/bytes/last/8/LLGo 3.518 ns/op +0.011 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/strings/equal/1024/Go 23.210 ns/op -0.27 ns/op / -1.1% (better)
Linux BenchmarkStringEquality/strings/equal/1024/LLGo 55.380 ns/op +0.19 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/strings/equal/128/Go 8.335 ns/op +0.106 ns/op / +1.3% (worse)
Linux BenchmarkStringEquality/strings/equal/128/LLGo 11.260 ns/op 0 ns/op / +0.0%
Linux BenchmarkStringEquality/strings/equal/8/Go 15.250 ns/op +9.364 ns/op / +159.1% (worse)
Linux BenchmarkStringEquality/strings/equal/8/LLGo 4.340 ns/op +0.049 ns/op / +1.1% (worse)
Linux BenchmarkStringEquality/strings/first/1024/Go 6.620 ns/op -0.024 ns/op / -0.4% (better)
Linux BenchmarkStringEquality/strings/first/1024/LLGo 3.534 ns/op -0.032 ns/op / -0.9% (better)
Linux BenchmarkStringEquality/strings/first/128/Go 6.889 ns/op +0.281 ns/op / +4.3% (worse)
Linux BenchmarkStringEquality/strings/first/128/LLGo 4.763 ns/op +1.257 ns/op / +35.9% (worse)
Linux BenchmarkStringEquality/strings/first/8/Go 5.828 ns/op 0 ns/op / +0.0%
Linux BenchmarkStringEquality/strings/first/8/LLGo 3.512 ns/op +0.009 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/strings/last/1024/Go 22.840 ns/op -3.05 ns/op / -11.8% (better)
Linux BenchmarkStringEquality/strings/last/1024/LLGo 54.650 ns/op -0.03 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/last/128/Go 10.170 ns/op +1.995 ns/op / +24.4% (worse)
Linux BenchmarkStringEquality/strings/last/128/LLGo 11.060 ns/op -0.03 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/strings/last/8/Go 5.878 ns/op +0.052 ns/op / +0.9% (worse)
Linux BenchmarkStringEquality/strings/last/8/LLGo 4.287 ns/op +0.014 ns/op / +0.3% (worse)
macOS BenchmarkStringEquality/bytes/equal/1024/Go 27.630 ns/op +2.55 ns/op / +10.2% (worse)
macOS BenchmarkStringEquality/bytes/equal/1024/LLGo 27 ns/op +2.2 ns/op / +8.9% (worse)
macOS BenchmarkStringEquality/bytes/equal/128/Go 6.239 ns/op +0.632 ns/op / +11.3% (worse)
macOS BenchmarkStringEquality/bytes/equal/128/LLGo 6.037 ns/op +1.393 ns/op / +30.0% (worse)
macOS BenchmarkStringEquality/bytes/equal/8/Go 3.504 ns/op +0.07 ns/op / +2.0% (worse)
macOS BenchmarkStringEquality/bytes/equal/8/LLGo 3.199 ns/op +0.483 ns/op / +17.8% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/Go 4.549 ns/op +0.674 ns/op / +17.4% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/LLGo 2.210 ns/op +0.446 ns/op / +25.3% (worse)
macOS BenchmarkStringEquality/bytes/first/128/Go 4.069 ns/op +0.159 ns/op / +4.1% (worse)
macOS BenchmarkStringEquality/bytes/first/128/LLGo 1.897 ns/op +0.19 ns/op / +11.1% (worse)
macOS BenchmarkStringEquality/bytes/first/8/Go 3.566 ns/op +0.178 ns/op / +5.3% (worse)
macOS BenchmarkStringEquality/bytes/first/8/LLGo 1.974 ns/op +0.248 ns/op / +14.4% (worse)
macOS BenchmarkStringEquality/bytes/last/1024/Go 23.720 ns/op -1.65 ns/op / -6.5% (better)
macOS BenchmarkStringEquality/bytes/last/1024/LLGo 26.160 ns/op +1.77 ns/op / +7.3% (worse)
macOS BenchmarkStringEquality/bytes/last/128/Go 5.599 ns/op +0.312 ns/op / +5.9% (worse)
macOS BenchmarkStringEquality/bytes/last/128/LLGo 4.358 ns/op -0.043 ns/op / -1.0% (better)
macOS BenchmarkStringEquality/bytes/last/8/Go 3.733 ns/op +0.062 ns/op / +1.7% (worse)
macOS BenchmarkStringEquality/bytes/last/8/LLGo 2.699 ns/op +0.263 ns/op / +10.8% (worse)
macOS BenchmarkStringEquality/strings/equal/1024/Go 25.920 ns/op +0.21 ns/op / +0.8% (worse)
macOS BenchmarkStringEquality/strings/equal/1024/LLGo 29.230 ns/op +5.67 ns/op / +24.1% (worse)
macOS BenchmarkStringEquality/strings/equal/128/Go 5.900 ns/op -0.3 ns/op / -4.8% (better)
macOS BenchmarkStringEquality/strings/equal/128/LLGo 5.150 ns/op +0.511 ns/op / +11.0% (worse)
macOS BenchmarkStringEquality/strings/equal/8/Go 3.508 ns/op +0.125 ns/op / +3.7% (worse)
macOS BenchmarkStringEquality/strings/equal/8/LLGo 3.419 ns/op +0.672 ns/op / +24.5% (worse)
macOS BenchmarkStringEquality/strings/first/1024/Go 4.028 ns/op +0.152 ns/op / +3.9% (worse)
macOS BenchmarkStringEquality/strings/first/1024/LLGo 3.599 ns/op +1.825 ns/op / +102.9% (worse)
macOS BenchmarkStringEquality/strings/first/128/Go 4.464 ns/op +0.569 ns/op / +14.6% (worse)
macOS BenchmarkStringEquality/strings/first/128/LLGo 2.170 ns/op +0.463 ns/op / +27.1% (worse)
macOS BenchmarkStringEquality/strings/first/8/Go 3.553 ns/op +0.145 ns/op / +4.3% (worse)
macOS BenchmarkStringEquality/strings/first/8/LLGo 1.917 ns/op +0.212 ns/op / +12.4% (worse)
macOS BenchmarkStringEquality/strings/last/1024/Go 28.740 ns/op +3.59 ns/op / +14.3% (worse)
macOS BenchmarkStringEquality/strings/last/1024/LLGo 26.530 ns/op +2.46 ns/op / +10.2% (worse)
macOS BenchmarkStringEquality/strings/last/128/Go 5.430 ns/op +0.104 ns/op / +2.0% (worse)
macOS BenchmarkStringEquality/strings/last/128/LLGo 4.315 ns/op +0.526 ns/op / +13.9% (worse)
macOS BenchmarkStringEquality/strings/last/8/Go 3.628 ns/op +0.241 ns/op / +7.1% (worse)
macOS BenchmarkStringEquality/strings/last/8/LLGo 2.979 ns/op +0.557 ns/op / +23.0% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/Go 20.270 ns/op +0.28 ns/op / +1.4% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/LLGo 41.820 ns/op -4.49 ns/op / -9.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/Go 7.586 ns/op +0.081 ns/op / +1.1% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/LLGo 11.590 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/Go 5.905 ns/op -0.078 ns/op / -1.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/LLGo 4.943 ns/op -0.098 ns/op / -1.9% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/Go 5.940 ns/op -0.021 ns/op / -0.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/LLGo 3.705 ns/op -0.057 ns/op / -1.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/Go 5.870 ns/op -0.018 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/LLGo 3.709 ns/op -0.147 ns/op / -3.8% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/Go 5.901 ns/op -0.068 ns/op / -1.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/LLGo 3.733 ns/op +0.017 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/Go 19.370 ns/op -0.07 ns/op / -0.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/LLGo 40.920 ns/op +0.4 ns/op / +1.0% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/Go 6.592 ns/op +0.029 ns/op / +0.4% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/LLGo 11.020 ns/op -0.32 ns/op / -2.8% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/Go 5.882 ns/op -0.124 ns/op / -2.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/LLGo 4.356 ns/op +0.03 ns/op / +0.7% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/Go 20.130 ns/op -0.09 ns/op / -0.4% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/LLGo 40.060 ns/op +2.6 ns/op / +6.9% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/128/Go 7.516 ns/op -0.024 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/128/LLGo 7.179 ns/op -0.02 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/8/Go 6.358 ns/op -0.035 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/8/LLGo 3.797 ns/op +0.089 ns/op / +2.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/Go 6.071 ns/op +0.16 ns/op / +2.7% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/LLGo 2.514 ns/op +0.043 ns/op / +1.7% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/Go 6.878 ns/op +0.966 ns/op / +16.3% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/LLGo 2.481 ns/op +0.014 ns/op / +0.6% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/Go 6.790 ns/op +0.838 ns/op / +14.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/LLGo 2.593 ns/op +0.083 ns/op / +3.3% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/1024/Go 19.370 ns/op +0.01 ns/op / +0.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/1024/LLGo 36.920 ns/op -4.79 ns/op / -11.5% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/Go 6.577 ns/op +0.034 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/128/LLGo 6.910 ns/op +0.107 ns/op / +1.6% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/8/Go 5.899 ns/op -0.089 ns/op / -1.5% (better)
Windows MinGW BenchmarkStringEquality/strings/last/8/LLGo 3.199 ns/op +0.075 ns/op / +2.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/Go 31.750 ns/op +0.15 ns/op / +0.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 40.240 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/Go 10.060 ns/op -0.49 ns/op / -4.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/LLGo 9.231 ns/op +0.018 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/Go 7.100 ns/op -0.216 ns/op / -3.0% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/LLGo 4.495 ns/op -0.026 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/Go 8.078 ns/op +0.538 ns/op / +7.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.533 ns/op +0.045 ns/op / +1.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/Go 7.825 ns/op -0.354 ns/op / -4.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/LLGo 3.497 ns/op +0.008 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/Go 5.641 ns/op -0.181 ns/op / -3.1% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.480 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/Go 31.690 ns/op -0.09 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/LLGo 39.500 ns/op -0.04 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/Go 9.094 ns/op +0.135 ns/op / +1.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/LLGo 8.672 ns/op -0.038 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/Go 6.934 ns/op -0.234 ns/op / -3.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.768 ns/op +0.063 ns/op / +1.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/Go 28.060 ns/op +0.41 ns/op / +1.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/LLGo 37.120 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/Go 9.550 ns/op -0.124 ns/op / -1.3% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/LLGo 9.254 ns/op +0.02 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/Go 7.634 ns/op -0.457 ns/op / -5.6% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/LLGo 4.475 ns/op +0.052 ns/op / +1.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/Go 6.913 ns/op -0.11 ns/op / -1.6% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.619 ns/op -0.038 ns/op / -1.0% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/Go 6.870 ns/op -0.168 ns/op / -2.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/LLGo 3.640 ns/op +0.059 ns/op / +1.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/Go 5.652 ns/op -1.64 ns/op / -22.5% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/LLGo 3.614 ns/op -0.028 ns/op / -0.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/Go 25.960 ns/op -0.32 ns/op / -1.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/LLGo 46.310 ns/op +9.78 ns/op / +26.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/Go 8.801 ns/op +0.462 ns/op / +5.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/LLGo 8.355 ns/op -0.028 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/Go 7.525 ns/op -1.853 ns/op / -19.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/LLGo 4.371 ns/op -0.019 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.220 ns/op -0.2 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 39.060 ns/op -0.36 ns/op / -0.9% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.726 ns/op +0.066 ns/op / +1.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.019 ns/op -0.087 ns/op / -1.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.751 ns/op +0.024 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.857 ns/op +0.374 ns/op / +15.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.725 ns/op -0.025 ns/op / -0.5% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.714 ns/op +0.124 ns/op / +7.8% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.850 ns/op +0.059 ns/op / +1.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.719 ns/op +0.118 ns/op / +7.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.564 ns/op +0.102 ns/op / +2.9% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.702 ns/op +0.128 ns/op / +8.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/Go 30.960 ns/op -0.13 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39 ns/op -0.25 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.728 ns/op +0.015 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.795 ns/op -0.027 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.548 ns/op +0.006 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.478 ns/op +0.298 ns/op / +13.7% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.390 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 36.250 ns/op +0.27 ns/op / +0.8% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.056 ns/op +0.003 ns/op / +0.04956% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 6.007 ns/op +0.278 ns/op / +4.9% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/Go 4.001 ns/op -0.006 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.881 ns/op +0.221 ns/op / +8.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.477 ns/op -0.033 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.772 ns/op +0.19 ns/op / +12.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/Go 4.502 ns/op -0.033 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.720 ns/op +0.111 ns/op / +6.9% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/Go 3.958 ns/op +0.068 ns/op / +1.7% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.772 ns/op +0.209 ns/op / +13.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.080 ns/op -0.04 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.460 ns/op -0.24 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/Go 5.911 ns/op -0.002 ns/op / -0.03382% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.462 ns/op +0.012 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/Go 3.901 ns/op +0.027 ns/op / +0.7% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.206 ns/op +0.174 ns/op / +8.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/Go 20.090 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/LLGo 41.760 ns/op +0.52 ns/op / +1.3% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/Go 8.357 ns/op +0.908 ns/op / +12.2% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/LLGo 11 ns/op -0.69 ns/op / -5.9% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/Go 5.939 ns/op +0.037 ns/op / +0.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/LLGo 4.687 ns/op -0.287 ns/op / -5.8% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/Go 5.931 ns/op -0.151 ns/op / -2.5% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/LLGo 3.707 ns/op +0.001 ns/op / +0.02698% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/Go 6.009 ns/op +0.123 ns/op / +2.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/LLGo 3.706 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/Go 5.881 ns/op -0.066 ns/op / -1.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/LLGo 3.736 ns/op -0.044 ns/op / -1.2% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/Go 19.480 ns/op +0.09 ns/op / +0.5% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/LLGo 41.480 ns/op +0.36 ns/op / +0.9% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/Go 6.571 ns/op -0.004 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/128/LLGo 10.750 ns/op -0.98 ns/op / -8.4% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/8/Go 6.828 ns/op +0.81 ns/op / +13.5% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/LLGo 4.386 ns/op +0.058 ns/op / +1.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/Go 20.130 ns/op -0.04 ns/op / -0.2% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/LLGo 39.050 ns/op +1.57 ns/op / +4.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/128/Go 7.553 ns/op +0.061 ns/op / +0.8% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/128/LLGo 7.541 ns/op +0.546 ns/op / +7.8% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/Go 5.939 ns/op -0.154 ns/op / -2.5% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/8/LLGo 3.398 ns/op -0.371 ns/op / -9.8% (better)
Windows MSVC BenchmarkStringEquality/strings/first/1024/Go 5.961 ns/op +0.025 ns/op / +0.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/1024/LLGo 2.777 ns/op +0.309 ns/op / +12.5% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/Go 5.975 ns/op -0.834 ns/op / -12.2% (better)
Windows MSVC BenchmarkStringEquality/strings/first/128/LLGo 2.920 ns/op +0.386 ns/op / +15.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/Go 5.929 ns/op +0.02 ns/op / +0.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/LLGo 2.780 ns/op +0.31 ns/op / +12.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/1024/Go 19.450 ns/op +0.04 ns/op / +0.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/1024/LLGo 38.180 ns/op +1.2 ns/op / +3.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/128/Go 6.605 ns/op -0.008 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/LLGo 6.830 ns/op +0.009 ns/op / +0.1% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/8/Go 5.987 ns/op -0.028 ns/op / -0.5% (better)
Windows MSVC BenchmarkStringEquality/strings/last/8/LLGo 3.395 ns/op +0.236 ns/op / +7.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/Go 30.950 ns/op -0.15 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 84.830 ns/op +0.22 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/Go 9.816 ns/op +0.009 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/LLGo 16.150 ns/op +0.05 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/Go 7.345 ns/op +0.023 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.084 ns/op +0.053 ns/op / +1.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/Go 8.030 ns/op -0.027 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.745 ns/op -0.27 ns/op / -6.7% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/Go 8.126 ns/op +0.042 ns/op / +0.5% (worse)
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.017 ns/op -0.025 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.746 ns/op +0.04 ns/op / +1.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/Go 30.450 ns/op -0.25 ns/op / -0.8% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/LLGo 84.800 ns/op +0.54 ns/op / +0.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/Go 9.541 ns/op -0.264 ns/op / -2.7% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/LLGo 15.920 ns/op +0.2 ns/op / +1.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/Go 7.473 ns/op +0.061 ns/op / +0.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.375 ns/op -0.172 ns/op / -3.8% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/Go 28.640 ns/op -0.26 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/LLGo 95.240 ns/op +0.1 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/Go 9.466 ns/op -0.132 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/LLGo 22.880 ns/op +6.13 ns/op / +36.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/Go 7.253 ns/op -0.088 ns/op / -1.2% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/LLGo 5.034 ns/op +0.085 ns/op / +1.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/Go 7.793 ns/op -0.006 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.624 ns/op -0.245 ns/op / -6.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/Go 7.759 ns/op +0.072 ns/op / +0.9% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/LLGo 3.642 ns/op -0.049 ns/op / -1.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/Go 6.848 ns/op +0.026 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/LLGo 3.662 ns/op +0.018 ns/op / +0.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/Go 28.090 ns/op +0.05 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/LLGo 94.250 ns/op -0.72 ns/op / -0.8% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/Go 9.134 ns/op +0.036 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/LLGo 16.350 ns/op +0.05 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/Go 7.160 ns/op +0.003 ns/op / +0.04192% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/LLGo 4.630 ns/op -0.027 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.210 ns/op +0.03 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 38.180 ns/op -0.69 ns/op / -1.8% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.694 ns/op +0.003 ns/op / +0.04484% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.123 ns/op +0.104 ns/op / +1.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.715 ns/op -0.049 ns/op / -1.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.925 ns/op +0.21 ns/op / +7.7% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.768 ns/op +0.03 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.789 ns/op +0.175 ns/op / +10.8% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.724 ns/op -0.023 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.784 ns/op +0.15 ns/op / +9.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.489 ns/op +0.105 ns/op / +3.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.773 ns/op +0.177 ns/op / +11.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/Go 30.970 ns/op -0.18 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 38.880 ns/op +0.19 ns/op / +0.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.702 ns/op +0.06 ns/op / +0.9% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.749 ns/op -0.002 ns/op / -0.02963% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.548 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.515 ns/op +0.294 ns/op / +13.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.410 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.840 ns/op -0.05 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.073 ns/op -0.006 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.658 ns/op -0.222 ns/op / -3.8% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.895 ns/op -0.039 ns/op / -1.0% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.356 ns/op -0.079 ns/op / -3.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.546 ns/op +0.022 ns/op / +0.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.538 ns/op -0.21 ns/op / -12.0% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/Go 4.538 ns/op -0.033 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.649 ns/op -0.077 ns/op / -4.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/Go 3.858 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.603 ns/op -0.166 ns/op / -9.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.110 ns/op +0.01 ns/op / +0.0369% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.350 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/Go 5.922 ns/op +0.008 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.479 ns/op -0.029 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/Go 3.873 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/LLGo 1.999 ns/op -0.218 ns/op / -9.8% (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.198 s -150.8 ms / -11.2% (better) 1.352 ms -91.88 us / -6.4% (better)
Linux cprintf-lto 8240 B 0 B / +0.0% 368 B 0 B / +0.0% 1.180 s -232.2 ms / -16.4% (better) 1.311 ms -114.1 us / -8.0% (better)
Linux fmtprintf 1943680 B -80 B / -0.004116% (better) 269977 B +1 B / +0.0003704% (worse) 7.328 s -2.291 s / -23.8% (better) 3.459 ms -1.573 ms / -31.3% (better)
Linux fmtprintf-lto 1130312 B +110440 B / +10.8% (worse) 221283 B +10392 B / +4.9% (worse) 18.003 s -4.422 s / -19.7% (better) 3.433 ms -1.302 ms / -27.5% (better)
Linux println 260552 B -104 B / -0.0399% (better) 19173 B +1 B / +0.005216% (worse) 1.219 s -335.9 ms / -21.6% (better) 1.727 ms -305.9 us / -15.0% (better)
Linux println-lto 103184 B +504 B / +0.5% (worse) 15733 B +81 B / +0.5% (worse) 2.001 s -1.106 s / -35.6% (better) 1.899 ms +59.12 us / +3.2% (worse)
macOS cprintf 50944 B 0 B / +0.0% 4409 B 0 B / +0.0% 922.399 ms -199.2 ms / -17.8% (better) 2.842 ms +74.67 us / +2.7% (worse)
macOS cprintf-lto 50608 B 0 B / +0.0% 161 B 0 B / +0.0% 912.799 ms -172.1 ms / -15.9% (better) 2.420 ms -160.8 us / -6.2% (better)
macOS fmtprintf 1233696 B 0 B / +0.0% 676093 B 0 B / +0.0% 4.076 s -363.9 ms / -8.2% (better) 4.801 ms +661.3 us / +16.0% (worse)
macOS fmtprintf-lto 871600 B 0 B / +0.0% 521789 B 0 B / +0.0% 6.071 s -845.7 ms / -12.2% (better) 3.706 ms +147 us / +4.1% (worse)
macOS println 100592 B 0 B / +0.0% 26375 B 0 B / +0.0% 874.283 ms -532.3 ms / -37.8% (better) 3.220 ms -1.651 ms / -33.9% (better)
macOS println-lto 85632 B 0 B / +0.0% 22491 B 0 B / +0.0% 1.122 s -230.8 ms / -17.1% (better) 3.408 ms +173.4 us / +5.4% (worse)
Windows MinGW cprintf 745984 B 0 B / +0.0% 4230 B 0 B / +0.0% 2.063 s -87.7 ms / -4.1% (better) 3.759 ms +98.6 us / +2.7% (worse)
Windows MinGW cprintf-lto 60928 B 0 B / +0.0% 4182 B 0 B / +0.0% 2.130 s -42.76 ms / -2.0% (better) 3.574 ms -350.5 us / -8.9% (better)
Windows MinGW fmtprintf 5156864 B 0 B / +0.0% 362134 B 0 B / +0.0% 6.922 s -12.45 ms / -0.2% (better) 9.541 ms -1.533 ms / -13.8% (better)
Windows MinGW fmtprintf-lto 2766336 B +2048 B / +0.1% (worse) 308374 B +272 B / +0.1% (worse) 11.074 s -586.6 ms / -5.0% (better) 9.381 ms -1.005 ms / -9.7% (better)
Windows MinGW println 807936 B 0 B / +0.0% 27414 B 0 B / +0.0% 2.026 s -137.9 ms / -6.4% (better) 7.569 ms +977.1 us / +14.8% (worse)
Windows MinGW println-lto 234496 B +512 B / +0.2% (worse) 22790 B +192 B / +0.8% (worse) 2.366 s -145.6 ms / -5.8% (better) 6.933 ms -527.5 us / -7.1% (better)
Windows MinGW 386 cprintf 752128 B 0 B / +0.0% 22726 B 0 B / +0.0% 1.922 s +37.85 ms / +2.0% (worse) 9.692 ms +723.8 us / +8.1% (worse)
Windows MinGW 386 cprintf-lto 282112 B 0 B / +0.0% 19504 B 0 B / +0.0% 2.227 s +62 ms / +2.9% (worse) 8.438 ms -337.3 us / -3.8% (better)
Windows MinGW 386 fmtprintf 4507648 B 0 B / +0.0% 284864 B 0 B / +0.0% 6.477 s -30.76 ms / -0.5% (better) 11.971 ms +370.1 us / +3.2% (worse)
Windows MinGW 386 fmtprintf-lto 2890752 B 0 B / +0.0% 257486 B 0 B / +0.0% 10.503 s +62.15 ms / +0.6% (worse) 11.633 ms -83.5 us / -0.7% (better)
Windows MinGW 386 println 751104 B 0 B / +0.0% 22672 B 0 B / +0.0% 1.926 s +69.8 ms / +3.8% (worse) 9.178 ms +446 us / +5.1% (worse)
Windows MinGW 386 println-lto 281088 B 0 B / +0.0% 19438 B 0 B / +0.0% 2.152 s -25.1 ms / -1.2% (better) 8.933 ms +119.6 us / +1.4% (worse)
Windows MinGW ARM64 cprintf 751104 B -512 B / -0.1% (better) 4028 B 0 B / +0.0% 2.029 s -85.59 ms / -4.0% (better) 5.793 ms -7.8 us / -0.1% (better)
Windows MinGW ARM64 cprintf-lto 60416 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.005 s -127.5 ms / -6.0% (better) 5.628 ms -218.2 us / -3.7% (better)
Windows MinGW ARM64 fmtprintf 5092352 B -4096 B / -0.1% (better) 302168 B 0 B / +0.0% 6.150 s -138.3 ms / -2.2% (better) 12.482 ms -552.4 us / -4.2% (better)
Windows MinGW ARM64 fmtprintf-lto 2877952 B +59904 B / +2.1% (worse) 264216 B +5932 B / +2.3% (worse) 9.556 s -366.2 ms / -3.7% (better) 12.522 ms +15.2 us / +0.1% (worse)
Windows MinGW ARM64 println 812032 B -1024 B / -0.1% (better) 25604 B 0 B / +0.0% 2.046 s -89.5 ms / -4.2% (better) 10.471 ms -128.6 us / -1.2% (better)
Windows MinGW ARM64 println-lto 237568 B +512 B / +0.2% (worse) 21888 B +64 B / +0.3% (worse) 2.327 s -74.42 ms / -3.1% (better) 10.170 ms -489.1 us / -4.6% (better)
Windows MSVC cprintf 990720 B 0 B / +0.0% 66003 B 0 B / +0.0% 2.239 s +270.6 ms / +13.7% (worse) 3.482 ms +71 us / +2.1% (worse)
Windows MSVC cprintf-lto 308736 B 0 B / +0.0% 65971 B 0 B / +0.0% 2.010 s +35.47 ms / +1.8% (worse) 3.857 ms +444.1 us / +13.0% (worse)
Windows MSVC fmtprintf 5455872 B 0 B / +0.0% 458230 B 0 B / +0.0% 6.570 s +13.28 ms / +0.2% (worse) 11.197 ms +313.2 us / +2.9% (worse)
Windows MSVC fmtprintf-lto 3089408 B +1536 B / +0.04974% (worse) 406854 B +192 B / +0.04721% (worse) 10.314 s -80.46 ms / -0.8% (better) 10.791 ms -783.3 us / -6.8% (better)
Windows MSVC println 1122304 B 0 B / +0.0% 123574 B 0 B / +0.0% 1.965 s -41.45 ms / -2.1% (better) 8.649 ms +1.374 ms / +18.9% (worse)
Windows MSVC println-lto 554496 B +512 B / +0.1% (worse) 119462 B +48 B / +0.0402% (worse) 2.254 s -12.97 ms / -0.6% (better) 8.516 ms +1.264 ms / +17.4% (worse)
Windows MSVC 386 cprintf 661504 B 0 B / +0.0% 21378 B 0 B / +0.0% 1.933 s -1.111 ms / -0.1% (better) 9.308 ms -331.4 us / -3.4% (better)
Windows MSVC 386 cprintf-lto 221184 B 0 B / +0.0% 18857 B 0 B / +0.0% 2.185 s -10.64 ms / -0.5% (better) 9.187 ms -205.7 us / -2.2% (better)
Windows MSVC 386 fmtprintf 4235264 B 0 B / +0.0% 268326 B 0 B / +0.0% 6.549 s -90.09 ms / -1.4% (better) 12.848 ms +501 us / +4.1% (worse)
Windows MSVC 386 fmtprintf-lto 2704384 B 0 B / +0.0% 236961 B 0 B / +0.0% 10.205 s +45.94 ms / +0.5% (worse) 13.191 ms +799.8 us / +6.5% (worse)
Windows MSVC 386 println 658432 B 0 B / +0.0% 21308 B 0 B / +0.0% 1.921 s -13.72 ms / -0.7% (better) 9.333 ms -178.1 us / -1.9% (better)
Windows MSVC 386 println-lto 219648 B 0 B / +0.0% 18787 B 0 B / +0.0% 2.159 s -25.85 ms / -1.2% (better) 9.765 ms +512 us / +5.5% (worse)
Windows MSVC ARM64 cprintf 754176 B -512 B / -0.1% (better) 4240 B 0 B / +0.0% 2.008 s +54.89 ms / +2.8% (worse) 7.298 ms +723.7 us / +11.0% (worse)
Windows MSVC ARM64 cprintf-lto 66048 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.991 s +33.09 ms / +1.7% (worse) 6.758 ms +151.4 us / +2.3% (worse)
Windows MSVC ARM64 fmtprintf 5088256 B -4096 B / -0.1% (better) 302492 B 0 B / +0.0% 6.326 s +180.2 ms / +2.9% (worse) 14.884 ms -373.8 us / -2.4% (better)
Windows MSVC ARM64 fmtprintf-lto 2885632 B +58880 B / +2.1% (worse) 265168 B +5936 B / +2.3% (worse) 9.833 s +97.17 ms / +1.0% (worse) 15.358 ms -436.1 us / -2.8% (better)
Windows MSVC ARM64 println 814592 B -1024 B / -0.1% (better) 26084 B 0 B / +0.0% 1.948 s +24.24 ms / +1.3% (worse) 11.832 ms +486.6 us / +4.3% (worse)
Windows MSVC ARM64 println-lto 243712 B +512 B / +0.2% (worse) 22448 B +64 B / +0.3% (worse) 2.209 s +33.41 ms / +1.5% (worse) 11.927 ms +768 us / +6.9% (worse)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.700 ns/op -0.16 ns/op / -1.1% (better)
Linux BenchmarkMergeCompilerFlags 214.400 ns/op +8.3 ns/op / +4.0% (worse)
Linux BenchmarkMergeLinkerFlags 136.500 ns/op +3.7 ns/op / +2.8% (worse)
Linux BenchmarkChannelBuffered 71.970 ns/op -0.55 ns/op / -0.8% (better)
Linux BenchmarkChannelHandoff 14124 ns/op +157 ns/op / +1.1% (worse)
Linux BenchmarkDefer 16.150 ns/op -0.84 ns/op / -4.9% (better)
Linux BenchmarkDirectCall 1.167 ns/op -0.582 ns/op / -33.3% (better)
Linux BenchmarkGlobalRead 1.174 ns/op -0.001 ns/op / -0.1% (better)
Linux BenchmarkGlobalWrite 7.779 ns/op -0.095 ns/op / -1.2% (better)
Linux BenchmarkGoroutine 24378 ns/op -5828 ns/op / -19.3% (better)
Linux BenchmarkInterfaceCall 4.906 ns/op -0.192 ns/op / -3.8% (better)
Linux BenchmarkRuntimeGetG 2.435 ns/op -0.203 ns/op / -7.7% (better)
macOS BenchmarkLookupPCRandom 11.480 ns/op -2.17 ns/op / -15.9% (better)
macOS BenchmarkMergeCompilerFlags 96.960 ns/op -5.24 ns/op / -5.1% (better)
macOS BenchmarkMergeLinkerFlags 59.270 ns/op -10.36 ns/op / -14.9% (better)
macOS BenchmarkChannelBuffered 30.850 ns/op +3.87 ns/op / +14.3% (worse)
macOS BenchmarkChannelHandoff 7269 ns/op +402 ns/op / +5.9% (worse)
macOS BenchmarkDefer 10.950 ns/op +0.16 ns/op / +1.5% (worse)
macOS BenchmarkDirectCall 1.043 ns/op 0 ns/op / +0.0%
macOS BenchmarkGlobalRead 1.193 ns/op +0.104 ns/op / +9.6% (worse)
macOS BenchmarkGlobalWrite 1.110 ns/op +0.069 ns/op / +6.6% (worse)
macOS BenchmarkGoroutine 86167 ns/op +53369 ns/op / +162.7% (worse)
macOS BenchmarkInterfaceCall 4.069 ns/op +0.186 ns/op / +4.8% (worse)
macOS BenchmarkRuntimeGetG 2.089 ns/op +0.051 ns/op / +2.5% (worse)
Windows MinGW BenchmarkLookupPCRandom 13.260 ns/op +0.07 ns/op / +0.5% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 633.200 ns/op -40.7 ns/op / -6.0% (better)
Windows MinGW BenchmarkMergeLinkerFlags 553.800 ns/op -33.8 ns/op / -5.8% (better)
Windows MinGW BenchmarkChannelBuffered 35.390 ns/op -0.68 ns/op / -1.9% (better)
Windows MinGW BenchmarkChannelHandoff 606 ns/op +42.3 ns/op / +7.5% (worse)
Windows MinGW BenchmarkDefer 14.990 ns/op +0.72 ns/op / +5.0% (worse)
Windows MinGW BenchmarkDirectCall 1.860 ns/op +0.312 ns/op / +20.2% (worse)
Windows MinGW BenchmarkGlobalRead 1.550 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGlobalWrite 2.472 ns/op -0.023 ns/op / -0.9% (better)
Windows MinGW BenchmarkGoroutine 94127 ns/op -871 ns/op / -0.9% (better)
Windows MinGW BenchmarkInterfaceCall 7.136 ns/op -0.33 ns/op / -4.4% (better)
Windows MinGW BenchmarkRuntimeGetG 2.175 ns/op +0.311 ns/op / +16.7% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 68.750 ns/op +0.12 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 871.900 ns/op +38.7 ns/op / +4.6% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 784.600 ns/op -32.2 ns/op / -3.9% (better)
Windows MinGW 386 BenchmarkChannelBuffered 64.690 ns/op +0.21 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkChannelHandoff 2143 ns/op -863 ns/op / -28.7% (better)
Windows MinGW 386 BenchmarkDefer 17.240 ns/op +0.03 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkDirectCall 0.867 ns/op -0.0013 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGlobalRead 1.160 ns/op +0.004 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 16.140 ns/op -0.05 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkGoroutine 200019 ns/op -5543 ns/op / -2.7% (better)
Windows MinGW 386 BenchmarkInterfaceCall 5.750 ns/op -0.036 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 2.025 ns/op +0.006 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.150 ns/op +0.09 ns/op / +0.7% (worse)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 554.800 ns/op -3.5 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 523.700 ns/op +1.6 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 43.070 ns/op +0.18 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 1728 ns/op -17 ns/op / -1.0% (better)
Windows MinGW ARM64 BenchmarkDefer 11.820 ns/op -0.29 ns/op / -2.4% (better)
Windows MinGW ARM64 BenchmarkDirectCall 0.663 ns/op +0.0739 ns/op / +12.5% (worse)
Windows MinGW ARM64 BenchmarkGlobalRead 0.590 ns/op -0.0734 ns/op / -11.1% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.884 ns/op +0.2211 ns/op / +33.3% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 56964 ns/op -531 ns/op / -0.9% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 3.857 ns/op +0.013 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.769 ns/op -0.047 ns/op / -2.6% (better)
Windows MSVC BenchmarkLookupPCRandom 12.930 ns/op -0.06 ns/op / -0.5% (better)
Windows MSVC BenchmarkMergeCompilerFlags 633.100 ns/op +2.2 ns/op / +0.3% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 550.100 ns/op +7.7 ns/op / +1.4% (worse)
Windows MSVC BenchmarkChannelBuffered 32.890 ns/op -0.52 ns/op / -1.6% (better)
Windows MSVC BenchmarkChannelHandoff 669 ns/op +68.1 ns/op / +11.3% (worse)
Windows MSVC BenchmarkDefer 14.030 ns/op -0.3 ns/op / -2.1% (better)
Windows MSVC BenchmarkDirectCall 1.859 ns/op +0.31 ns/op / +20.0% (worse)
Windows MSVC BenchmarkGlobalRead 1.550 ns/op -0.308 ns/op / -16.6% (better)
Windows MSVC BenchmarkGlobalWrite 2.469 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGoroutine 91233 ns/op +1080 ns/op / +1.2% (worse)
Windows MSVC BenchmarkInterfaceCall 7.457 ns/op -0.303 ns/op / -3.9% (better)
Windows MSVC BenchmarkRuntimeGetG 2.480 ns/op +0.309 ns/op / +14.2% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 26.470 ns/op -0.13 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkMergeCompilerFlags 765.600 ns/op +55.8 ns/op / +7.9% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 689.200 ns/op +18.9 ns/op / +2.8% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 43.300 ns/op -0.3 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkChannelHandoff 640.300 ns/op -24.3 ns/op / -3.7% (better)
Windows MSVC 386 BenchmarkDefer 16.130 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkDirectCall 1.550 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkGlobalRead 1.863 ns/op -0.004 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.788 ns/op +0.012 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGoroutine 111368 ns/op +2495 ns/op / +2.3% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 7.464 ns/op -0.002 ns/op / -0.02679% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.170 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.130 ns/op -0.02 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 636.800 ns/op +54.2 ns/op / +9.3% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 577.500 ns/op +47.5 ns/op / +9.0% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 46.260 ns/op -1.13 ns/op / -2.4% (better)
Windows MSVC ARM64 BenchmarkChannelHandoff 1333 ns/op -34 ns/op / -2.5% (better)
Windows MSVC ARM64 BenchmarkDefer 11.760 ns/op -0.13 ns/op / -1.1% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op +0.0002 ns/op / +0.03393% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.664 ns/op +0.0001 ns/op / +0.01507% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.758 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkGoroutine 58996 ns/op +479 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 3.846 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.804 ns/op +0.035 ns/op / +2.0% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 915.900 ns/op -90.1 ns/op / -9.0% (better)
Linux AfterFuncZeroDelivery/LLGo 39332 ns/op -4341 ns/op / -9.9% (better)
Linux CreateStop/Go 297.600 ns/op -43.6 ns/op / -12.8% (better)
Linux CreateStop/LLGo 1449 ns/op -52 ns/op / -3.5% (better)
Linux RearmStopped/Go 116.500 ns/op -1.7 ns/op / -1.4% (better)
Linux RearmStopped/LLGo 818.100 ns/op -146.4 ns/op / -15.2% (better)
Linux ResetActive/Go 68.970 ns/op -1.17 ns/op / -1.7% (better)
Linux ResetActive/LLGo 1041 ns/op +335 ns/op / +47.5% (worse)
Linux ResetHeap1024/Go 67.420 ns/op -3.75 ns/op / -5.3% (better)
Linux ResetHeap1024/LLGo 133.600 ns/op -17.2 ns/op / -11.4% (better)
macOS AfterFuncZeroDelivery/Go 413.700 ns/op -12.6 ns/op / -3.0% (better)
macOS AfterFuncZeroDelivery/LLGo 39351 ns/op +6354 ns/op / +19.3% (worse)
macOS CreateStop/Go 127 ns/op -9.2 ns/op / -6.8% (better)
macOS CreateStop/LLGo 355.800 ns/op +9.8 ns/op / +2.8% (worse)
macOS RearmStopped/Go 55.180 ns/op -3.12 ns/op / -5.4% (better)
macOS RearmStopped/LLGo 222.800 ns/op -0.3 ns/op / -0.1% (better)
macOS ResetActive/Go 40.700 ns/op -1.7 ns/op / -4.0% (better)
macOS ResetActive/LLGo 128.300 ns/op -3.7 ns/op / -2.8% (better)
macOS ResetHeap1024/Go 42.010 ns/op -6.17 ns/op / -12.8% (better)
macOS ResetHeap1024/LLGo 65.520 ns/op -5.03 ns/op / -7.1% (better)
Windows MinGW AfterFuncZeroDelivery/Go 565.900 ns/op -1.9 ns/op / -0.3% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 188951 ns/op -1494 ns/op / -0.8% (better)
Windows MinGW CreateStop/Go 116.600 ns/op -3.2 ns/op / -2.7% (better)
Windows MinGW CreateStop/LLGo 679.100 ns/op +0.3 ns/op / +0.0442% (worse)
Windows MinGW RearmStopped/Go 32.010 ns/op -0.01 ns/op / -0.03123% (better)
Windows MinGW RearmStopped/LLGo 244.300 ns/op +6.5 ns/op / +2.7% (worse)
Windows MinGW ResetActive/Go 20.210 ns/op +0.04 ns/op / +0.2% (worse)
Windows MinGW ResetActive/LLGo 168.300 ns/op +3.9 ns/op / +2.4% (worse)
Windows MinGW ResetHeap1024/Go 20.580 ns/op +0.03 ns/op / +0.1% (worse)
Windows MinGW ResetHeap1024/LLGo 103.300 ns/op +0.1 ns/op / +0.1% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 1117 ns/op -4 ns/op / -0.4% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 274824 ns/op +11639 ns/op / +4.4% (worse)
Windows MinGW 386 CreateStop/Go 268 ns/op -4 ns/op / -1.5% (better)
Windows MinGW 386 CreateStop/LLGo 977.500 ns/op -46.5 ns/op / -4.5% (better)
Windows MinGW 386 RearmStopped/Go 92.010 ns/op -0.29 ns/op / -0.3% (better)
Windows MinGW 386 RearmStopped/LLGo 622.100 ns/op -83.7 ns/op / -11.9% (better)
Windows MinGW 386 ResetActive/Go 45.920 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW 386 ResetActive/LLGo 463 ns/op -411.5 ns/op / -47.1% (better)
Windows MinGW 386 ResetHeap1024/Go 46.290 ns/op -0.19 ns/op / -0.4% (better)
Windows MinGW 386 ResetHeap1024/LLGo 139.100 ns/op +0.8 ns/op / +0.6% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 660.200 ns/op -5.9 ns/op / -0.9% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 128121 ns/op -4613 ns/op / -3.5% (better)
Windows MinGW ARM64 CreateStop/Go 190.600 ns/op -2.8 ns/op / -1.4% (better)
Windows MinGW ARM64 CreateStop/LLGo 365.700 ns/op +53.6 ns/op / +17.2% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.730 ns/op +0.11 ns/op / +0.2% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 157.800 ns/op -1.3 ns/op / -0.8% (better)
Windows MinGW ARM64 ResetActive/Go 30.830 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW ARM64 ResetActive/LLGo 109.600 ns/op +10.77 ns/op / +10.9% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 30.860 ns/op -0.08 ns/op / -0.3% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 91.670 ns/op -0.49 ns/op / -0.5% (better)
Windows MSVC AfterFuncZeroDelivery/Go 579 ns/op +10.3 ns/op / +1.8% (worse)
Windows MSVC AfterFuncZeroDelivery/LLGo 178883 ns/op -108 ns/op / -0.1% (better)
Windows MSVC CreateStop/Go 116.700 ns/op -7 ns/op / -5.7% (better)
Windows MSVC CreateStop/LLGo 402.300 ns/op -17.6 ns/op / -4.2% (better)
Windows MSVC RearmStopped/Go 31.740 ns/op +0.21 ns/op / +0.7% (worse)
Windows MSVC RearmStopped/LLGo 268.200 ns/op -31.3 ns/op / -10.5% (better)
Windows MSVC ResetActive/Go 20.120 ns/op 0 ns/op / +0.0%
Windows MSVC ResetActive/LLGo 172.200 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC ResetHeap1024/Go 20.490 ns/op +0.08 ns/op / +0.4% (worse)
Windows MSVC ResetHeap1024/LLGo 101.400 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 955.400 ns/op +4.7 ns/op / +0.5% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 207466 ns/op -186 ns/op / -0.1% (better)
Windows MSVC 386 CreateStop/Go 192.900 ns/op +2.2 ns/op / +1.2% (worse)
Windows MSVC 386 CreateStop/LLGo 454.200 ns/op +13.6 ns/op / +3.1% (worse)
Windows MSVC 386 RearmStopped/Go 63.380 ns/op -0.13 ns/op / -0.2% (better)
Windows MSVC 386 RearmStopped/LLGo 315.600 ns/op -90.9 ns/op / -22.4% (better)
Windows MSVC 386 ResetActive/Go 39.080 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC 386 ResetActive/LLGo 964.200 ns/op -35.6 ns/op / -3.6% (better)
Windows MSVC 386 ResetHeap1024/Go 39.480 ns/op -0.11 ns/op / -0.3% (better)
Windows MSVC 386 ResetHeap1024/LLGo 140.800 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 668.800 ns/op +8.3 ns/op / +1.3% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 140194 ns/op -3727 ns/op / -2.6% (better)
Windows MSVC ARM64 CreateStop/Go 202.700 ns/op +1.5 ns/op / +0.7% (worse)
Windows MSVC ARM64 CreateStop/LLGo 285.100 ns/op +6.7 ns/op / +2.4% (worse)
Windows MSVC ARM64 RearmStopped/Go 71.170 ns/op +0.57 ns/op / +0.8% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 162.500 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC ARM64 ResetActive/Go 31.060 ns/op -0.23 ns/op / -0.7% (better)
Windows MSVC ARM64 ResetActive/LLGo 92.620 ns/op +4.9 ns/op / +5.6% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.200 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 93.660 ns/op -0.01 ns/op / -0.01068% (better)

Compared with 717fbe4429cb measured in the same runner job.

@cpunion
cpunion merged commit 2681caa into xgo-dev:main Nov 11, 2026
122 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.

runtime: function-value metadata lookup fails with LLGO_PCLNPOST=0 on Linux/amd64

2 participants