Skip to content

feat: add sameas and multiple-result attributes - #2597

Draft
zhouguangyuan0718 wants to merge 1 commit into
codex/aggregate-result-projections-20260915from
codex/source-result-relations-20260915
Draft

zhouguangyuan0718 wants to merge 1 commit into
codex/aggregate-result-projections-20260915from
codex/source-result-relations-20260915

Conversation

@zhouguangyuan0718

@zhouguangyuan0718 zhouguangyuan0718 commented Sep 14, 2026 •

Copy link
Copy Markdown
Collaborator

Adds sameas(name) and explicitly selected multiple-result guarantees from #2590. A caller can reuse the evaluated input value for a promised result while retaining the call, its side effects and its possible panic.

//llgo:result(out) nonnull sameas(p)
//llgo:result(count) range(0,64)
func Make(p *int, n uint32) (out *int, count uint32) {
    if p == nil { panic("nil pointer") }
    return p, n & 63
}

Result facts are materialized before ABI conversion. Pointer and integer facts apply to whole source results, including padded tuples and indirect returns. Relations use evaluated input snapshots; normal-edge assumptions for invoke leave unwinding intact. The backend keeps temporary plans in Go memory and consumes them once per module. Runtime checked-pointer and C-string-copy helpers declare their result identity in source.

Depends on #2596, the preceding large-aggregate projection fix. The review diff contains only result relations and multiple-result support.

Validation on macOS arm64, Go 1.27.0 / LLVM 22.1.8:

  • Complete cl, ssa, internal/funcattrs and internal/abi suites passed; C ABI unit tests passed excluding external toolchain build/corpus tests.
  • Source declarations through ABI conversion, O2 and assembly emission passed on amd64, arm64, 386 and wasm32, including byval, sret and packed results.
  • Complete runtime/internal/test passed with default GC and nogc, including nil panic, defer/recover, input snapshot mutation and 80 KB results.
  • Cross-package first build, cache hit, annotation-only removal, restoration and another cache hit passed. Optimized executable assembly retained calls and removed only guaranteed result comparisons; comparisons returned when annotations were removed.

Review order: #2572 (function properties) → #2595 (parameter and single-result values) → #2596 (large-aggregate projections) → #2597 (result relations and multiple results) → #2598 (pointer access and aliasing). Each PR targets its predecessor so its diff contains only that step.

@codecov

codecov Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.99522% with 23 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/funcattrs/values.go 90.19% 15 Missing ⚠️
internal/funcattrs/source.go 84.00% 4 Missing ⚠️
internal/build/build.go 50.00% 2 Missing ⚠️
ssa/value_attributes.go 90.47% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown

LLGo baseline benchmarks

