Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ssa: empirically faster passRedundantPhiEliminationOpt #2214

Merged
merged 2 commits into from
May 23, 2024
Merged

Conversation

mathetake
Copy link
Member

@mathetake mathetake commented May 23, 2024

This changes the order of traversal of basic blocks in passRedundantPhiEliminationOpt
optimization pass in a way that the algorithm converges more quickly.
In order to do so, run the pass after the control flow analysis and traverse the blocks
in the reverse post order.

This improves the compilation performance like 10-30% especially for Go and TinyGo binaries without
having any influence on the runtime performance (exactly the same executables as before).

Stdlibs

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         3.114 ±  2%      2.335 ±  7%    -25.02% (p=0.001 n=7)
Wasip1/Run/src_archive_tar.test-10            399.7m ±  3%     399.9m ±  2%          ~ (p=0.456 n=7)
Wasip1/Compile/src_bufio.test-10               1.874 ±  1%      1.574 ±  1%    -16.00% (p=0.001 n=7)
Wasip1/Run/src_bufio.test-10                  122.9m ± 13%     125.6m ±  4%          ~ (p=0.620 n=7)
Wasip1/Compile/src_bytes.test-10               1.987 ±  1%      1.639 ±  1%    -17.50% (p=0.001 n=7)
Wasip1/Run/src_bytes.test-10                  471.4m ±  0%     470.4m ±  0%          ~ (p=0.456 n=7)
Wasip1/Compile/src_context.test-10             2.086 ±  1%      1.752 ±  3%    -16.02% (p=0.001 n=7)
Wasip1/Run/src_context.test-10                31.78m ±  9%     30.91m ±  2%     -2.74% (p=0.038 n=7)
Wasip1/Compile/src_encoding_ascii85.test-10    1.727 ±  3%      1.407 ±  1%    -18.54% (p=0.001 n=7)
Wasip1/Run/src_encoding_ascii85.test-10       7.536m ±  3%     7.530m ±  1%          ~ (p=1.000 n=7)
Wasip1/Compile/src_encoding_asn1.test-10       1.948 ±  1%      1.637 ±  1%    -15.99% (p=0.001 n=7)
Wasip1/Run/src_encoding_asn1.test-10          8.542m ±  6%     8.425m ±  2%          ~ (p=0.128 n=7)
Wasip1/Compile/src_encoding_base32.test-10     1.790 ±  1%      1.462 ±  1%    -18.32% (p=0.001 n=7)
Wasip1/Run/src_encoding_base32.test-10        28.82m ±  3%     27.81m ±  1%     -3.53% (p=0.002 n=7)
Wasip1/Compile/src_encoding_base64.test-10     1.817 ±  1%      1.472 ±  0%    -19.00% (p=0.001 n=7)
Wasip1/Run/src_encoding_base64.test-10        12.31m ±  2%     12.17m ±  2%          ~ (p=0.209 n=7)
Wasip1/Compile/src_encoding_binary.test-10     1.843 ±  2%      1.651 ± 14%    -10.38% (p=0.026 n=7)
Wasip1/Run/src_encoding_binary.test-10        9.444m ±  4%     9.583m ±  4%     +1.46% (p=0.038 n=7)
Wasip1/Compile/src_encoding_csv.test-10        1.789 ±  1%      1.500 ±  1%    -16.17% (p=0.001 n=7)
Wasip1/Run/src_encoding_csv.test-10           19.99m ±   ∞ ¹   20.85m ±  4%          ~ (p=0.250 n=1+7)
Wasip1/Compile/src_encoding_gob.test-10                         2.165 ±  1%
geomean                                       264.3m           314.9m           -9.16%

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     668.8m ±  2%     445.6m ±  9%  -33.38% (p=0.001 n=7)
TinyGo/Run/container_heap.test-10         14.42m ± 11%     14.53m ±  7%        ~ (p=0.318 n=7)
TinyGo/Compile/container_list.test-10     663.8m ±  1%     433.9m ±  2%  -34.64% (p=0.001 n=7)
TinyGo/Run/container_list.test-10         14.26m ± 10%     14.17m ±  7%        ~ (p=0.318 n=7)
TinyGo/Compile/container_ring.test-10     665.9m ±  1%     435.6m ±  4%  -34.58% (p=0.001 n=7)
TinyGo/Run/container_ring.test-10         14.24m ± 12%     14.49m ±  2%        ~ (p=0.259 n=7)
TinyGo/Compile/crypto_des.test-10         692.5m ±  4%     452.5m ±  9%  -34.66% (p=0.001 n=7)
TinyGo/Run/crypto_des.test-10             18.32m ±  4%     18.14m ±  3%        ~ (p=0.128 n=7)
TinyGo/Compile/crypto_md5.test-10         681.3m ±  3%     450.5m ±  4%  -33.88% (p=0.001 n=7)
TinyGo/Run/crypto_md5.test-10             20.90m ±  4%     20.80m ±  8%        ~ (p=1.000 n=7)
TinyGo/Compile/crypto_rc4.test-10         673.2m ±  4%     429.0m ±  3%  -36.28% (p=0.001 n=7)
TinyGo/Run/crypto_rc4.test-10             162.7m ±  1%     162.7m ±  1%        ~ (p=0.902 n=7)
TinyGo/Compile/crypto_sha1.test-10        679.4m ±  3%     437.5m ±  3%  -35.61% (p=0.001 n=7)
TinyGo/Run/crypto_sha1.test-10            16.02m ±  6%     16.33m ±  3%        ~ (p=0.535 n=7)
TinyGo/Compile/crypto_sha256.test-10      697.0m ±  4%     445.0m ±  0%  -36.15% (p=0.001 n=7)
TinyGo/Run/crypto_sha256.test-10          16.10m ±  7%     15.91m ±  1%   -1.13% (p=0.017 n=7)
TinyGo/Compile/crypto_sha512.test-10      698.2m ±  3%     450.0m ±  2%  -35.56% (p=0.001 n=7)
TinyGo/Run/crypto_sha512.test-10          20.26m ±  7%     18.76m ±  1%   -7.41% (p=0.017 n=7)
TinyGo/Compile/encoding_ascii85.test-10   681.4m ±  4%     435.9m ±  1%  -36.03% (p=0.001 n=7)
TinyGo/Run/encoding_ascii85.test-10       14.88m ±  1%     14.93m ± 12%        ~ (p=0.318 n=7)
TinyGo/Compile/encoding_base32.test-10     1.645 ±  4%      1.165 ±  4%  -29.19% (p=0.001 n=7)
TinyGo/Run/encoding_base32.test-10        86.46m ±  4%     88.18m ±  5%        ~ (p=0.209 n=7)
TinyGo/Compile/encoding_csv.test-10       734.2m ±  1%     483.1m ±  5%  -34.20% (p=0.001 n=7)
TinyGo/Run/encoding_csv.test-10           22.85m ±  6%     22.86m ±  0%        ~ (p=1.000 n=7)
TinyGo/Compile/encoding_hex.test-10       699.8m ±  5%     455.9m ±  2%  -34.86% (p=0.001 n=7)
TinyGo/Run/encoding_hex.test-10           10.23m ±  4%     10.23m ±  5%        ~ (p=0.805 n=7)
TinyGo/Compile/go_scanner.test-10         752.3m ±  3%     485.0m ±  1%  -35.53% (p=0.001 n=7)
TinyGo/Run/go_scanner.test-10             16.70m ±  5%     16.62m ±  8%        ~ (p=0.620 n=7)
TinyGo/Compile/hash.test-10               948.3m ±  2%     690.5m ±  1%  -27.19% (p=0.001 n=7)
TinyGo/Run/hash.test-10                   16.19m ±  5%     16.14m ±  5%        ~ (p=0.902 n=7)
TinyGo/Compile/hash_adler32.test-10       663.8m ±  3%     423.4m ±  3%  -36.22% (p=0.001 n=7)
TinyGo/Run/hash_adler32.test-10           24.75m ±  8%     24.62m ±  1%        ~ (p=0.535 n=7)
TinyGo/Compile/hash_crc64.test-10         887.8m ±  3%     653.2m ±  1%  -26.43% (p=0.001 n=7)
TinyGo/Run/hash_crc64.test-10             17.27m ±  1%     17.53m ±  5%   +1.48% (p=0.017 n=7)
TinyGo/Compile/hash_fnv.test-10           685.6m ±  7%     443.7m ±  4%  -35.28% (p=0.001 n=7)
TinyGo/Run/hash_fnv.test-10               15.49m ±  4%     14.59m ±  4%   -5.85% (p=0.002 n=7)
TinyGo/Compile/html.test-10                2.476 ±  5%      2.188 ±  1%  -11.63% (p=0.001 n=7)
TinyGo/Compile/internal_itoa.test-10                       417.6m ±  1%
geomean                                   127.6m           108.0m        -18.34%

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.577 ± 1%   4.697 ± 4%  +2.63% (p=0.038 n=7)
Zig/Run/test-opt.wasm-10        18.91 ± 4%   18.96 ± 2%       ~ (p=0.902 n=7)
Zig/Compile/test.wasm-10        5.710 ± 0%   5.707 ± 0%       ~ (p=0.456 n=7)
Zig/Run/test.wasm-10            19.39 ± 1%   19.08 ± 2%  -1.60% (p=0.011 n=7)
geomean                         9.894        9.924       +0.30%

Compiling wazero compiled as Wasm

goos: darwin
goarch: arm64
pkg: github.com/tetratelabs/wazero
               │  old.txt   │              new.txt              │
               │   sec/op   │   sec/op    vs base               │
Compilation-10   3.304 ± 2%   2.533 ± 1%  -23.33% (p=0.001 n=7)

Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
@mathetake mathetake changed the title ssa: empericially faster passRedundantPhiEliminationOpt ssa: empirically faster passRedundantPhiEliminationOpt May 23, 2024
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
@mathetake mathetake marked this pull request as ready for review May 23, 2024 04:40
@mathetake
Copy link
Member Author

fuzzing time 🏃

@mathetake mathetake merged commit eb24363 into main May 23, 2024
64 checks passed
@mathetake mathetake deleted the optimizeblocks branch May 23, 2024 07:12
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