Takeshi Yoneda
65650d399d
ssa: reuses slices for basicBlock.params ( #2247 )
...
This replaces the basicBlock.params field with the reusable
VarLength[Value] type. As a result, the compilation starts
using less memory and allocations.
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
Compilation/wazero-10 2.004 ± 2% 2.001 ± 0% ~ (p=0.620 n=7)
Compilation/zig-10 4.164 ± 1% 4.174 ± 3% ~ (p=0.097 n=7)
geomean 2.888 2.890 +0.06%
│ old.txt │ new.txt │
│ B/op │ B/op vs base │
Compilation/wazero-10 297.7Mi ± 0% 297.5Mi ± 0% -0.06% (p=0.001 n=7)
Compilation/zig-10 594.0Mi ± 0% 593.9Mi ± 0% -0.01% (p=0.001 n=7)
geomean 420.5Mi 420.3Mi -0.03%
│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
Compilation/wazero-10 472.5k ± 0% 457.1k ± 0% -3.25% (p=0.001 n=7)
Compilation/zig-10 277.2k ± 0% 275.7k ± 0% -0.53% (p=0.001 n=7)
geomean 361.9k 355.0k -1.90%
```
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-06-13 13:01:58 -07:00
Takeshi Yoneda
5c8366f8d5
ssa: optimizes slice allocations ( #2242 )
...
This makes the compilation faster and use less memory:
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
Compilation/wazero-10 2.184 ± 0% 2.110 ± 0% -3.40% (p=0.001 n=7)
Compilation/zig-10 4.331 ± 1% 4.187 ± 1% -3.31% (p=0.001 n=7)
geomean 3.075 2.972 -3.36%
│ old.txt │ new.txt │
│ B/op │ B/op vs base │
Compilation/wazero-10 337.3Mi ± 0% 301.9Mi ± 0% -10.49% (p=0.001 n=7)
Compilation/zig-10 599.3Mi ± 0% 594.3Mi ± 0% -0.84% (p=0.001 n=7)
geomean 449.6Mi 423.6Mi -5.79%
│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
Compilation/wazero-10 592.9k ± 0% 527.9k ± 0% -10.97% (p=0.001 n=7)
Compilation/zig-10 287.8k ± 0% 278.6k ± 0% -3.20% (p=0.001 n=7)
geomean 413.1k 383.5k -7.17%
```
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-06-10 08:25:29 -07:00
Takeshi Yoneda
747609b0f5
ssa: removes map use for block traversals ( #2235 )
...
This removes the use of map in basic block traversals.
As a result, overall compilation perf improves like the below:
### Zig
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero/internal/integration_test/stdlibs
│ old_zig.txt │ new_zig.txt │
│ sec/op │ sec/op vs base │
Zig/Compile/test-opt.wasm-10 4.438 ± 1% 3.778 ± 0% -14.87% (p=0.002 n=6)
Zig/Run/test-opt.wasm-10 18.77 ± 1% 18.76 ± 0% ~ (p=0.818 n=6)
Zig/Compile/test.wasm-10 5.083 ± 0% 4.673 ± 0% -8.07% (p=0.002 n=6)
Zig/Run/test.wasm-10 19.27 ± 1% 19.30 ± 1% ~ (p=0.699 n=6)
geomean 9.504 8.941 -5.92%
│ old_zig.txt │ new_zig.txt │
│ B/op │ B/op vs base │
Zig/Compile/test-opt.wasm-10 396.7Mi ± 0% 394.7Mi ± 0% -0.51% (p=0.002 n=6)
Zig/Run/test-opt.wasm-10 741.7Mi ± 0% 741.7Mi ± 0% ~ (p=0.900 n=6)
Zig/Compile/test.wasm-10 660.0Mi ± 0% 659.5Mi ± 0% -0.08% (p=0.002 n=6)
Zig/Run/test.wasm-10 1.296Gi ± 0% 1.296Gi ± 0% ~ (p=0.892 n=6)
geomean 712.6Mi 711.5Mi -0.15%
│ old_zig.txt │ new_zig.txt │
│ allocs/op │ allocs/op vs base │
Zig/Compile/test-opt.wasm-10 363.2k ± 0% 362.6k ± 0% -0.17% (p=0.002 n=6)
Zig/Run/test-opt.wasm-10 51.58k ± 0% 51.58k ± 0% ~ (p=0.933 n=6)
Zig/Compile/test.wasm-10 515.2k ± 0% 515.4k ± 0% ~ (p=0.485 n=6)
Zig/Run/test.wasm-10 2.156M ± 0% 2.156M ± 0% ~ (p=0.998 n=6)
geomean 379.8k 379.7k -0.03%
```
### wasip1
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero/internal/integration_test/stdlibs
│ old_wasip1.txt │ new_wasip1.txt │
│ sec/op │ sec/op vs base │
Wasip1/Compile/src_archive_tar.test-10 2.198 ± 1% 2.067 ± 1% -5.96% (p=0.001 n=7)
Wasip1/Run/src_archive_tar.test-10 398.8m ± 0% 398.8m ± 0% ~ (p=0.902 n=7)
Wasip1/Compile/src_bufio.test-10 1.492 ± 0% 1.409 ± 1% -5.57% (p=0.001 n=7)
Wasip1/Run/src_bufio.test-10 120.5m ± 1% 121.0m ± 1% +0.44% (p=0.017 n=7)
Wasip1/Compile/src_bytes.test-10 1.543 ± 0% 1.454 ± 0% -5.72% (p=0.001 n=7)
Wasip1/Run/src_bytes.test-10 469.0m ± 1% 467.4m ± 1% ~ (p=0.209 n=7)
Wasip1/Compile/src_context.test-10 1.664 ± 0% 1.564 ± 1% -6.00% (p=0.001 n=7)
Wasip1/Run/src_context.test-10 31.54m ± 1% 31.57m ± 0% ~ (p=0.445 n=6+7)
Wasip1/Compile/src_encoding_ascii85.test-10 1.261 ± ∞ ¹
geomean 527.3m 565.9m -2.92%
¹ need >= 6 samples for confidence interval at level 0.95
│ old_wasip1.txt │ new_wasip1.txt │
│ B/op │ B/op vs base │
Wasip1/Compile/src_archive_tar.test-10 93.44Mi ± 0% 93.17Mi ± 0% -0.30% (p=0.001 n=7)
Wasip1/Run/src_archive_tar.test-10 286.0Mi ± 0% 286.0Mi ± 0% ~ (p=0.593 n=7)
Wasip1/Compile/src_bufio.test-10 74.38Mi ± 0% 74.13Mi ± 0% -0.35% (p=0.001 n=7)
Wasip1/Run/src_bufio.test-10 105.3Mi ± 0% 105.3Mi ± 0% ~ (p=0.780 n=7)
Wasip1/Compile/src_bytes.test-10 75.58Mi ± 0% 75.32Mi ± 0% -0.35% (p=0.001 n=7)
Wasip1/Run/src_bytes.test-10 605.0Mi ± 0% 605.0Mi ± 0% ~ (p=0.331 n=7)
Wasip1/Compile/src_context.test-10 78.33Mi ± 0% 78.07Mi ± 0% -0.33% (p=0.001 n=7)
Wasip1/Run/src_context.test-10 71.52Mi ± 0% 71.52Mi ± 0% ~ (p=1.000 n=6+7)
Wasip1/Compile/src_encoding_ascii85.test-10 70.38Mi ± ∞ ¹
geomean 123.4Mi 115.7Mi -0.17%
¹ need >= 6 samples for confidence interval at level 0.95
│ old_wasip1.txt │ new_wasip1.txt │
│ allocs/op │ allocs/op vs base │
Wasip1/Compile/src_archive_tar.test-10 265.4k ± 0% 265.0k ± 0% -0.16% (p=0.001 n=7)
Wasip1/Run/src_archive_tar.test-10 7.831k ± 0% 7.830k ± 0% ~ (p=1.000 n=7)
Wasip1/Compile/src_bufio.test-10 195.6k ± 0% 195.4k ± 0% -0.12% (p=0.001 n=7)
Wasip1/Run/src_bufio.test-10 3.728k ± 0% 3.728k ± 0% ~ (p=1.000 n=7) ¹
Wasip1/Compile/src_bytes.test-10 204.1k ± 0% 203.7k ± 0% -0.20% (p=0.001 n=7)
Wasip1/Run/src_bytes.test-10 6.377k ± 0% 6.377k ± 0% ~ (p=1.000 n=7)
Wasip1/Compile/src_context.test-10 221.7k ± 0% 221.6k ± 0% -0.06% (p=0.001 n=7)
Wasip1/Run/src_context.test-10 3.814k ± 0% 3.814k ± 1% ~ (p=0.140 n=6+7)
Wasip1/Compile/src_encoding_ascii85.test-10 182.3k ± ∞ ²
geomean 33.71k 40.64k -0.07%
¹ all samples are equal
² need >= 6 samples for confidence interval at level 0.95
```
### TinyGo
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero/internal/integration_test/stdlibs
│ old_tinygo.txt │ new_tinygo.txt │
│ sec/op │ sec/op vs base │
TinyGo/Compile/container_heap.test-10 410.8m ± 1% 399.8m ± 0% -2.69% (p=0.001 n=7)
TinyGo/Run/container_heap.test-10 14.41m ± 0% 14.29m ± 2% -0.77% (p=0.026 n=7)
TinyGo/Compile/container_list.test-10 410.5m ± 1% 398.1m ± 0% -3.02% (p=0.001 n=7)
TinyGo/Run/container_list.test-10 14.27m ± 2% 14.16m ± 1% ~ (p=0.073 n=7)
TinyGo/Compile/container_ring.test-10 403.7m ± 1% 392.5m ± 2% -2.77% (p=0.001 n=7)
TinyGo/Run/container_ring.test-10 14.24m ± 0% 14.27m ± 1% ~ (p=0.259 n=7)
TinyGo/Compile/crypto_des.test-10 418.8m ± 0% 408.1m ± 0% -2.56% (p=0.001 n=7)
TinyGo/Run/crypto_des.test-10 18.23m ± 0% 18.17m ± 1% ~ (p=0.456 n=7)
TinyGo/Compile/crypto_md5.test-10 417.3m ± 2% 406.1m ± 1% -2.68% (p=0.001 n=7)
TinyGo/Run/crypto_md5.test-10 20.50m ± 0% 20.45m ± 1% ~ (p=0.128 n=7)
TinyGo/Compile/crypto_rc4.test-10 402.2m ± 1% 390.5m ± 0% -2.90% (p=0.001 n=7)
TinyGo/Run/crypto_rc4.test-10 160.8m ± 0% 161.0m ± 1% ~ (p=1.000 n=7)
TinyGo/Compile/crypto_sha1.test-10 417.2m ± 1% 404.5m ± 1% -3.04% (p=0.001 n=7)
TinyGo/Run/crypto_sha1.test-10 15.93m ± 1% 15.90m ± 1% ~ (p=0.710 n=7)
TinyGo/Compile/crypto_sha256.test-10 423.4m ± 1% 412.4m ± 1% -2.60% (p=0.001 n=7)
TinyGo/Run/crypto_sha256.test-10 16.16m ± ∞ ¹ 16.05m ± ∞ ¹ ~ (p=0.381 n=2+5)
geomean 94.17m 92.70m -1.56%
¹ need >= 6 samples for confidence interval at level 0.95
│ old_tinygo.txt │ new_tinygo.txt │
│ B/op │ B/op vs base │
TinyGo/Compile/container_heap.test-10 48.55Mi ± 0% 48.30Mi ± 0% -0.52% (p=0.001 n=7)
TinyGo/Run/container_heap.test-10 16.63Mi ± 0% 16.63Mi ± 0% ~ (p=0.557 n=7)
TinyGo/Compile/container_list.test-10 48.53Mi ± 0% 48.29Mi ± 0% -0.51% (p=0.001 n=7)
TinyGo/Run/container_list.test-10 16.40Mi ± 0% 16.40Mi ± 0% ~ (p=0.364 n=7)
TinyGo/Compile/container_ring.test-10 47.78Mi ± 0% 47.53Mi ± 0% -0.52% (p=0.001 n=7)
TinyGo/Run/container_ring.test-10 16.30Mi ± 0% 16.30Mi ± 0% ~ (p=0.128 n=7)
TinyGo/Compile/crypto_des.test-10 48.67Mi ± 0% 48.42Mi ± 0% -0.51% (p=0.001 n=7)
TinyGo/Run/crypto_des.test-10 16.76Mi ± 0% 16.76Mi ± 0% ~ (p=0.902 n=7)
TinyGo/Compile/crypto_md5.test-10 48.73Mi ± 0% 48.48Mi ± 0% -0.51% (p=0.001 n=7)
TinyGo/Run/crypto_md5.test-10 44.97Mi ± 0% 44.97Mi ± 0% ~ (p=0.402 n=7)
TinyGo/Compile/crypto_rc4.test-10 47.76Mi ± 0% 47.52Mi ± 0% -0.51% (p=0.001 n=7)
TinyGo/Run/crypto_rc4.test-10 29.28Mi ± 0% 29.28Mi ± 0% ~ (p=0.104 n=7)
TinyGo/Compile/crypto_sha1.test-10 48.97Mi ± 0% 48.72Mi ± 0% -0.52% (p=0.001 n=7)
TinyGo/Run/crypto_sha1.test-10 17.44Mi ± 0% 17.44Mi ± 0% ~ (p=1.000 n=7)
TinyGo/Compile/crypto_sha256.test-10 48.81Mi ± 0% 48.56Mi ± 0% -0.51% (p=0.001 n=7)
TinyGo/Run/crypto_sha256.test-10 17.53Mi ± ∞ ¹ 17.53Mi ± ∞ ¹ ~ (p=0.381 n=2+5)
geomean 31.45Mi 31.37Mi -0.26%
¹ need >= 6 samples for confidence interval at level 0.95
│ old_tinygo.txt │ new_tinygo.txt │
│ allocs/op │ allocs/op vs base │
TinyGo/Compile/container_heap.test-10 83.67k ± 0% 83.46k ± 0% -0.25% (p=0.011 n=7)
TinyGo/Run/container_heap.test-10 374.9k ± 0% 374.9k ± 0% ~ (p=1.000 n=7)
TinyGo/Compile/container_list.test-10 83.34k ± 0% 83.19k ± 0% -0.19% (p=0.002 n=7)
TinyGo/Run/container_list.test-10 370.0k ± 0% 370.0k ± 0% ~ (p=0.674 n=7)
TinyGo/Compile/container_ring.test-10 83.26k ± 0% 83.08k ± 0% -0.22% (p=0.004 n=7)
TinyGo/Run/container_ring.test-10 367.6k ± 0% 367.6k ± 0% ~ (p=0.249 n=7)
TinyGo/Compile/crypto_des.test-10 83.68k ± 0% 83.53k ± 0% -0.18% (p=0.004 n=7)
TinyGo/Run/crypto_des.test-10 378.1k ± 0% 378.1k ± 0% ~ (p=0.437 n=7)
TinyGo/Compile/crypto_md5.test-10 83.86k ± 0% 83.67k ± 0% -0.23% (p=0.001 n=7)
TinyGo/Run/crypto_md5.test-10 393.3k ± 0% 393.3k ± 0% ~ (p=0.592 n=7)
TinyGo/Compile/crypto_rc4.test-10 83.32k ± 0% 83.20k ± 0% -0.14% (p=0.011 n=7)
TinyGo/Run/crypto_rc4.test-10 367.1k ± 0% 367.1k ± 0% ~ (p=0.102 n=7)
TinyGo/Compile/crypto_sha1.test-10 84.05k ± 0% 83.87k ± 0% -0.21% (p=0.002 n=7)
TinyGo/Run/crypto_sha1.test-10 392.7k ± 0% 392.7k ± 0% ~ (p=1.000 n=7)
TinyGo/Compile/crypto_sha256.test-10 83.86k ± 0% 83.67k ± 0% -0.24% (p=0.001 n=7)
TinyGo/Run/crypto_sha256.test-10 394.5k ± ∞ ¹ 394.5k ± ∞ ¹ ~ (p=0.952 n=2+5)
geomean 178.2k 178.0k -0.10%
```
### wazero compiled as wasip1 binary
```
goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
Compilation-10 2.413 ± 0% 2.258 ± 1% -6.42% (p=0.001 n=7)
│ old.txt │ new.txt │
│ B/op │ B/op vs base │
Compilation-10 339.9Mi ± 0% 337.7Mi ± 0% -0.63% (p=0.001 n=7)
│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
Compilation-10 603.9k ± 0% 602.4k ± 0% -0.25% (p=0.001 n=7)
```
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-06-07 11:42:45 -07:00
Takeshi Yoneda
eb24363d34
ssa: empirically faster passRedundantPhiEliminationOpt ( #2214 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-05-23 16:12:40 +09:00
Takeshi Yoneda
b9633563c0
ssa: simplifies basicBlock.params ( #2212 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-05-21 15:51:41 +09:00
Takeshi Yoneda
9e4a5544bd
wazevo(ssa): recursive constant phi eliminations ( #2109 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-03-04 14:58:09 +09:00
Takeshi Yoneda
52212ad018
wazevo(ssa): refactors pass execution ( #2089 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-02-24 10:44:08 +09:00
Takeshi Yoneda
7d1818c227
wazevo(ssa): reuse slices ( #2041 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-02-11 10:27:31 -08:00
Takeshi Yoneda
8cf0fc3f4b
wazevo(ssa): avoids allocation during natural order sort ( #2024 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2024-02-07 17:21:15 -08:00
Takeshi Yoneda
6f16354ec7
wazevo: refactors liveness analysis ( #1821 )
...
This refactors the liveness analysis and starts using the different algorithm,
which results in 30s -> 12s for Python binary compilation.
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-10-31 08:12:17 +09:00
Takeshi Yoneda
ee91780e3d
wazevo(ssa): eliminates no-op shifts by constant zeros ( #1763 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-10-06 11:27:35 +09:00
Takeshi Yoneda
c592c8e5c1
wazevo: removes unused SSA insts, centralizes debug toggles ( #1671 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-30 08:16:51 +09:00
Takeshi Yoneda
b6ace485b6
wazevo: passes call_indirect, linking spectest ( #1670 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-29 12:09:18 +09:00
Takeshi Yoneda
828498dd89
wazevo(ssa): introduce trappable side effect ( #1668 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-29 08:04:10 +09:00
Takeshi Yoneda
757c4a6436
wazevo: passes br_if, switch and other spectests ( #1659 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-25 10:07:49 +09:00
Takeshi Yoneda
f96f097b39
wazevo: pass memory_grow.wast ( #1656 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-24 10:51:28 +09:00
Takeshi Yoneda
1223d11d6a
wazevo: pass memory_size.wast ( #1653 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-23 14:59:29 +09:00
Takeshi Yoneda
02900879bf
wazevo: initial impl of the new optimizing backend ( #1615 )
...
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com >
2023-08-09 10:45:23 +09:00