38463561e6f3 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 19832 B 0 B / +0.0% 387 B 0 B / +0.0% 553.838 ms -8.896 ms / -1.6% (better) 1.277 ms -232.6 us / -15.4% (better)
Linux cprintf-lto 19584 B 0 B / +0.0% 368 B 0 B / +0.0% 538.380 ms -25.93 ms / -4.6% (better) 1.419 ms -6.304 us / -0.4% (better)
Linux fmtprintf 1624256 B +16 B / +0.0009851% (worse) 492621 B +3 B / +0.000609% (worse) 4.174 s -26.81 ms / -0.6% (better) 3.142 ms -475.4 us / -13.1% (better)
Linux fmtprintf-lto 1481160 B 0 B / +0.0% 434658 B 0 B / +0.0% 11.702 s -1.173 s / -9.1% (better) 3.076 ms -2.357 ms / -43.4% (better)
Linux println 62288 B 0 B / +0.0% 14436 B 0 B / +0.0% 554.618 ms -11.25 ms / -2.0% (better) 1.686 ms -63.08 us / -3.6% (better)
Linux println-lto 54232 B 0 B / +0.0% 12037 B 0 B / +0.0% 781.210 ms -11.91 ms / -1.5% (better) 1.582 ms -232.3 us / -12.8% (better)
macOS cprintf 84480 B 0 B / +0.0% 17101 B 0 B / +0.0% 774.141 ms -81.61 ms / -9.5% (better) 4.519 ms -850 us / -15.8% (better)
macOS cprintf-lto 84288 B 0 B / +0.0% 12865 B 0 B / +0.0% 804.037 ms -32.9 ms / -3.9% (better) 4.614 ms +849.5 us / +22.6% (worse)
macOS fmtprintf 1457808 B 0 B / +0.0% 864868 B 0 B / +0.0% 4.514 s -1.059 s / -19.0% (better) 8.918 ms +3.614 ms / +68.1% (worse)
macOS fmtprintf-lto 1175824 B 0 B / +0.0% 844100 B 0 B / +0.0% 13.079 s +1.031 s / +8.6% (worse) 11.859 ms +2.412 ms / +25.5% (worse)
macOS println 114992 B 0 B / +0.0% 34148 B 0 B / +0.0% 759.786 ms -7.827 ms / -1.0% (better) 4.903 ms +241.2 us / +5.2% (worse)
macOS println-lto 118720 B 0 B / +0.0% 31904 B 0 B / +0.0% 1.012 s +54.26 ms / +5.7% (worse) 4.058 ms -767.4 us / -15.9% (better)
Windows MinGW cprintf 19456 B 0 B / +0.0% 4550 B 0 B / +0.0% 931.300 ms +19.34 ms / +2.1% (worse) 2.861 ms +91 us / +3.3% (worse)
Windows MinGW cprintf-lto 17920 B 0 B / +0.0% 4486 B 0 B / +0.0% 958.564 ms +21.73 ms / +2.3% (worse) 2.855 ms +162.6 us / +6.0% (worse)
Windows MinGW fmtprintf 1895424 B 0 B / +0.0% 596598 B 0 B / +0.0% 3.414 s +97.02 ms / +2.9% (worse) 6.629 ms +47.2 us / +0.7% (worse)
Windows MinGW fmtprintf-lto 1939968 B 0 B / +0.0% 546390 B 0 B / +0.0% 8.470 s +115 ms / +1.4% (worse) 6.067 ms -898.6 us / -12.9% (better)
Windows MinGW println 71680 B 0 B / +0.0% 23638 B 0 B / +0.0% 916.512 ms -6.642 ms / -0.7% (better) 5.111 ms +75.5 us / +1.5% (worse)
Windows MinGW println-lto 66048 B 0 B / +0.0% 20486 B 0 B / +0.0% 1.077 s -8.133 ms / -0.7% (better) 5.441 ms -342.2 us / -5.9% (better)
Windows MinGW 386 cprintf 42496 B 0 B / +0.0% 5326 B 0 B / +0.0% 1.126 s -65.46 ms / -5.5% (better) 5.239 ms -315.9 us / -5.7% (better)
Windows MinGW 386 cprintf-lto 20992 B 0 B / +0.0% 5094 B 0 B / +0.0% 1.163 s -64.64 ms / -5.3% (better) 5.003 ms -415.3 us / -7.7% (better)
Windows MinGW 386 fmtprintf 1858560 B 0 B / +0.0% 468398 B 0 B / +0.0% 4.067 s -234.6 ms / -5.5% (better) 11.820 ms -132.7 us / -1.1% (better)
Windows MinGW 386 fmtprintf-lto 2175488 B 0 B / +0.0% 450350 B 0 B / +0.0% 9.679 s -182.2 ms / -1.8% (better) 10.932 ms -815.2 us / -6.9% (better)
Windows MinGW 386 println 92160 B 0 B / +0.0% 19654 B 0 B / +0.0% 1.122 s -62.69 ms / -5.3% (better) 8.905 ms -812.1 us / -8.4% (better)
Windows MinGW 386 println-lto 70144 B 0 B / +0.0% 17582 B 0 B / +0.0% 1.331 s -162.7 ms / -10.9% (better) 8.907 ms -889.2 us / -9.1% (better)
Windows MinGW ARM64 cprintf 18944 B 0 B / +0.0% 4408 B 0 B / +0.0% 1.358 s -22.34 ms / -1.6% (better) 6.168 ms +117.8 us / +1.9% (worse)
Windows MinGW ARM64 cprintf-lto 17920 B 0 B / +0.0% 4340 B 0 B / +0.0% 1.400 s -715.1 us / -0.1% (better) 6.234 ms +237.4 us / +4.0% (worse)
Windows MinGW ARM64 fmtprintf 1779712 B 0 B / +0.0% 505200 B +4 B / +0.0007918% (worse) 4.101 s +42.05 ms / +1.0% (worse) 12.535 ms +526 us / +4.4% (worse)
Windows MinGW ARM64 fmtprintf-lto 1863680 B 0 B / +0.0% 475616 B 0 B / +0.0% 9.755 s -68.21 ms / -0.7% (better) 12.170 ms -424.8 us / -3.4% (better)
Windows MinGW ARM64 println 68608 B 0 B / +0.0% 22096 B 0 B / +0.0% 1.417 s +28.7 ms / +2.1% (worse) 10.248 ms -28.9 us / -0.3% (better)
Windows MinGW ARM64 println-lto 64000 B 0 B / +0.0% 19392 B 0 B / +0.0% 1.547 s -29.57 ms / -1.9% (better) 14.635 ms +4.165 ms / +39.8% (worse)
Windows MSVC cprintf 120320 B 0 B / +0.0% 65782 B 0 B / +0.0% 1.153 s +130.4 ms / +12.8% (worse) 4.840 ms +761.9 us / +18.7% (worse)
Windows MSVC cprintf-lto 119808 B 0 B / +0.0% 65718 B 0 B / +0.0% 980.888 ms -233.2 ms / -19.2% (better) 3.361 ms -182.9 us / -5.2% (better)
Windows MSVC fmtprintf 1624576 B 0 B / +0.0% 692102 B 0 B / +0.0% 3.921 s +17.81 ms / +0.5% (worse) 11.002 ms +1.407 ms / +14.7% (worse)
Windows MSVC fmtprintf-lto 1625600 B 0 B / +0.0% 648598 B 0 B / +0.0% 9.540 s +413 ms / +4.5% (worse) 9.796 ms +636.9 us / +7.0% (worse)
Windows MSVC println 192512 B 0 B / +0.0% 119062 B 0 B / +0.0% 932.884 ms -19.4 ms / -2.0% (better) 7.416 ms +483 us / +7.0% (worse)
Windows MSVC println-lto 189952 B 0 B / +0.0% 116406 B 0 B / +0.0% 1.147 s -12.03 ms / -1.0% (better) 7.958 ms +669.8 us / +9.2% (worse)
Windows MSVC 386 cprintf 9728 B 0 B / +0.0% 3931 B 0 B / +0.0% 909.620 ms +17.28 ms / +1.9% (worse) 5.083 ms -137.3 us / -2.6% (better)
Windows MSVC 386 cprintf-lto 9216 B 0 B / +0.0% 3853 B 0 B / +0.0% 908.665 ms -25.7 ms / -2.8% (better) 5.636 ms -2.144 ms / -27.6% (better)
Windows MSVC 386 fmtprintf 1188864 B 0 B / +0.0% 451786 B +16 B / +0.003542% (worse) 3.699 s -21.8 ms / -0.6% (better) 12.150 ms +286.3 us / +2.4% (worse)
Windows MSVC 386 fmtprintf-lto 1232896 B 0 B / +0.0% 428891 B 0 B / +0.0% 8.727 s +16.66 ms / +0.2% (worse) 11.453 ms -39.2 us / -0.3% (better)
Windows MSVC 386 println 34816 B 0 B / +0.0% 18493 B 0 B / +0.0% 898.811 ms -96.41 ms / -9.7% (better) 9.216 ms -28.4 us / -0.3% (better)
Windows MSVC 386 println-lto 32256 B 0 B / +0.0% 16638 B 0 B / +0.0% 1.071 s +8.913 ms / +0.8% (worse) 8.949 ms -244.9 us / -2.7% (better)
Windows MSVC ARM64 cprintf 11264 B 0 B / +0.0% 3976 B 0 B / +0.0% 2.192 s +69.84 ms / +3.3% (worse) 7.916 ms +314.1 us / +4.1% (worse)
Windows MSVC ARM64 cprintf-lto 10752 B 0 B / +0.0% 3868 B 0 B / +0.0% 2.208 s +62.09 ms / +2.9% (worse) 9.094 ms +1.611 ms / +21.5% (worse)
Windows MSVC ARM64 fmtprintf 1369600 B 0 B / +0.0% 506724 B 0 B / +0.0% 6.898 s +223.6 ms / +3.4% (worse) 15.283 ms +393.4 us / +2.6% (worse)
Windows MSVC ARM64 fmtprintf-lto 1397248 B 0 B / +0.0% 478440 B 0 B / +0.0% 16.594 s +301.4 ms / +1.8% (worse) 15.741 ms +641.1 us / +4.2% (worse)
Windows MSVC ARM64 println 41472 B 0 B / +0.0% 21552 B 0 B / +0.0% 2.164 s -36.49 ms / -1.7% (better) 13.768 ms +355.4 us / +2.6% (worse)
Windows MSVC ARM64 println-lto 39424 B 0 B / +0.0% 19320 B 0 B / +0.0% 2.510 s +57.83 ms / +2.4% (worse) 13.890 ms +621.3 us / +4.7% (worse)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.540 ns/op -0.14 ns/op / -1.0% (better)
Linux BenchmarkMergeCompilerFlags 208.200 ns/op -1 ns/op / -0.5% (better)
Linux BenchmarkMergeLinkerFlags 135 ns/op -0.3 ns/op / -0.2% (better)
Linux BenchmarkChannelBuffered 55.680 ns/op -0.87 ns/op / -1.5% (better)
Linux BenchmarkChannelHandoff 13153 ns/op -925 ns/op / -6.6% (better)
Linux BenchmarkDefer 53.040 ns/op -1.87 ns/op / -3.4% (better)
Linux BenchmarkDirectCall 1.166 ns/op -0.007 ns/op / -0.6% (better)
Linux BenchmarkGlobalRead 1.213 ns/op +0.042 ns/op / +3.6% (worse)
Linux BenchmarkGlobalWrite 7.760 ns/op -0.043 ns/op / -0.6% (better)
Linux BenchmarkGoroutine 21167 ns/op -837 ns/op / -3.8% (better)
Linux BenchmarkInterfaceCall 5.827 ns/op -0.254 ns/op / -4.2% (better)
Linux BenchmarkRuntimeGetG 2.381 ns/op -0.013 ns/op / -0.5% (better)
macOS BenchmarkLookupPCRandom 17.760 ns/op -0.43 ns/op / -2.4% (better)
macOS BenchmarkMergeCompilerFlags 172.100 ns/op +17 ns/op / +11.0% (worse)
macOS BenchmarkMergeLinkerFlags 104.600 ns/op -0.4 ns/op / -0.4% (better)
macOS BenchmarkChannelBuffered 37.630 ns/op +0.91 ns/op / +2.5% (worse)
macOS BenchmarkChannelHandoff 7639 ns/op -5779 ns/op / -43.1% (better)
macOS BenchmarkDefer 48.620 ns/op -3.64 ns/op / -7.0% (better)
macOS BenchmarkDirectCall 1.315 ns/op -0.142 ns/op / -9.7% (better)
macOS BenchmarkGlobalRead 1.473 ns/op +0.12 ns/op / +8.9% (worse)
macOS BenchmarkGlobalWrite 1.642 ns/op -0.178 ns/op / -9.8% (better)
macOS BenchmarkGoroutine 60263 ns/op +12969 ns/op / +27.4% (worse)
macOS BenchmarkInterfaceCall 5.539 ns/op +0.019 ns/op / +0.3% (worse)
macOS BenchmarkRuntimeGetG 2.738 ns/op -0.214 ns/op / -7.2% (better)
Windows MinGW BenchmarkLookupPCRandom 9.636 ns/op +0.017 ns/op / +0.2% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 373.400 ns/op +1.6 ns/op / +0.4% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 338.600 ns/op +6.8 ns/op / +2.0% (worse)
Windows MinGW BenchmarkChannelBuffered 26.460 ns/op -0.05 ns/op / -0.2% (better)
Windows MinGW BenchmarkChannelHandoff 1216 ns/op +142 ns/op / +13.2% (worse)
Windows MinGW BenchmarkDefer 45.100 ns/op +2.36 ns/op / +5.5% (worse)
Windows MinGW BenchmarkDirectCall 1.358 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGlobalRead 1.357 ns/op -0.004 ns/op / -0.3% (better)
Windows MinGW BenchmarkGlobalWrite 2.167 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGoroutine 59761 ns/op +3007 ns/op / +5.3% (worse)
Windows MinGW BenchmarkInterfaceCall 7.492 ns/op +0.403 ns/op / +5.7% (worse)
Windows MinGW BenchmarkRuntimeGetG 1.901 ns/op +0.493 ns/op / +35.0% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 26.580 ns/op -0.05 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkMergeCompilerFlags 750 ns/op -13 ns/op / -1.7% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 687 ns/op +16.6 ns/op / +2.5% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 40.190 ns/op -0.24 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkChannelHandoff 1012 ns/op +53.8 ns/op / +5.6% (worse)
Windows MinGW 386 BenchmarkDefer 42.550 ns/op -0.66 ns/op / -1.5% (better)
Windows MinGW 386 BenchmarkDirectCall 1.551 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGlobalRead 1.859 ns/op +0.31 ns/op / +20.0% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 7.767 ns/op -0.015 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkGoroutine 88329 ns/op +2651 ns/op / +3.1% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 8.405 ns/op +0.026 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkRuntimeGetG 2.166 ns/op -0.003 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.050 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 565.800 ns/op -3.2 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 529.100 ns/op -20 ns/op / -3.6% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 38.060 ns/op -0.91 ns/op / -2.3% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 2021 ns/op -12 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkDefer 55.250 ns/op +1.08 ns/op / +2.0% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.589 ns/op -0.0003 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.884 ns/op -0.0008 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.590 ns/op +0.0003 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 56250 ns/op -1737 ns/op / -3.0% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.238 ns/op +0.087 ns/op / +2.1% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.802 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC BenchmarkLookupPCRandom 13.050 ns/op -0.1 ns/op / -0.8% (better)
Windows MSVC BenchmarkMergeCompilerFlags 612.700 ns/op -15.8 ns/op / -2.5% (better)
Windows MSVC BenchmarkMergeLinkerFlags 523 ns/op -3.5 ns/op / -0.7% (better)
Windows MSVC BenchmarkChannelBuffered 31.420 ns/op -4.23 ns/op / -11.9% (better)
Windows MSVC BenchmarkChannelHandoff 1158 ns/op +179.7 ns/op / +18.4% (worse)
Windows MSVC BenchmarkDefer 56.490 ns/op +2.19 ns/op / +4.0% (worse)
Windows MSVC BenchmarkDirectCall 1.549 ns/op -0.308 ns/op / -16.6% (better)
Windows MSVC BenchmarkGlobalRead 1.547 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC BenchmarkGlobalWrite 2.468 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGoroutine 83381 ns/op +3726 ns/op / +4.7% (worse)
Windows MSVC BenchmarkInterfaceCall 8.065 ns/op -0.003 ns/op / -0.03718% (better)
Windows MSVC BenchmarkRuntimeGetG 2.483 ns/op +0.206 ns/op / +9.0% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 27.830 ns/op -0.01 ns/op / -0.03592% (better)
Windows MSVC 386 BenchmarkMergeCompilerFlags 763.800 ns/op -32.9 ns/op / -4.1% (better)
Windows MSVC 386 BenchmarkMergeLinkerFlags 718.100 ns/op +38 ns/op / +5.6% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 46.030 ns/op -0.16 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkChannelHandoff 787.100 ns/op +38.9 ns/op / +5.2% (worse)
Windows MSVC 386 BenchmarkDefer 52.710 ns/op +3.9 ns/op / +8.0% (worse)
Windows MSVC 386 BenchmarkDirectCall 1.746 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkGlobalRead 2.099 ns/op +0.352 ns/op / +20.1% (worse)
Windows MSVC 386 BenchmarkGlobalWrite 8.980 ns/op -0.002 ns/op / -0.02227% (better)
Windows MSVC 386 BenchmarkGoroutine 73499 ns/op +2188 ns/op / +3.1% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 9.442 ns/op -0.007 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.102 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.120 ns/op +0.11 ns/op / +0.9% (worse)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 559 ns/op -11.8 ns/op / -2.1% (better)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 530.900 ns/op -12 ns/op / -2.2% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 37.830 ns/op +0.4 ns/op / +1.1% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 2129 ns/op -23 ns/op / -1.1% (better)
Windows MSVC ARM64 BenchmarkDefer 70.210 ns/op +6 ns/op / +9.3% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op +0.0003 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.663 ns/op -0.0001 ns/op / -0.01507% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.794 ns/op -0.001 ns/op / -0.02635% (better)
Windows MSVC ARM64 BenchmarkGoroutine 55663 ns/op -145 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.235 ns/op +0.004 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkRuntimeGetG 2.175 ns/op +0.38 ns/op / +21.2% (worse)

