Skip to content

cl/blocks: preserve nested loop defer ordering - #3060

Open
cpunion wants to merge 4 commits into
xgo-dev:mainfrom
cpunion:fix/nested-loop-defer-order
Open

cpunion wants to merge 4 commits into
xgo-dev:mainfrom
cpunion:fix/nested-loop-defer-order

Conversation

@cpunion

@cpunion cpunion commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

A nested loop can leave an inner body unprocessed while scheduling the outer exit. Defers after that exit then enter the compiler cleanup order ahead of the body defers. The saved method receiver in #3059 becomes invalid when cleanup runs.

Schedule the complete strongly connected component before its successors. Add graph ordering coverage and executable test/go regressions for saved method receivers, LIFO order, return, panic, break and continue. The receiver regression fails with the previous compiler and passes with the fix.

Update defercomplex for the earlier loop-constant discovery. Its FileCheck identifies loop records through their dispatch header, then checks freeing the node and invoking its saved closure.

All 12 CI workflows passed at 79ab9e2659c728751af36feb5230cc380945c92b, with 112 successful checks and 3 conditional skips. Go, native llgo and WASI runtime regressions passed, including the saved receiver, LIFO, panic, break and continue paths. Compiler graph and defercomplex execution/IR checks passed for darwin/arm64 and linux/amd64.

Fixes #3059.

@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: nested-loop defer ordering

Reviewed the full diff for PR #3060 across correctness, performance, security, and documentation accuracy. The fix is well-targeted and correct.

What the change does: when findLoop closes an outer cycle (the pos==0 branch), it now appends any not-yet-finalized block in the same SCC (s.scc == self.scc) before scheduling the cycle's successors. This keeps a nested inner loop body ahead of the enclosing loop's exit, so loop-body defers stay in one contiguous DeferInLoop run and the saved method receiver from #3059 is no longer corrupted by cleanup ordering.

Verified:

  • Traced markInLoop (Tarjan) + findLoop against the new "nested body before outer exit" graph; the produced order [0,1,2,4,6,5,3] matches the test and keeps the inner body before the outer exit (block 3).
  • scc is assigned for every block in markInLoop (states[w].scc = v), so the zero-value (scc==0) is never a false "unassigned" match — block 0 legitimately owns SCC root 0, and root indices are unique per SCC.
  • In the pos==0 branch, self necessarily shares an SCC with path[0] (there is an edge self → path[0] and path[0] reaches self), so self.scc correctly identifies the closing cycle.
  • The executable defer-order expectations are all correct against real Go LIFO semantics, including the subtle break case {5,3,1} (break exits only the inner loop, so the outer loop still processes the second row).
  • Performance: the two added O(n) scans run at most once per findLoop (the branch returns immediately), so they don't change the asymptotic cost. No regression.
  • Security: no issues — all indices derive from the compiler's own SSA block structure; fdel is monotonic so no block is appended twice.