Timer runtime benchmarks

Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 918.600 ns/op -1.9 ns/op / -0.2% (better)
Linux AfterFuncZeroDelivery/LLGo 32387 ns/op -5273 ns/op / -14.0% (better)
Linux CreateStop/Go 295.500 ns/op -33.5 ns/op / -10.2% (better)
Linux CreateStop/LLGo 1797 ns/op -145 ns/op / -7.5% (better)
Linux RearmStopped/Go 116 ns/op -1.6 ns/op / -1.4% (better)
Linux RearmStopped/LLGo 1124 ns/op -116 ns/op / -9.4% (better)
Linux ResetActive/Go 67.530 ns/op -2.69 ns/op / -3.8% (better)
Linux ResetActive/LLGo 557 ns/op -503 ns/op / -47.5% (better)
Linux ResetHeap1024/Go 67.590 ns/op -0.03 ns/op / -0.04437% (better)
Linux ResetHeap1024/LLGo 188 ns/op +6.4 ns/op / +3.5% (worse)
macOS AfterFuncZeroDelivery/Go 649.200 ns/op +3 ns/op / +0.5% (worse)
macOS AfterFuncZeroDelivery/LLGo 134141 ns/op +19474 ns/op / +17.0% (worse)
macOS CreateStop/Go 194.300 ns/op -2.9 ns/op / -1.5% (better)
macOS CreateStop/LLGo 868.800 ns/op -69.1 ns/op / -7.4% (better)
macOS RearmStopped/Go 76.910 ns/op -3.21 ns/op / -4.0% (better)
macOS RearmStopped/LLGo 645.800 ns/op -111.1 ns/op / -14.7% (better)
macOS ResetActive/Go 59.340 ns/op -1.04 ns/op / -1.7% (better)
macOS ResetActive/LLGo 236 ns/op +16.9 ns/op / +7.7% (worse)
macOS ResetHeap1024/Go 58.840 ns/op -1.65 ns/op / -2.7% (better)
macOS ResetHeap1024/LLGo 96.610 ns/op +8.36 ns/op / +9.5% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 375.200 ns/op -0.6 ns/op / -0.2% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 102764 ns/op +641 ns/op / +0.6% (worse)
Windows MinGW CreateStop/Go 89.690 ns/op -0.04 ns/op / -0.04458% (better)
Windows MinGW CreateStop/LLGo 355.600 ns/op -1.7 ns/op / -0.5% (better)
Windows MinGW RearmStopped/Go 24.420 ns/op -0.07 ns/op / -0.3% (better)
Windows MinGW RearmStopped/LLGo 252.500 ns/op +28.9 ns/op / +12.9% (worse)
Windows MinGW ResetActive/Go 14.790 ns/op -0.03 ns/op / -0.2% (better)
Windows MinGW ResetActive/LLGo 123.600 ns/op +6 ns/op / +5.1% (worse)
Windows MinGW ResetHeap1024/Go 14.770 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW ResetHeap1024/LLGo 104.900 ns/op +0.4 ns/op / +0.4% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 955.500 ns/op -8 ns/op / -0.8% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 190004 ns/op -357 ns/op / -0.2% (better)
Windows MinGW 386 CreateStop/Go 190.400 ns/op -5.1 ns/op / -2.6% (better)
Windows MinGW 386 CreateStop/LLGo 2420 ns/op +605 ns/op / +33.3% (worse)
Windows MinGW 386 RearmStopped/Go 63.960 ns/op +0.39 ns/op / +0.6% (worse)
Windows MinGW 386 RearmStopped/LLGo 343.800 ns/op -1 ns/op / -0.3% (better)
Windows MinGW 386 ResetActive/Go 39.270 ns/op +0.18 ns/op / +0.5% (worse)
Windows MinGW 386 ResetActive/LLGo 1036 ns/op +64.9 ns/op / +6.7% (worse)
Windows MinGW 386 ResetHeap1024/Go 39.410 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 ResetHeap1024/LLGo 186.100 ns/op -0.5 ns/op / -0.3% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 669.100 ns/op -4.1 ns/op / -0.6% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 123082 ns/op -183 ns/op / -0.1% (better)
Windows MinGW ARM64 CreateStop/Go 197.200 ns/op -6.7 ns/op / -3.3% (better)
Windows MinGW ARM64 CreateStop/LLGo 364.600 ns/op +9 ns/op / +2.5% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.570 ns/op -0.02 ns/op / -0.02833% (better)
Windows MinGW ARM64 RearmStopped/LLGo 251.100 ns/op -13.3 ns/op / -5.0% (better)
Windows MinGW ARM64 ResetActive/Go 31.020 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW ARM64 ResetActive/LLGo 125.100 ns/op +0.6 ns/op / +0.5% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 31.090 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 126 ns/op -0.5 ns/op / -0.4% (better)
Windows MSVC AfterFuncZeroDelivery/Go 562.500 ns/op -8.9 ns/op / -1.6% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 151704 ns/op +682 ns/op / +0.5% (worse)
Windows MSVC CreateStop/Go 118.200 ns/op +1.9 ns/op / +1.6% (worse)
Windows MSVC CreateStop/LLGo 429.800 ns/op -10.4 ns/op / -2.4% (better)
Windows MSVC RearmStopped/Go 31.650 ns/op 0 ns/op / +0.0%
Windows MSVC RearmStopped/LLGo 272.600 ns/op -5.2 ns/op / -1.9% (better)
Windows MSVC ResetActive/Go 20.100 ns/op +0.03 ns/op / +0.1% (worse)
Windows MSVC ResetActive/LLGo 134.900 ns/op -9.3 ns/op / -6.4% (better)
Windows MSVC ResetHeap1024/Go 20.400 ns/op -0.16 ns/op / -0.8% (better)
Windows MSVC ResetHeap1024/LLGo 121 ns/op -5.6 ns/op / -4.4% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 1003 ns/op +18.4 ns/op / +1.9% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 153302 ns/op -3269 ns/op / -2.1% (better)
Windows MSVC 386 CreateStop/Go 215 ns/op -1.1 ns/op / -0.5% (better)
Windows MSVC 386 CreateStop/LLGo 2087 ns/op -87 ns/op / -4.0% (better)
Windows MSVC 386 RearmStopped/Go 73.260 ns/op +0.21 ns/op / +0.3% (worse)
Windows MSVC 386 RearmStopped/LLGo 347.700 ns/op -2.4 ns/op / -0.7% (better)
Windows MSVC 386 ResetActive/Go 42 ns/op -0.07 ns/op / -0.2% (better)
Windows MSVC 386 ResetActive/LLGo 1048 ns/op +782.6 ns/op / +294.9% (worse)
Windows MSVC 386 ResetHeap1024/Go 42.360 ns/op +0.11 ns/op / +0.3% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 183.400 ns/op +0.3 ns/op / +0.2% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 661.500 ns/op +6.1 ns/op / +0.9% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 129749 ns/op -689 ns/op / -0.5% (better)
Windows MSVC ARM64 CreateStop/Go 192.900 ns/op -5.7 ns/op / -2.9% (better)
Windows MSVC ARM64 CreateStop/LLGo 394.600 ns/op +17.3 ns/op / +4.6% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.560 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 RearmStopped/LLGo 275.500 ns/op +4.7 ns/op / +1.7% (worse)
Windows MSVC ARM64 ResetActive/Go 31.020 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC ARM64 ResetActive/LLGo 141.300 ns/op +10.4 ns/op / +7.9% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.130 ns/op +0.13 ns/op / +0.4% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 136.800 ns/op +1.1 ns/op / +0.8% (worse)

Compared with 155b52eac08b measured in the same runner job.

@github-actions

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

38463561e6f3 | workflow run | long-term charts

WebAssembly output sizes

Profile and compiler Wasm module vs base Generated JS glue vs base
ec32/LLGo 113311 B 0 B / +0.0% 70736 B 0 B / +0.0%
ec64/LLGo 118717 B 0 B / +0.0% 74033 B 0 B / +0.0%
js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
js/LLGo 66161 B 0 B / +0.0% 68511 B 0 B / +0.0%
wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
wasip1/LLGo 72437 B 0 B / +0.0% 0 B 0 B / 0.0%
wc32/LLGo 117383 B 0 B / +0.0% 0 B 0 B / 0.0%

LLGo WebAssembly build measurements

Profile Build vs base
ec32 5.800 s -247.6 ms / -4.1% (better)
ec64 5.215 s -213.4 ms / -3.9% (better)
js 4.922 s +217.3 ms / +4.6% (worse)
wasip1 3.238 s -361.6 ms / -10.0% (better)
wc32 3.988 s -166 ms / -4.0% (better)

Compared with 155b52eac08b 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.

1 participant