Minor (non-blocking) notes — see inline comments:

  • Dead field/params in the reproducer (nestedDeferValue.Type, and output's name/status/args). Fine if intentional (padded struct-by-value + preserved shape), but worth a one-line comment or removal.
  • A short comment on the self.scc/path[0] SCC invariant would help the next reader.
  • Consider a graph test where two or more inner-body blocks remain at cycle close, to pin the multi-member append behavior (current case appends only one block).

No blocking issues found.

Comment thread cl/blocks/block.go Resolved
Comment thread test/go/defer_semantics_test.go Resolved
Comment thread test/go/defer_semantics_test.go Resolved
@codecov

codecov Bot commented Nov 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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

Looks good. Completing the SCC in the pos == 0 branch keeps the inner loop body ahead of the outer exit, so loop defers stay in one DeferInLoop run and the saved method receiver from #3059 stays valid. The new graph order [0,1,2,4,6,5,3] matches a walk of Infos, and the executable LIFO cases (including inner break → {5,3,1}) are right.

One non-blocking coverage nit below.

Comment thread cl/blocks/block_test.go Resolved
@github-actions

Copy link
Copy Markdown

LLGo baseline benchmarks

a57e79924bfa | workflow run | long-term charts

String equality benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkStringEquality/bytes/equal/1024/Go 25.760 ns/op -0.06 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/equal/1024/LLGo 62.510 ns/op -0.17 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/equal/128/Go 8.473 ns/op -0.095 ns/op / -1.1% (better)
Linux BenchmarkStringEquality/bytes/equal/128/LLGo 11.840 ns/op -0.12 ns/op / -1.0% (better)
Linux BenchmarkStringEquality/bytes/equal/8/Go 5.825 ns/op -0.02 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/equal/8/LLGo 4.670 ns/op +0.786 ns/op / +20.2% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/Go 6.619 ns/op +0.003 ns/op / +0.04534% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/LLGo 3.497 ns/op +1.166 ns/op / +50.0% (worse)
Linux BenchmarkStringEquality/bytes/first/128/Go 6.620 ns/op -0.015 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/first/128/LLGo 3.494 ns/op +1.103 ns/op / +46.1% (worse)
Linux BenchmarkStringEquality/bytes/first/8/Go 5.836 ns/op -0.017 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/first/8/LLGo 3.498 ns/op +1.121 ns/op / +47.2% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/Go 25.120 ns/op -0.04 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/last/1024/LLGo 62.500 ns/op -0.01 ns/op / -0.016% (better)
Linux BenchmarkStringEquality/bytes/last/128/Go 8.156 ns/op -0.024 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/last/128/LLGo 11.700 ns/op -0.15 ns/op / -1.3% (better)
Linux BenchmarkStringEquality/bytes/last/8/Go 5.957 ns/op +0.115 ns/op / +2.0% (worse)
Linux BenchmarkStringEquality/bytes/last/8/LLGo 4.663 ns/op +1.554 ns/op / +50.0% (worse)
Linux BenchmarkStringEquality/strings/equal/1024/Go 23.210 ns/op -0.01 ns/op / -0.04307% (better)
Linux BenchmarkStringEquality/strings/equal/1024/LLGo 54.520 ns/op -0.05 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/equal/128/Go 8.204 ns/op -0.001 ns/op / -0.01219% (better)
Linux BenchmarkStringEquality/strings/equal/128/LLGo 11.150 ns/op -0.02 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/strings/equal/8/Go 5.841 ns/op -0.031 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/strings/equal/8/LLGo 3.890 ns/op -1.173 ns/op / -23.2% (better)
Linux BenchmarkStringEquality/strings/first/1024/Go 6.595 ns/op -0.002 ns/op / -0.03032% (better)
Linux BenchmarkStringEquality/strings/first/1024/LLGo 2.725 ns/op +0.006 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/first/128/Go 6.608 ns/op -0.03 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/strings/first/128/LLGo 2.717 ns/op -0.057 ns/op / -2.1% (better)
Linux BenchmarkStringEquality/strings/first/8/Go 5.832 ns/op -0.01 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/strings/first/8/LLGo 2.729 ns/op +0.01 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/strings/last/1024/Go 22.780 ns/op +0.11 ns/op / +0.5% (worse)
Linux BenchmarkStringEquality/strings/last/1024/LLGo 54.540 ns/op -0.07 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/strings/last/128/Go 8.153 ns/op -0.038 ns/op / -0.5% (better)
Linux BenchmarkStringEquality/strings/last/128/LLGo 11.050 ns/op -0.03 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/strings/last/8/Go 5.830 ns/op -0.021 ns/op / -0.4% (better)
Linux BenchmarkStringEquality/strings/last/8/LLGo 3.497 ns/op -0.015 ns/op / -0.4% (better)
macOS BenchmarkStringEquality/bytes/equal/1024/Go 33.770 ns/op +8.32 ns/op / +32.7% (worse)
macOS BenchmarkStringEquality/bytes/equal/1024/LLGo 23.280 ns/op -2.2 ns/op / -8.6% (better)
macOS BenchmarkStringEquality/bytes/equal/128/Go 5.891 ns/op +0.213 ns/op / +3.8% (worse)
macOS BenchmarkStringEquality/bytes/equal/128/LLGo 4.730 ns/op +0.222 ns/op / +4.9% (worse)
macOS BenchmarkStringEquality/bytes/equal/8/Go 3.612 ns/op +0.254 ns/op / +7.6% (worse)
macOS BenchmarkStringEquality/bytes/equal/8/LLGo 2.876 ns/op +0.309 ns/op / +12.0% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/Go 3.982 ns/op +0.205 ns/op / +5.4% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/LLGo 1.695 ns/op -0.012 ns/op / -0.7% (better)
macOS BenchmarkStringEquality/bytes/first/128/Go 4.026 ns/op -0.039 ns/op / -1.0% (better)
macOS BenchmarkStringEquality/bytes/first/128/LLGo 1.800 ns/op +0.002 ns/op / +0.1% (worse)
macOS BenchmarkStringEquality/bytes/first/8/Go 3.502 ns/op +0.274 ns/op / +8.5% (worse)
macOS BenchmarkStringEquality/bytes/first/8/LLGo 1.750 ns/op +0.123 ns/op / +7.6% (worse)
macOS BenchmarkStringEquality/bytes/last/1024/Go 30.570 ns/op +5.53 ns/op / +22.1% (worse)
macOS BenchmarkStringEquality/bytes/last/1024/LLGo 22.390 ns/op -0.75 ns/op / -3.2% (better)
macOS BenchmarkStringEquality/bytes/last/128/Go 5.324 ns/op +0.035 ns/op / +0.7% (worse)
macOS BenchmarkStringEquality/bytes/last/128/LLGo 4.006 ns/op -0.044 ns/op / -1.1% (better)
macOS BenchmarkStringEquality/bytes/last/8/Go 3.590 ns/op +0.267 ns/op / +8.0% (worse)
macOS BenchmarkStringEquality/bytes/last/8/LLGo 2.554 ns/op +0.333 ns/op / +15.0% (worse)
macOS BenchmarkStringEquality/strings/equal/1024/Go 26.060 ns/op +0.76 ns/op / +3.0% (worse)
macOS BenchmarkStringEquality/strings/equal/1024/LLGo 23.010 ns/op -1.92 ns/op / -7.7% (better)
macOS BenchmarkStringEquality/strings/equal/128/Go 6.192 ns/op +0.445 ns/op / +7.7% (worse)
macOS BenchmarkStringEquality/strings/equal/128/LLGo 4.475 ns/op -0.358 ns/op / -7.4% (better)
macOS BenchmarkStringEquality/strings/equal/8/Go 3.782 ns/op +0.451 ns/op / +13.5% (worse)
macOS BenchmarkStringEquality/strings/equal/8/LLGo 2.849 ns/op +0.32 ns/op / +12.7% (worse)
macOS BenchmarkStringEquality/strings/first/1024/Go 4.120 ns/op +0.257 ns/op / +6.7% (worse)
macOS BenchmarkStringEquality/strings/first/1024/LLGo 1.702 ns/op -0.002 ns/op / -0.1% (better)
macOS BenchmarkStringEquality/strings/first/128/Go 4.793 ns/op +0.788 ns/op / +19.7% (worse)
macOS BenchmarkStringEquality/strings/first/128/LLGo 1.851 ns/op +0.008 ns/op / +0.4% (worse)
macOS BenchmarkStringEquality/strings/first/8/Go 3.496 ns/op +0.244 ns/op / +7.5% (worse)
macOS BenchmarkStringEquality/strings/first/8/LLGo 1.787 ns/op +0.215 ns/op / +13.7% (worse)
macOS BenchmarkStringEquality/strings/last/1024/Go 29.800 ns/op +4.93 ns/op / +19.8% (worse)
macOS BenchmarkStringEquality/strings/last/1024/LLGo 22.680 ns/op -1.11 ns/op / -4.7% (better)
macOS BenchmarkStringEquality/strings/last/128/Go 5.426 ns/op +0.04 ns/op / +0.7% (worse)
macOS BenchmarkStringEquality/strings/last/128/LLGo 3.678 ns/op -0.347 ns/op / -8.6% (better)
macOS BenchmarkStringEquality/strings/last/8/Go 5.005 ns/op +1.743 ns/op / +53.4% (worse)
macOS BenchmarkStringEquality/strings/last/8/LLGo 2.528 ns/op +0.308 ns/op / +13.9% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/Go 20.370 ns/op +0.04 ns/op / +0.2% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/LLGo 35.850 ns/op -2.85 ns/op / -7.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/Go 6.829 ns/op -0.019 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/LLGo 7.987 ns/op +0.037 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/Go 5.169 ns/op +0.181 ns/op / +3.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/LLGo 4.846 ns/op +0.343 ns/op / +7.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/Go 5.190 ns/op +0.122 ns/op / +2.4% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/LLGo 2.909 ns/op +0.263 ns/op / +9.9% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/128/Go 5.038 ns/op -0.149 ns/op / -2.9% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/LLGo 2.910 ns/op +0.649 ns/op / +28.7% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/8/Go 5.152 ns/op +0.277 ns/op / +5.7% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/8/LLGo 2.912 ns/op +0.647 ns/op / +28.6% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/Go 19.930 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/LLGo 35.920 ns/op -0.73 ns/op / -2.0% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/128/Go 6.197 ns/op -0.955 ns/op / -13.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/128/LLGo 7.636 ns/op -0.021 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/8/Go 5.085 ns/op +0.381 ns/op / +8.1% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/8/LLGo 3.586 ns/op +0.506 ns/op / +16.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/Go 16.040 ns/op -0.31 ns/op / -1.9% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/LLGo 33.160 ns/op +0.8 ns/op / +2.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/128/Go 6.920 ns/op -0.151 ns/op / -2.1% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/128/LLGo 6.817 ns/op -0.21 ns/op / -3.0% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/8/Go 5.197 ns/op +0.105 ns/op / +2.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/LLGo 3.876 ns/op +0.293 ns/op / +8.2% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/Go 5.565 ns/op +1.003 ns/op / +22.0% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/LLGo 2.572 ns/op +0.245 ns/op / +10.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/Go 5.021 ns/op -0.026 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/strings/first/128/LLGo 2.584 ns/op +0.315 ns/op / +13.9% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/Go 5.278 ns/op +0.409 ns/op / +8.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/8/LLGo 2.585 ns/op +0.311 ns/op / +13.7% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/1024/Go 15.300 ns/op -0.58 ns/op / -3.7% (better)
Windows MinGW BenchmarkStringEquality/strings/last/1024/LLGo 32.500 ns/op -0.99 ns/op / -3.0% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/Go 6.016 ns/op -0.495 ns/op / -7.6% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/LLGo 6.554 ns/op -0.073 ns/op / -1.1% (better)
Windows MinGW BenchmarkStringEquality/strings/last/8/Go 4.995 ns/op -0.287 ns/op / -5.4% (better)
Windows MinGW BenchmarkStringEquality/strings/last/8/LLGo 3.234 ns/op +0.229 ns/op / +7.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/Go 27.870 ns/op +1.02 ns/op / +3.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 28.510 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/Go 8.226 ns/op -0.077 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/LLGo 6.656 ns/op +0.01 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/Go 6.014 ns/op -0.018 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/LLGo 3.760 ns/op +0.004 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/Go 6.683 ns/op -0.754 ns/op / -10.1% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.168 ns/op -0.007 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/Go 6.703 ns/op +0.051 ns/op / +0.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/LLGo 3.173 ns/op +0.004 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/Go 6.288 ns/op +0.63 ns/op / +11.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.173 ns/op +0.003 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/Go 27.570 ns/op +0.93 ns/op / +3.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/LLGo 28.250 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/Go 7.993 ns/op +0.02 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/LLGo 5.887 ns/op -0.021 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/Go 6.599 ns/op +0.601 ns/op / +10.0% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/LLGo 3.699 ns/op -0.016 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/Go 25.840 ns/op +2.05 ns/op / +8.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/LLGo 29.010 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/Go 7.761 ns/op -0.035 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/LLGo 6.373 ns/op +0.056 ns/op / +0.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/Go 5.893 ns/op -0.001 ns/op / -0.01697% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/LLGo 3.678 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/Go 6.362 ns/op +0.061 ns/op / +1.0% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.164 ns/op +0.004 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/Go 6.344 ns/op -0.017 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/LLGo 3.160 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/Go 5.956 ns/op +0.206 ns/op / +3.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/LLGo 3.162 ns/op +0.004 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/Go 25.340 ns/op +1.96 ns/op / +8.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/LLGo 28.600 ns/op +0.33 ns/op / +1.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/Go 7.490 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/LLGo 5.785 ns/op +0.018 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/Go 5.840 ns/op -0.031 ns/op / -0.5% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/LLGo 3.674 ns/op +0.013 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.410 ns/op +0.06 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 38.180 ns/op -0.26 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.756 ns/op +0.112 ns/op / +1.7% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.127 ns/op +0.015 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.735 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.556 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.702 ns/op +0.002 ns/op / +0.04255% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.563 ns/op +0.018 ns/op / +1.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.823 ns/op -0.001 ns/op / -0.02073% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.573 ns/op +0.008 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.386 ns/op -0.163 ns/op / -4.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.563 ns/op +0.015 ns/op / +1.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/Go 31.160 ns/op -0.19 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.220 ns/op +0.14 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.673 ns/op -0.077 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.799 ns/op +0.016 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.546 ns/op -0.01 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.118 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.420 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.960 ns/op +0.23 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.051 ns/op -0.014 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.874 ns/op +0.029 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.890 ns/op -0.044 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.343 ns/op -0.017 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.506 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.702 ns/op +0.085 ns/op / +5.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/Go 4.546 ns/op -0.071 ns/op / -1.5% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.580 ns/op -0.018 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/Go 3.876 ns/op -0.027 ns/op / -0.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.591 ns/op -0.034 ns/op / -2.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.170 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.360 ns/op -0.1 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/Go 5.905 ns/op -0.078 ns/op / -1.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.439 ns/op +0.019 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/Go 3.876 ns/op -0.053 ns/op / -1.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.127 ns/op -0.042 ns/op / -1.9% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/Go 16.940 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/LLGo 34.300 ns/op +0.67 ns/op / +2.0% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/Go 6.918 ns/op +1.23 ns/op / +21.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/LLGo 8.448 ns/op +0.225 ns/op / +2.7% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/Go 5.725 ns/op -0.016 ns/op / -0.3% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/LLGo 3.807 ns/op -0.255 ns/op / -6.3% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/Go 6.012 ns/op +0.459 ns/op / +8.3% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/LLGo 2.709 ns/op -0.81 ns/op / -23.0% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/128/Go 5.735 ns/op +0.845 ns/op / +17.3% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/128/LLGo 2.707 ns/op -0.84 ns/op / -23.7% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/Go 5.727 ns/op +1.079 ns/op / +23.2% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/8/LLGo 2.707 ns/op -1.114 ns/op / -29.2% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/Go 16.460 ns/op +0.26 ns/op / +1.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/LLGo 34.650 ns/op -0.07 ns/op / -0.2% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/128/Go 6.233 ns/op +0.232 ns/op / +3.9% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/LLGo 8.690 ns/op +0.023 ns/op / +0.3% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/Go 5.635 ns/op +0.75 ns/op / +15.4% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/LLGo 3.254 ns/op -0.81 ns/op / -19.9% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/Go 15.780 ns/op +0.28 ns/op / +1.8% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/LLGo 30.130 ns/op -0.13 ns/op / -0.4% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/Go 6.021 ns/op -0.225 ns/op / -3.6% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/LLGo 6.266 ns/op +0.126 ns/op / +2.1% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/Go 5.248 ns/op +0.304 ns/op / +6.1% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/LLGo 2.708 ns/op -0.085 ns/op / -3.0% (better)
Windows MSVC BenchmarkStringEquality/strings/first/1024/Go 5.689 ns/op +0.485 ns/op / +9.3% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/1024/LLGo 1.895 ns/op +0.27 ns/op / +16.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/Go 4.936 ns/op -0.85 ns/op / -14.7% (better)
Windows MSVC BenchmarkStringEquality/strings/first/128/LLGo 1.895 ns/op +0.27 ns/op / +16.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/Go 4.917 ns/op -0.064 ns/op / -1.3% (better)
Windows MSVC BenchmarkStringEquality/strings/first/8/LLGo 1.898 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkStringEquality/strings/last/1024/Go 14.540 ns/op -0.11 ns/op / -0.8% (better)
Windows MSVC BenchmarkStringEquality/strings/last/1024/LLGo 30.150 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/Go 5.545 ns/op -0.736 ns/op / -11.7% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/LLGo 6.085 ns/op +0.096 ns/op / +1.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/8/Go 4.873 ns/op -0.827 ns/op / -14.5% (better)
Windows MSVC BenchmarkStringEquality/strings/last/8/LLGo 2.168 ns/op -0.032 ns/op / -1.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/Go 19.850 ns/op +0.55 ns/op / +2.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 53.610 ns/op +0.72 ns/op / +1.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/Go 5.759 ns/op +0.255 ns/op / +4.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/LLGo 9.486 ns/op -0.011 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/Go 4.183 ns/op -0.13 ns/op / -3.0% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/LLGo 2.740 ns/op +0.027 ns/op / +1.0% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/Go 4.530 ns/op -0.159 ns/op / -3.4% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/LLGo 2.358 ns/op +0.008 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/Go 4.524 ns/op +0.224 ns/op / +5.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/LLGo 2.213 ns/op +0.031 ns/op / +1.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/Go 4.072 ns/op +0.144 ns/op / +3.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/LLGo 2.315 ns/op +0.116 ns/op / +5.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/Go 19.740 ns/op +1.38 ns/op / +7.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/LLGo 54.360 ns/op -0.12 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/Go 5.543 ns/op +0.212 ns/op / +4.0% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/LLGo 9.275 ns/op -0.138 ns/op / -1.5% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/Go 4.205 ns/op +0.284 ns/op / +7.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/LLGo 2.647 ns/op +0.005 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/Go 18.930 ns/op +0.49 ns/op / +2.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/LLGo 54.430 ns/op +3.79 ns/op / +7.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/Go 5.335 ns/op +0.199 ns/op / +3.9% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/LLGo 9.086 ns/op -0.079 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/Go 3.991 ns/op -0.055 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/LLGo 2.685 ns/op +0.033 ns/op / +1.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/Go 4.286 ns/op -0.231 ns/op / -5.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/LLGo 2.231 ns/op -0.02 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/Go 4.304 ns/op +0.134 ns/op / +3.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/LLGo 2.321 ns/op +0.102 ns/op / +4.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/Go 3.947 ns/op +0.281 ns/op / +7.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/LLGo 2.416 ns/op +0.133 ns/op / +5.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/Go 18.820 ns/op +0.68 ns/op / +3.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/LLGo 50.180 ns/op +0.62 ns/op / +1.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/Go 5.300 ns/op +0.259 ns/op / +5.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/LLGo 8.884 ns/op -0.137 ns/op / -1.5% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/Go 4.056 ns/op +0.158 ns/op / +4.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/LLGo 2.423 ns/op +0.075 ns/op / +3.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.690 ns/op +0.49 ns/op / +1.6% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 38.910 ns/op -0.07 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.718 ns/op +0.018 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.052 ns/op -0.014 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.690 ns/op -0.026 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.660 ns/op +0.001 ns/op / +0.03761% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.751 ns/op +0.002 ns/op / +0.04211% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.786 ns/op +0.01 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.754 ns/op +0.016 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.794 ns/op -0.076 ns/op / -4.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.444 ns/op -0.031 ns/op / -0.9% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.775 ns/op -0.021 ns/op / -1.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/Go 31.760 ns/op +0.74 ns/op / +2.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 38.800 ns/op +0.17 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.669 ns/op -0.018 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.735 ns/op +0.014 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.346 ns/op -0.2 ns/op / -5.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.465 ns/op -0.01 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.380 ns/op -0.1 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.810 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.059 ns/op +0.003 ns/op / +0.04954% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.898 ns/op -0.091 ns/op / -1.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.918 ns/op -0.004 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.603 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.500 ns/op -0.077 ns/op / -1.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.737 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/Go 4.547 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.734 ns/op -0.04 ns/op / -2.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/Go 3.868 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.706 ns/op -0.097 ns/op / -5.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.080 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.520 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/Go 5.912 ns/op +0.001 ns/op / +0.01692% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.480 ns/op +0.009 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/Go 3.885 ns/op -0.022 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.258 ns/op -0.007 ns/op / -0.3% (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.088 s -110.5 ms / -9.2% (better) 1.333 ms -279.2 us / -17.3% (better)
Linux cprintf-lto 8240 B 0 B / +0.0% 368 B 0 B / +0.0% 1.078 s -52.66 ms / -4.7% (better) 1.243 ms -44.74 us / -3.5% (better)
Linux fmtprintf 1944552 B +80 B / +0.004114% (worse) 269914 B 0 B / +0.0% 6.739 s -480.2 ms / -6.7% (better) 3.206 ms +74.59 us / +2.4% (worse)
Linux fmtprintf-lto 1021904 B -120 B / -0.01174% (better) 210250 B 0 B / +0.0% 15.509 s -1.099 s / -6.6% (better) 3.093 ms +149.9 us / +5.1% (worse)
Linux println 261264 B -112 B / -0.04285% (better) 19137 B 0 B / +0.0% 1.113 s -43.75 ms / -3.8% (better) 1.606 ms -37.72 us / -2.3% (better)
Linux println-lto 102432 B -56 B / -0.1% (better) 15642 B 0 B / +0.0% 1.857 s -80.16 ms / -4.1% (better) 1.671 ms -44.79 us / -2.6% (better)
macOS cprintf 50944 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.218 s -215 ms / -15.0% (better) 4.684 ms +1.72 ms / +58.0% (worse)
macOS cprintf-lto 50608 B 0 B / +0.0% 161 B 0 B / +0.0% 965.729 ms -412.2 ms / -29.9% (better) 3.081 ms -4.586 ms / -59.8% (better)
macOS fmtprintf 1233696 B 0 B / +0.0% 675953 B 0 B / +0.0% 4.295 s -281.8 ms / -6.2% (better) 4.199 ms +457 us / +12.2% (worse)
macOS fmtprintf-lto 871584 B -16 B / -0.001836% (better) 521157 B 0 B / +0.0% 6.595 s -50.93 ms / -0.8% (better) 3.989 ms +298.2 us / +8.1% (worse)
macOS println 100592 B 0 B / +0.0% 26339 B 0 B / +0.0% 965.028 ms -86.32 ms / -8.2% (better) 4.019 ms +292.6 us / +7.9% (worse)
macOS println-lto 85632 B 0 B / +0.0% 22487 B 0 B / +0.0% 1.201 s -153.6 ms / -11.3% (better) 3.793 ms +136.2 us / +3.7% (worse)
Windows MinGW cprintf 749568 B 0 B / +0.0% 4230 B 0 B / +0.0% 1.973 s -52.84 ms / -2.6% (better) 4.195 ms -133.1 us / -3.1% (better)
Windows MinGW cprintf-lto 60928 B 0 B / +0.0% 4182 B 0 B / +0.0% 2.025 s -34.65 ms / -1.7% (better) 4.118 ms -182 us / -4.2% (better)
Windows MinGW fmtprintf 5158400 B -1024 B / -0.01985% (better) 361910 B 0 B / +0.0% 6.743 s +149.9 ms / +2.3% (worse) 10.789 ms -459.6 us / -4.1% (better)
Windows MinGW fmtprintf-lto 2784256 B -1024 B / -0.03676% (better) 306774 B 0 B / +0.0% 11.057 s -509.4 ms / -4.4% (better) 11.648 ms +357.1 us / +3.2% (worse)
Windows MinGW println 811520 B 0 B / +0.0% 27382 B 0 B / +0.0% 1.970 s -21.85 ms / -1.1% (better) 7.321 ms -13.3 us / -0.2% (better)
Windows MinGW println-lto 232448 B -512 B / -0.2% (better) 22582 B 0 B / +0.0% 2.301 s -2.365 ms / -0.1% (better) 7.289 ms -594.9 us / -7.5% (better)
Windows MinGW 386 cprintf 754688 B 0 B / +0.0% 22694 B 0 B / +0.0% 1.606 s +114.1 ms / +7.6% (worse) 7.349 ms +595.7 us / +8.8% (worse)
Windows MinGW 386 cprintf-lto 282624 B 0 B / +0.0% 19476 B 0 B / +0.0% 1.866 s +107.9 ms / +6.1% (worse) 8.034 ms +582 us / +7.8% (worse)
Windows MinGW 386 fmtprintf 4509184 B -1024 B / -0.0227% (better) 284832 B 0 B / +0.0% 5.464 s +224.3 ms / +4.3% (worse) 9.091 ms +408.9 us / +4.7% (worse)
Windows MinGW 386 fmtprintf-lto 2902528 B -512 B / -0.01764% (better) 256706 B 0 B / +0.0% 9.043 s +454.5 ms / +5.3% (worse) 9.321 ms +502.9 us / +5.7% (worse)
Windows MinGW 386 println 753152 B 0 B / +0.0% 22624 B 0 B / +0.0% 1.621 s +119.7 ms / +8.0% (worse) 7.075 ms +377.8 us / +5.6% (worse)
Windows MinGW 386 println-lto 282112 B 0 B / +0.0% 19410 B 0 B / +0.0% 1.873 s +114.9 ms / +6.5% (worse) 7.253 ms +703.7 us / +10.7% (worse)
Windows MinGW ARM64 cprintf 757248 B +512 B / +0.1% (worse) 4028 B 0 B / +0.0% 2.245 s -93.15 ms / -4.0% (better) 6.768 ms -750.7 us / -10.0% (better)
Windows MinGW ARM64 cprintf-lto 60416 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.319 s -53.9 ms / -2.3% (better) 6.567 ms -415.2 us / -5.9% (better)
Windows MinGW ARM64 fmtprintf 5099008 B -1536 B / -0.03011% (better) 302056 B 0 B / +0.0% 6.561 s -106.4 ms / -1.6% (better) 14.955 ms -342.3 us / -2.2% (better)
Windows MinGW ARM64 fmtprintf-lto 2842112 B 0 B / +0.0% 257844 B 0 B / +0.0% 10.125 s -135.2 ms / -1.3% (better) 13.886 ms -856.4 us / -5.8% (better)
Windows MinGW ARM64 println 817664 B +512 B / +0.1% (worse) 25568 B 0 B / +0.0% 2.237 s -45.09 ms / -2.0% (better) 11.354 ms -104.3 us / -0.9% (better)
Windows MinGW ARM64 println-lto 236032 B -512 B / -0.2% (better) 21816 B 0 B / +0.0% 2.539 s -25.51 ms / -1.0% (better) 11.871 ms -1.192 ms / -9.1% (better)
Windows MSVC cprintf 993792 B 0 B / +0.0% 66003 B 0 B / +0.0% 1.433 s +11.17 ms / +0.8% (worse) 2.742 ms +2.9 us / +0.1% (worse)
Windows MSVC cprintf-lto 308736 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.624 s +183.6 ms / +12.8% (worse) 2.684 ms -9.9 us / -0.4% (better)
Windows MSVC fmtprintf 5458432 B -1536 B / -0.02813% (better) 457990 B 0 B / +0.0% 5.044 s +95.61 ms / +1.9% (worse) 8.264 ms -407.9 us / -4.7% (better)
Windows MSVC fmtprintf-lto 3107328 B -1024 B / -0.03294% (better) 405302 B 0 B / +0.0% 7.999 s +23.89 ms / +0.3% (worse) 8.299 ms -83.5 us / -1.0% (better)
Windows MSVC println 1125888 B 0 B / +0.0% 123526 B 0 B / +0.0% 1.421 s -7.863 ms / -0.6% (better) 5.529 ms -2.6 us / -0.047% (better)
Windows MSVC println-lto 553472 B -512 B / -0.1% (better) 119414 B 0 B / +0.0% 1.646 s +5.343 ms / +0.3% (worse) 5.495 ms +47.8 us / +0.9% (worse)
Windows MSVC 386 cprintf 664064 B 0 B / +0.0% 21330 B 0 B / +0.0% 1.331 s -165 ms / -11.0% (better) 6.771 ms -1.806 ms / -21.1% (better)
Windows MSVC 386 cprintf-lto 221696 B 0 B / +0.0% 18825 B 0 B / +0.0% 1.473 s -135 ms / -8.4% (better) 6.126 ms -507.1 us / -7.6% (better)
Windows MSVC 386 fmtprintf 4237312 B -1024 B / -0.02416% (better) 268294 B 0 B / +0.0% 4.473 s -553 ms / -11.0% (better) 9.685 ms -2.71 ms / -21.9% (better)
Windows MSVC 386 fmtprintf-lto 2716160 B -1024 B / -0.03769% (better) 236209 B 0 B / +0.0% 7.679 s -124.1 ms / -1.6% (better) 11.084 ms +874 us / +8.6% (worse)
Windows MSVC 386 println 662016 B 0 B / +0.0% 21276 B 0 B / +0.0% 1.297 s -77.8 ms / -5.7% (better) 6.291 ms -743.3 us / -10.6% (better)
Windows MSVC 386 println-lto 220160 B 0 B / +0.0% 18755 B 0 B / +0.0% 1.456 s -103.7 ms / -6.7% (better) 6.595 ms -79.5 us / -1.2% (better)
Windows MSVC ARM64 cprintf 759808 B +512 B / +0.1% (worse) 4240 B 0 B / +0.0% 1.944 s -26.28 ms / -1.3% (better) 6.587 ms -332.1 us / -4.8% (better)
Windows MSVC ARM64 cprintf-lto 66048 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.954 s -31.03 ms / -1.6% (better) 6.715 ms -53 us / -0.8% (better)
Windows MSVC ARM64 fmtprintf 5095424 B -1536 B / -0.03014% (better) 302380 B 0 B / +0.0% 6.117 s -242.4 ms / -3.8% (better) 15.165 ms +27.5 us / +0.2% (worse)
Windows MSVC ARM64 fmtprintf-lto 2849792 B -1024 B / -0.03592% (better) 258784 B 0 B / +0.0% 9.505 s -58.45 ms / -0.6% (better) 17.122 ms +689.2 us / +4.2% (worse)
Windows MSVC ARM64 println 820736 B +512 B / +0.1% (worse) 26052 B 0 B / +0.0% 1.934 s -44.19 ms / -2.2% (better) 11.816 ms -946.1 us / -7.4% (better)
Windows MSVC ARM64 println-lto 242176 B 0 B / +0.0% 22368 B 0 B / +0.0% 2.152 s -69.56 ms / -3.1% (better) 11.673 ms -1.139 ms / -8.9% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.460 ns/op 0 ns/op / +0.0%
Linux BenchmarkMergeCompilerFlags 201.100 ns/op +9.8 ns/op / +5.1% (worse)
Linux BenchmarkMergeLinkerFlags 134.800 ns/op -1.8 ns/op / -1.3% (better)
Linux BenchmarkChannelBuffered 72.090 ns/op +0.08 ns/op / +0.1% (worse)
Linux BenchmarkChannelHandoff 13349 ns/op +316 ns/op / +2.4% (worse)
Linux BenchmarkDefer 17.030 ns/op -0.03 ns/op / -0.2% (better)
Linux BenchmarkDirectCall 1.164 ns/op -0.003 ns/op / -0.3% (better)
Linux BenchmarkGlobalRead 1.165 ns/op -0.003 ns/op / -0.3% (better)
Linux BenchmarkGlobalWrite 7.766 ns/op +0.002 ns/op / +0.02576% (worse)
Linux BenchmarkGoroutine 23107 ns/op -1705 ns/op / -6.9% (better)
Linux BenchmarkInterfaceCall 4.773 ns/op -0.005 ns/op / -0.1% (better)
Linux BenchmarkRuntimeGetG 2.344 ns/op -0.057 ns/op / -2.4% (better)
macOS BenchmarkLookupPCRandom 11.960 ns/op -0.95 ns/op / -7.4% (better)
macOS BenchmarkMergeCompilerFlags 96.350 ns/op -9.05 ns/op / -8.6% (better)
macOS BenchmarkMergeLinkerFlags 60.850 ns/op -4.97 ns/op / -7.6% (better)
macOS BenchmarkChannelBuffered 32.700 ns/op +5.75 ns/op / +21.3% (worse)
macOS BenchmarkChannelHandoff 6589 ns/op -240 ns/op / -3.5% (better)
macOS BenchmarkDefer 11.180 ns/op +1.304 ns/op / +13.2% (worse)
macOS BenchmarkDirectCall 1.060 ns/op +0.112 ns/op / +11.8% (worse)
macOS BenchmarkGlobalRead 1.088 ns/op +0.035 ns/op / +3.3% (worse)
macOS BenchmarkGlobalWrite 1.053 ns/op +0.03 ns/op / +2.9% (worse)
macOS BenchmarkGoroutine 79004 ns/op +18261 ns/op / +30.1% (worse)
macOS BenchmarkInterfaceCall 3.703 ns/op -0.075 ns/op / -2.0% (better)
macOS BenchmarkRuntimeGetG 2.040 ns/op +0.144 ns/op / +7.6% (worse)
Windows MinGW BenchmarkLookupPCRandom 11.310 ns/op -0.09 ns/op / -0.8% (better)
Windows MinGW BenchmarkMergeCompilerFlags 575.100 ns/op -10.4 ns/op / -1.8% (better)
Windows MinGW BenchmarkMergeLinkerFlags 498.200 ns/op -11.7 ns/op / -2.3% (better)
Windows MinGW BenchmarkChannelBuffered 57.730 ns/op +0.33 ns/op / +0.6% (worse)
Windows MinGW BenchmarkChannelHandoff 2670 ns/op +950 ns/op / +55.2% (worse)
Windows MinGW BenchmarkDefer 12.940 ns/op +0.44 ns/op / +3.5% (worse)
Windows MinGW BenchmarkDirectCall 1.064 ns/op +0.015 ns/op / +1.4% (worse)
Windows MinGW BenchmarkGlobalRead 1.187 ns/op -0.042 ns/op / -3.4% (better)
Windows MinGW BenchmarkGlobalWrite 8.415 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW BenchmarkGoroutine 83178 ns/op +994 ns/op / +1.2% (worse)
Windows MinGW BenchmarkInterfaceCall 5.301 ns/op +0.304 ns/op / +6.1% (worse)
Windows MinGW BenchmarkRuntimeGetG 1.376 ns/op +0.005 ns/op / +0.4% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 21.560 ns/op -0.01 ns/op / -0.04636% (better)
Windows MinGW 386 BenchmarkMergeCompilerFlags 589.600 ns/op +6.8 ns/op / +1.2% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 543.200 ns/op +4.2 ns/op / +0.8% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 36.700 ns/op -0.2 ns/op / -0.5% (better)
Windows MinGW 386 BenchmarkChannelHandoff 607.900 ns/op +48.5 ns/op / +8.7% (worse)
Windows MinGW 386 BenchmarkDefer 14.100 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkDirectCall 1.413 ns/op +0.055 ns/op / +4.1% (worse)
Windows MinGW 386 BenchmarkGlobalRead 1.629 ns/op +0.271 ns/op / +20.0% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 6.984 ns/op +0.003 ns/op / +0.04297% (worse)
Windows MinGW 386 BenchmarkGoroutine 69141 ns/op -2015 ns/op / -2.8% (better)
Windows MinGW 386 BenchmarkInterfaceCall 6.520 ns/op -0.013 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 1.630 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.020 ns/op -0.05 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 561.300 ns/op -19.1 ns/op / -3.3% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 531.100 ns/op -1.5 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 43.630 ns/op -0.16 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 1784 ns/op +148 ns/op / +9.0% (worse)
Windows MinGW ARM64 BenchmarkDefer 11.830 ns/op -0.3 ns/op / -2.5% (better)
Windows MinGW ARM64 BenchmarkDirectCall 0.589 ns/op -0.0001 ns/op / -0.01697% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.663 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkGlobalWrite 0.663 ns/op +0.0003 ns/op / +0.04525% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 60253 ns/op -163 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 3.853 ns/op +0.01 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.768 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC BenchmarkLookupPCRandom 9.684 ns/op -0.111 ns/op / -1.1% (better)
Windows MSVC BenchmarkMergeCompilerFlags 411.100 ns/op -9.3 ns/op / -2.2% (better)
Windows MSVC BenchmarkMergeLinkerFlags 348.600 ns/op +16.3 ns/op / +4.9% (worse)
Windows MSVC BenchmarkChannelBuffered 26.090 ns/op -0.07 ns/op / -0.3% (better)
Windows MSVC BenchmarkChannelHandoff 571 ns/op +49.4 ns/op / +9.5% (worse)
Windows MSVC BenchmarkDefer 12.860 ns/op +0.46 ns/op / +3.7% (worse)
Windows MSVC BenchmarkDirectCall 1.358 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkGlobalRead 1.534 ns/op +0.177 ns/op / +13.0% (worse)
Windows MSVC BenchmarkGlobalWrite 2.167 ns/op -0.001 ns/op / -0.04613% (better)
Windows MSVC BenchmarkGoroutine 55878 ns/op -1923 ns/op / -3.3% (better)
Windows MSVC BenchmarkInterfaceCall 5.714 ns/op -0.308 ns/op / -5.1% (better)
Windows MSVC BenchmarkRuntimeGetG 1.630 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 15.960 ns/op +0.19 ns/op / +1.2% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 396.500 ns/op +9 ns/op / +2.3% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 383.100 ns/op +11.9 ns/op / +3.2% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 48.230 ns/op +0.18 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 644.800 ns/op -74.5 ns/op / -10.4% (better)
Windows MSVC 386 BenchmarkDefer 8.388 ns/op -0.117 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkDirectCall 0.934 ns/op -0.0104 ns/op / -1.1% (better)
Windows MSVC 386 BenchmarkGlobalRead 0.938 ns/op -0.0064 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkGlobalWrite 8.552 ns/op +0.141 ns/op / +1.7% (worse)
Windows MSVC 386 BenchmarkGoroutine 57881 ns/op -2311 ns/op / -3.8% (better)
Windows MSVC 386 BenchmarkInterfaceCall 3.757 ns/op -0.028 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 0.985 ns/op +0.0056 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.170 ns/op -0.13 ns/op / -1.1% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 568.200 ns/op +7.2 ns/op / +1.3% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 531.900 ns/op -1.4 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 46.040 ns/op +0.12 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 1214 ns/op -42 ns/op / -3.3% (better)
Windows MSVC ARM64 BenchmarkDefer 11.890 ns/op +0.11 ns/op / +0.9% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.591 ns/op +0.0015 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.663 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkGlobalWrite 3.770 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkGoroutine 55573 ns/op -1404 ns/op / -2.5% (better)
Windows MSVC ARM64 BenchmarkInterfaceCall 3.852 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.768 ns/op -0.001 ns/op / -0.1% (better)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 913.900 ns/op +14.5 ns/op / +1.6% (worse)
Linux AfterFuncZeroDelivery/LLGo 38212 ns/op +567 ns/op / +1.5% (worse)
Linux CreateStop/Go 291 ns/op +1.6 ns/op / +0.6% (worse)
Linux CreateStop/LLGo 1415 ns/op -52 ns/op / -3.5% (better)
Linux RearmStopped/Go 115.900 ns/op -0.2 ns/op / -0.2% (better)
Linux RearmStopped/LLGo 826.400 ns/op -125.9 ns/op / -13.2% (better)
Linux ResetActive/Go 68.590 ns/op +0.05 ns/op / +0.1% (worse)
Linux ResetActive/LLGo 1062 ns/op +223.6 ns/op / +26.7% (worse)
Linux ResetHeap1024/Go 67.200 ns/op -0.03 ns/op / -0.04462% (better)
Linux ResetHeap1024/LLGo 132.800 ns/op +0.3 ns/op / +0.2% (worse)
macOS AfterFuncZeroDelivery/Go 450.200 ns/op +25.9 ns/op / +6.1% (worse)
macOS AfterFuncZeroDelivery/LLGo 64073 ns/op +32899 ns/op / +105.5% (worse)
macOS CreateStop/Go 130.300 ns/op -6.3 ns/op / -4.6% (better)
macOS CreateStop/LLGo 482.800 ns/op +156.4 ns/op / +47.9% (worse)
macOS RearmStopped/Go 59.500 ns/op +2.87 ns/op / +5.1% (worse)
macOS RearmStopped/LLGo 223.900 ns/op +20.9 ns/op / +10.3% (worse)
macOS ResetActive/Go 44.440 ns/op +1.02 ns/op / +2.3% (worse)
macOS ResetActive/LLGo 128 ns/op +9.4 ns/op / +7.9% (worse)
macOS ResetHeap1024/Go 43.430 ns/op +1.27 ns/op / +3.0% (worse)
macOS ResetHeap1024/LLGo 69.200 ns/op +2.97 ns/op / +4.5% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 697.600 ns/op +9.1 ns/op / +1.3% (worse)
Windows MinGW AfterFuncZeroDelivery/LLGo 145786 ns/op +1711 ns/op / +1.2% (worse)
Windows MinGW CreateStop/Go 186.400 ns/op +0.5 ns/op / +0.3% (worse)
Windows MinGW CreateStop/LLGo 707.800 ns/op -366.2 ns/op / -34.1% (better)
Windows MinGW RearmStopped/Go 69.280 ns/op -0.1 ns/op / -0.1% (better)
Windows MinGW RearmStopped/LLGo 234.300 ns/op +5.7 ns/op / +2.5% (worse)
Windows MinGW ResetActive/Go 30.920 ns/op +0.14 ns/op / +0.5% (worse)
Windows MinGW ResetActive/LLGo 335 ns/op -9.1 ns/op / -2.6% (better)
Windows MinGW ResetHeap1024/Go 31.200 ns/op +0.1 ns/op / +0.3% (worse)
Windows MinGW ResetHeap1024/LLGo 100.200 ns/op -1.8 ns/op / -1.8% (better)
Windows MinGW 386 AfterFuncZeroDelivery/Go 766.200 ns/op -0.3 ns/op / -0.03914% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 130165 ns/op +1756 ns/op / +1.4% (worse)
Windows MinGW 386 CreateStop/Go 167.900 ns/op +2.1 ns/op / +1.3% (worse)
Windows MinGW 386 CreateStop/LLGo 350.100 ns/op -8.5 ns/op / -2.4% (better)
Windows MinGW 386 RearmStopped/Go 56.600 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW 386 RearmStopped/LLGo 236.100 ns/op -27.3 ns/op / -10.4% (better)
Windows MinGW 386 ResetActive/Go 32.670 ns/op +0.11 ns/op / +0.3% (worse)
Windows MinGW 386 ResetActive/LLGo 870.800 ns/op +36.2 ns/op / +4.3% (worse)
Windows MinGW 386 ResetHeap1024/Go 32.800 ns/op 0 ns/op / +0.0%
Windows MinGW 386 ResetHeap1024/LLGo 123 ns/op +0.3 ns/op / +0.2% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 658 ns/op -0.4 ns/op / -0.1% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 142436 ns/op -1278 ns/op / -0.9% (better)
Windows MinGW ARM64 CreateStop/Go 197.700 ns/op -7.7 ns/op / -3.7% (better)
Windows MinGW ARM64 CreateStop/LLGo 349.400 ns/op +33.8 ns/op / +10.7% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.600 ns/op +0.01 ns/op / +0.01417% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 164.800 ns/op +2.2 ns/op / +1.4% (worse)
Windows MinGW ARM64 ResetActive/Go 31.040 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW ARM64 ResetActive/LLGo 97.550 ns/op +7.02 ns/op / +7.8% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 31.030 ns/op -0.15 ns/op / -0.5% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 93.110 ns/op -0.01 ns/op / -0.01074% (better)
Windows MSVC AfterFuncZeroDelivery/Go 380.600 ns/op +13 ns/op / +3.5% (worse)
Windows MSVC AfterFuncZeroDelivery/LLGo 106516 ns/op -77 ns/op / -0.1% (better)
Windows MSVC CreateStop/Go 89.980 ns/op -1.67 ns/op / -1.8% (better)
Windows MSVC CreateStop/LLGo 330 ns/op -2.5 ns/op / -0.8% (better)
Windows MSVC RearmStopped/Go 24.450 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC RearmStopped/LLGo 174 ns/op +7.8 ns/op / +4.7% (worse)
Windows MSVC ResetActive/Go 14.770 ns/op -0.03 ns/op / -0.2% (better)
Windows MSVC ResetActive/LLGo 127.400 ns/op -7.5 ns/op / -5.6% (better)
Windows MSVC ResetHeap1024/Go 14.770 ns/op -0.16 ns/op / -1.1% (better)
Windows MSVC ResetHeap1024/LLGo 85.860 ns/op -0.76 ns/op / -0.9% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 618.600 ns/op +14 ns/op / +2.3% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 108282 ns/op +597 ns/op / +0.6% (worse)
Windows MSVC 386 CreateStop/Go 165 ns/op +6.1 ns/op / +3.8% (worse)
Windows MSVC 386 CreateStop/LLGo 512 ns/op -25.5 ns/op / -4.7% (better)
Windows MSVC 386 RearmStopped/Go 61.640 ns/op +0.19 ns/op / +0.3% (worse)
Windows MSVC 386 RearmStopped/LLGo 310.700 ns/op -20.4 ns/op / -6.2% (better)
Windows MSVC 386 ResetActive/Go 29.650 ns/op +0.46 ns/op / +1.6% (worse)
Windows MSVC 386 ResetActive/LLGo 590.700 ns/op -22.5 ns/op / -3.7% (better)
Windows MSVC 386 ResetHeap1024/Go 29.390 ns/op +0.14 ns/op / +0.5% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 95.550 ns/op +3.05 ns/op / +3.3% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 663.900 ns/op -1.5 ns/op / -0.2% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 141238 ns/op -1424 ns/op / -1.0% (better)
Windows MSVC ARM64 CreateStop/Go 196.800 ns/op +0.8 ns/op / +0.4% (worse)
Windows MSVC ARM64 CreateStop/LLGo 350.900 ns/op -26.1 ns/op / -6.9% (better)
Windows MSVC ARM64 RearmStopped/Go 70.600 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 177.100 ns/op +2.3 ns/op / +1.3% (worse)
Windows MSVC ARM64 ResetActive/Go 31.030 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 ResetActive/LLGo 100.100 ns/op -13.8 ns/op / -12.1% (better)
Windows MSVC ARM64 ResetHeap1024/Go 31.110 ns/op -0.07 ns/op / -0.2% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 101.800 ns/op +8.49 ns/op / +9.1% (worse)

Compared with e2cca2cb8786 measured in the same runner job.

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.

ssa: mixed loop and ordinary defers can corrupt saved method receivers

3 participants