Skip to content

Seed alias analysis worklist in reverse post-order - #14290

Merged
cfallin merged 1 commit into
bytecodealliance:mainfrom
fitzgen:seed-alias-analysis-in-rpo
Sep 8, 2026
Merged

Seed alias analysis worklist in reverse post-order#14290
cfallin merged 1 commit into
bytecodealliance:mainfrom
fitzgen:seed-alias-analysis-in-rpo

Conversation

@fitzgen

@fitzgen fitzgen commented Sep 7, 2026

Copy link
Copy Markdown
Member

This visits a block's predecessors before the block itself, which minimizes the number of times we need to reprocess a block to reach the fixed point (ignoring backedges).

Here are the Sightglass results (faster on 13/26 of the PCA subset; up to 1.02x faster), plus some extra benchmarks that use 1000 different globals in order to create benchmarks with many alias regions (up to 16.27x faster).

Details
compilation :: cycles :: Sum Total

    Δ = 8422617.35 ± 280685.06 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.15x to 1.16x faster than 5e00554696-baseline.dylib!

    ┌──────────┬──────────┬─────────────┬──────────┬─────────────────────────────┐
    │ Min      │ Max      │ Mean        │ Median   │ Engine                      │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 60331062 │ 64369397 │ 61754473.07 │ 61678752 │ 5e00554696-baseline.dylib   │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 51846162 │ 55688043 │ 53331855.72 │ 53253352 │ c86906f168-A-rpo-seed.dylib │
    └──────────┴──────────┴─────────────┴──────────┴─────────────────────────────┘

compilation :: instructions-retired :: Sum Total

    Δ = 7583044017.87 ± 17783614.28 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.05x to 1.05x faster than 5e00554696-baseline.dylib!

    ┌──────────────┬──────────────┬─────────────────┬──────────────┬─────────────────────────────┐
    │ Min          │ Max          │ Mean            │ Median       │ Engine                      │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 168815527589 │ 168999930832 │ 168907183902.21 │ 168906273009 │ 5e00554696-baseline.dylib   │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 161221272391 │ 161466420307 │ 161324139884.34 │ 161323996892 │ c86906f168-A-rpo-seed.dylib │
    └──────────────┴──────────────┴─────────────────┴──────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-cfg

    Δ = 3488395020.90 ± 330370.05 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 16.27x to 16.27x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3714492504 │ 3720971964 │ 3716830864.19 │ 3716697153 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 227560263  │ 229543940  │ 228435843.29  │ 228446605  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-loop

    Δ = 3676743569.51 ± 269112.72 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 14.98x to 14.99x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3938271014 │ 3942494061 │ 3939646001.25 │ 3939498236 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 262014252  │ 264993857  │ 262902431.74  │ 262817743  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-cfg

    Δ = 4080711.94 ± 12420.75 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 11.78x to 11.85x faster than 5e00554696-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4353068 │ 4563437 │ 4458098.75 │ 4457209 │ 5e00554696-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 325067  │ 427413  │ 377386.81  │ 377755  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-loop

    Δ = 4104661.05 ± 14351.30 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 10.61x to 10.68x faster than 5e00554696-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4397623 │ 4666018 │ 4530267.27 │ 4533174 │ 5e00554696-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 370362  │ 491900  │ 425606.22  │ 428477  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: instructions-retired :: tinygo-json

    Δ = 107193076.80 ± 815883.64 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5439283619 │ 5450038733 │ 5445123463.82 │ 5445131000 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5332483991 │ 5345446881 │ 5337930387.02 │ 5337890931 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: kotlin-richards

    Δ = 12093387.57 ± 584630.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 634797689 │ 643565242 │ 639630353.10 │ 639744730 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 623934476 │ 631123628 │ 627536965.53 │ 627528340 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: meshoptimizer

    Δ = 2362359.47 ± 404322.82 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.01x to 1.01x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383858384 │ 390770689 │ 388053353.33 │ 388001245 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383261763 │ 387923421 │ 385690993.86 │ 385615471 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: shootout-minicsv

    Δ = 601519.85 ± 472227.74 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 117035013 │ 123844363 │ 120882817.37 │ 121027989 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 116974294 │ 123132924 │ 120281297.52 │ 120136429 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: quicksort

    Δ = 881381.59 ± 416211.85 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 223787543 │ 229133325 │ 225969513.23 │ 225822591 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 222127742 │ 228398304 │ 225088131.64 │ 225055771 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: bz2

    Δ = 2312715.06 ± 480227.08 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 737107590 │ 743849687 │ 740178352.09 │ 740078124 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 734533054 │ 741353972 │ 737865637.03 │ 737898085 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: sqlite3

    Δ = 17102938.31 ± 978800.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6543461309 │ 6560165030 │ 6551934323.03 │ 6551923670 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6529868907 │ 6542054900 │ 6534831384.72 │ 6534691956 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: spidermonkey-regex

    Δ = 118389649.00 ± 4827636.02 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45963049179 │ 46016697865 │ 45985854571.04 │ 45984800772 │ 5e00554696-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45839879682 │ 45907160559 │ 45867464922.04 │ 45866804291 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-compression

    Δ = 6712163.12 ± 856022.61 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3870353384 │ 3882887385 │ 3875855295.33 │ 3876293061 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3863295580 │ 3875095656 │ 3869143132.21 │ 3869057316 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: regex

    Δ = 5669354.36 ± 632864.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3285972090 │ 3294088345 │ 3289597651.01 │ 3289541728 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3279840034 │ 3287764296 │ 3283928296.65 │ 3283956957 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: tract-onnx-image-classification

    Δ = 135367927.19 ± 14795683.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81407549211 │ 81562568478 │ 81475588637.09 │ 81473382979 │ 5e00554696-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81256299647 │ 81465756514 │ 81340220709.90 │ 81335906227 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: hex-simd

    Δ = 779004.92 ± 525403.40 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508671283 │ 515352203 │ 512220005.11 │ 512185404 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508728739 │ 515958257 │ 511441000.19 │ 511357702 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: libsodium-scalarmult_ed25519

    Δ = 885006.64 ± 499263.19 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 746252373 │ 753029861 │ 749924541.79 │ 749970953 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 745419599 │ 752737391 │ 749039535.15 │ 749090622 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: hashset

    Δ = 1571708.63 ± 1175700.98 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1463796111 │ 1480612250 │ 1472991690.94 │ 1473144505 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1464040534 │ 1477349536 │ 1471419982.31 │ 1471875364 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-html-rewriter

    Δ = 3230981.96 ± 641798.83 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3228518318 │ 3238197616 │ 3232722284.22 │ 3232812395 │ 5e00554696-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3225242344 │ 3234092078 │ 3229491302.26 │ 3229350214 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-protobuf

    Δ = 705588.07 ± 582552.52 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554696-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 722339594 │ 731951556 │ 728193145.67 │ 728326686 │ 5e00554696-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 723792262 │ 731022735 │ 727487557.60 │ 727470029 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

This visits a block's predecessors before the block itself, which minimizes the
number of times we need to reprocess a block to reach the fixed point (ignoring
backedges).

Here are the Sightglass results (faster on 13/26 of the PCA subset; up to 1.02x
faster), plus some extra benchmarks that use 1000 different globals in order to
create benchmarks with many alias regions (up to 16.27x faster).

<details>

```
compilation :: cycles :: Sum Total

    Δ = 8422617.35 ± 280685.06 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.15x to 1.16x faster than 5e00554-baseline.dylib!

    ┌──────────┬──────────┬─────────────┬──────────┬─────────────────────────────┐
    │ Min      │ Max      │ Mean        │ Median   │ Engine                      │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 60331062 │ 64369397 │ 61754473.07 │ 61678752 │ 5e00554-baseline.dylib   │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 51846162 │ 55688043 │ 53331855.72 │ 53253352 │ c86906f168-A-rpo-seed.dylib │
    └──────────┴──────────┴─────────────┴──────────┴─────────────────────────────┘

compilation :: instructions-retired :: Sum Total

    Δ = 7583044017.87 ± 17783614.28 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.05x to 1.05x faster than 5e00554-baseline.dylib!

    ┌──────────────┬──────────────┬─────────────────┬──────────────┬─────────────────────────────┐
    │ Min          │ Max          │ Mean            │ Median       │ Engine                      │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 168815527589 │ 168999930832 │ 168907183902.21 │ 168906273009 │ 5e00554-baseline.dylib   │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 161221272391 │ 161466420307 │ 161324139884.34 │ 161323996892 │ c86906f168-A-rpo-seed.dylib │
    └──────────────┴──────────────┴─────────────────┴──────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-cfg

    Δ = 3488395020.90 ± 330370.05 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 16.27x to 16.27x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3714492504 │ 3720971964 │ 3716830864.19 │ 3716697153 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 227560263  │ 229543940  │ 228435843.29  │ 228446605  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-loop

    Δ = 3676743569.51 ± 269112.72 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 14.98x to 14.99x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3938271014 │ 3942494061 │ 3939646001.25 │ 3939498236 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 262014252  │ 264993857  │ 262902431.74  │ 262817743  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-cfg

    Δ = 4080711.94 ± 12420.75 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 11.78x to 11.85x faster than 5e00554-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4353068 │ 4563437 │ 4458098.75 │ 4457209 │ 5e00554-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 325067  │ 427413  │ 377386.81  │ 377755  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-loop

    Δ = 4104661.05 ± 14351.30 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 10.61x to 10.68x faster than 5e00554-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4397623 │ 4666018 │ 4530267.27 │ 4533174 │ 5e00554-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 370362  │ 491900  │ 425606.22  │ 428477  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: instructions-retired :: tinygo-json

    Δ = 107193076.80 ± 815883.64 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5439283619 │ 5450038733 │ 5445123463.82 │ 5445131000 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5332483991 │ 5345446881 │ 5337930387.02 │ 5337890931 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: kotlin-richards

    Δ = 12093387.57 ± 584630.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 634797689 │ 643565242 │ 639630353.10 │ 639744730 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 623934476 │ 631123628 │ 627536965.53 │ 627528340 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: meshoptimizer

    Δ = 2362359.47 ± 404322.82 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.01x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383858384 │ 390770689 │ 388053353.33 │ 388001245 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383261763 │ 387923421 │ 385690993.86 │ 385615471 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: shootout-minicsv

    Δ = 601519.85 ± 472227.74 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 117035013 │ 123844363 │ 120882817.37 │ 121027989 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 116974294 │ 123132924 │ 120281297.52 │ 120136429 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: quicksort

    Δ = 881381.59 ± 416211.85 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 223787543 │ 229133325 │ 225969513.23 │ 225822591 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 222127742 │ 228398304 │ 225088131.64 │ 225055771 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: bz2

    Δ = 2312715.06 ± 480227.08 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 737107590 │ 743849687 │ 740178352.09 │ 740078124 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 734533054 │ 741353972 │ 737865637.03 │ 737898085 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: sqlite3

    Δ = 17102938.31 ± 978800.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6543461309 │ 6560165030 │ 6551934323.03 │ 6551923670 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6529868907 │ 6542054900 │ 6534831384.72 │ 6534691956 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: spidermonkey-regex

    Δ = 118389649.00 ± 4827636.02 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45963049179 │ 46016697865 │ 45985854571.04 │ 45984800772 │ 5e00554-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45839879682 │ 45907160559 │ 45867464922.04 │ 45866804291 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-compression

    Δ = 6712163.12 ± 856022.61 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3870353384 │ 3882887385 │ 3875855295.33 │ 3876293061 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3863295580 │ 3875095656 │ 3869143132.21 │ 3869057316 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: regex

    Δ = 5669354.36 ± 632864.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3285972090 │ 3294088345 │ 3289597651.01 │ 3289541728 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3279840034 │ 3287764296 │ 3283928296.65 │ 3283956957 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: tract-onnx-image-classification

    Δ = 135367927.19 ± 14795683.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81407549211 │ 81562568478 │ 81475588637.09 │ 81473382979 │ 5e00554-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81256299647 │ 81465756514 │ 81340220709.90 │ 81335906227 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: hex-simd

    Δ = 779004.92 ± 525403.40 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508671283 │ 515352203 │ 512220005.11 │ 512185404 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508728739 │ 515958257 │ 511441000.19 │ 511357702 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: libsodium-scalarmult_ed25519

    Δ = 885006.64 ± 499263.19 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 746252373 │ 753029861 │ 749924541.79 │ 749970953 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 745419599 │ 752737391 │ 749039535.15 │ 749090622 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: hashset

    Δ = 1571708.63 ± 1175700.98 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1463796111 │ 1480612250 │ 1472991690.94 │ 1473144505 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1464040534 │ 1477349536 │ 1471419982.31 │ 1471875364 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-html-rewriter

    Δ = 3230981.96 ± 641798.83 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3228518318 │ 3238197616 │ 3232722284.22 │ 3232812395 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3225242344 │ 3234092078 │ 3229491302.26 │ 3229350214 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-protobuf

    Δ = 705588.07 ± 582552.52 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 722339594 │ 731951556 │ 728193145.67 │ 728326686 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 723792262 │ 731022735 │ 727487557.60 │ 727470029 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘
```

<details>
@fitzgen
fitzgen requested a review from a team as a code owner September 7, 2026 01:20
@fitzgen
fitzgen requested review from cfallin and removed request for a team September 7, 2026 01:20
@github-actions github-actions Bot added the cranelift Issues related to the Cranelift code generator label Sep 7, 2026

@cfallin cfallin left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@cfallin
cfallin added this pull request to the merge queue Sep 8, 2026
Merged via the queue into bytecodealliance:main with commit 8c84ad0 Sep 8, 2026
54 checks passed
@fitzgen
fitzgen deleted the seed-alias-analysis-in-rpo branch September 8, 2026 20:03
alexcrichton added a commit that referenced this pull request Sep 9, 2026
* Seed alias analysis worklist in reverse post-order (#14290)

This visits a block's predecessors before the block itself, which minimizes the
number of times we need to reprocess a block to reach the fixed point (ignoring
backedges).

Here are the Sightglass results (faster on 13/26 of the PCA subset; up to 1.02x
faster), plus some extra benchmarks that use 1000 different globals in order to
create benchmarks with many alias regions (up to 16.27x faster).

<details>

```
compilation :: cycles :: Sum Total

    Δ = 8422617.35 ± 280685.06 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.15x to 1.16x faster than 5e00554-baseline.dylib!

    ┌──────────┬──────────┬─────────────┬──────────┬─────────────────────────────┐
    │ Min      │ Max      │ Mean        │ Median   │ Engine                      │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 60331062 │ 64369397 │ 61754473.07 │ 61678752 │ 5e00554-baseline.dylib   │
    ├──────────┼──────────┼─────────────┼──────────┼─────────────────────────────┤
    │ 51846162 │ 55688043 │ 53331855.72 │ 53253352 │ c86906f168-A-rpo-seed.dylib │
    └──────────┴──────────┴─────────────┴──────────┴─────────────────────────────┘

compilation :: instructions-retired :: Sum Total

    Δ = 7583044017.87 ± 17783614.28 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.05x to 1.05x faster than 5e00554-baseline.dylib!

    ┌──────────────┬──────────────┬─────────────────┬──────────────┬─────────────────────────────┐
    │ Min          │ Max          │ Mean            │ Median       │ Engine                      │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 168815527589 │ 168999930832 │ 168907183902.21 │ 168906273009 │ 5e00554-baseline.dylib   │
    ├──────────────┼──────────────┼─────────────────┼──────────────┼─────────────────────────────┤
    │ 161221272391 │ 161466420307 │ 161324139884.34 │ 161323996892 │ c86906f168-A-rpo-seed.dylib │
    └──────────────┴──────────────┴─────────────────┴──────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-cfg

    Δ = 3488395020.90 ± 330370.05 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 16.27x to 16.27x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3714492504 │ 3720971964 │ 3716830864.19 │ 3716697153 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 227560263  │ 229543940  │ 228435843.29  │ 228446605  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: globals-1000-loop

    Δ = 3676743569.51 ± 269112.72 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 14.98x to 14.99x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3938271014 │ 3942494061 │ 3939646001.25 │ 3939498236 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 262014252  │ 264993857  │ 262902431.74  │ 262817743  │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-cfg

    Δ = 4080711.94 ± 12420.75 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 11.78x to 11.85x faster than 5e00554-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4353068 │ 4563437 │ 4458098.75 │ 4457209 │ 5e00554-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 325067  │ 427413  │ 377386.81  │ 377755  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: cycles :: globals-1000-loop

    Δ = 4104661.05 ± 14351.30 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 10.61x to 10.68x faster than 5e00554-baseline.dylib!

    ┌─────────┬─────────┬────────────┬─────────┬─────────────────────────────┐
    │ Min     │ Max     │ Mean       │ Median  │ Engine                      │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 4397623 │ 4666018 │ 4530267.27 │ 4533174 │ 5e00554-baseline.dylib   │
    ├─────────┼─────────┼────────────┼─────────┼─────────────────────────────┤
    │ 370362  │ 491900  │ 425606.22  │ 428477  │ c86906f168-A-rpo-seed.dylib │
    └─────────┴─────────┴────────────┴─────────┴─────────────────────────────┘

compilation :: instructions-retired :: tinygo-json

    Δ = 107193076.80 ± 815883.64 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5439283619 │ 5450038733 │ 5445123463.82 │ 5445131000 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 5332483991 │ 5345446881 │ 5337930387.02 │ 5337890931 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: kotlin-richards

    Δ = 12093387.57 ± 584630.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.02x to 1.02x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 634797689 │ 643565242 │ 639630353.10 │ 639744730 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 623934476 │ 631123628 │ 627536965.53 │ 627528340 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: meshoptimizer

    Δ = 2362359.47 ± 404322.82 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.01x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383858384 │ 390770689 │ 388053353.33 │ 388001245 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 383261763 │ 387923421 │ 385690993.86 │ 385615471 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: shootout-minicsv

    Δ = 601519.85 ± 472227.74 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 117035013 │ 123844363 │ 120882817.37 │ 121027989 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 116974294 │ 123132924 │ 120281297.52 │ 120136429 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: quicksort

    Δ = 881381.59 ± 416211.85 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.01x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 223787543 │ 229133325 │ 225969513.23 │ 225822591 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 222127742 │ 228398304 │ 225088131.64 │ 225055771 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: bz2

    Δ = 2312715.06 ± 480227.08 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 737107590 │ 743849687 │ 740178352.09 │ 740078124 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 734533054 │ 741353972 │ 737865637.03 │ 737898085 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: sqlite3

    Δ = 17102938.31 ± 978800.03 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6543461309 │ 6560165030 │ 6551934323.03 │ 6551923670 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 6529868907 │ 6542054900 │ 6534831384.72 │ 6534691956 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: spidermonkey-regex

    Δ = 118389649.00 ± 4827636.02 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45963049179 │ 46016697865 │ 45985854571.04 │ 45984800772 │ 5e00554-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 45839879682 │ 45907160559 │ 45867464922.04 │ 45866804291 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-compression

    Δ = 6712163.12 ± 856022.61 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3870353384 │ 3882887385 │ 3875855295.33 │ 3876293061 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3863295580 │ 3875095656 │ 3869143132.21 │ 3869057316 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: regex

    Δ = 5669354.36 ± 632864.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3285972090 │ 3294088345 │ 3289597651.01 │ 3289541728 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3279840034 │ 3287764296 │ 3283928296.65 │ 3283956957 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: tract-onnx-image-classification

    Δ = 135367927.19 ± 14795683.99 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌─────────────┬─────────────┬────────────────┬─────────────┬─────────────────────────────┐
    │ Min         │ Max         │ Mean           │ Median      │ Engine                      │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81407549211 │ 81562568478 │ 81475588637.09 │ 81473382979 │ 5e00554-baseline.dylib   │
    ├─────────────┼─────────────┼────────────────┼─────────────┼─────────────────────────────┤
    │ 81256299647 │ 81465756514 │ 81340220709.90 │ 81335906227 │ c86906f168-A-rpo-seed.dylib │
    └─────────────┴─────────────┴────────────────┴─────────────┴─────────────────────────────┘

compilation :: instructions-retired :: hex-simd

    Δ = 779004.92 ± 525403.40 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508671283 │ 515352203 │ 512220005.11 │ 512185404 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 508728739 │ 515958257 │ 511441000.19 │ 511357702 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: libsodium-scalarmult_ed25519

    Δ = 885006.64 ± 499263.19 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 746252373 │ 753029861 │ 749924541.79 │ 749970953 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 745419599 │ 752737391 │ 749039535.15 │ 749090622 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘

compilation :: instructions-retired :: hashset

    Δ = 1571708.63 ± 1175700.98 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1463796111 │ 1480612250 │ 1472991690.94 │ 1473144505 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 1464040534 │ 1477349536 │ 1471419982.31 │ 1471875364 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-html-rewriter

    Δ = 3230981.96 ± 641798.83 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌────────────┬────────────┬───────────────┬────────────┬─────────────────────────────┐
    │ Min        │ Max        │ Mean          │ Median     │ Engine                      │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3228518318 │ 3238197616 │ 3232722284.22 │ 3232812395 │ 5e00554-baseline.dylib   │
    ├────────────┼────────────┼───────────────┼────────────┼─────────────────────────────┤
    │ 3225242344 │ 3234092078 │ 3229491302.26 │ 3229350214 │ c86906f168-A-rpo-seed.dylib │
    └────────────┴────────────┴───────────────┴────────────┴─────────────────────────────┘

compilation :: instructions-retired :: rust-protobuf

    Δ = 705588.07 ± 582552.52 (confidence = 99%)

    c86906f168-A-rpo-seed.dylib is 1.00x to 1.00x faster than 5e00554-baseline.dylib!

    ┌───────────┬───────────┬──────────────┬───────────┬─────────────────────────────┐
    │ Min       │ Max       │ Mean         │ Median    │ Engine                      │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 722339594 │ 731951556 │ 728193145.67 │ 728326686 │ 5e00554-baseline.dylib   │
    ├───────────┼───────────┼──────────────┼───────────┼─────────────────────────────┤
    │ 723792262 │ 731022735 │ 727487557.60 │ 727470029 │ c86906f168-A-rpo-seed.dylib │
    └───────────┴───────────┴──────────────┴───────────┴─────────────────────────────┘
```

<details>

* Fix subtle ISLE extractor issue leading to incorrect matching in `*mul_overflow` lowering. (#14295)

* Fix subtle ISLE extractor issue leading to incorrect matching in `*mul_overflow` lowering.

In #14293, a test case that uses the *first* result (i.e., the product)
of an `smul_overflow` operator as a condition (e.g. as part of `icmp eq`
comparing to zero) incorrectly triggers the lowering rule I added in #14254
which was meant to match only compare-to-zero on the *second* (overflow)
result.

This was a result if a fairly subtle issue involving auto-conversions in
ISLE. I had written

```
(rule (is_nonzero (second_result umul @ (smul_overflow ...)))
      ...)
```

where the intent was to match an `is_nonzero` (which is a helper term)
lowering with the second result (overflow flag) of the `smul_overflow`.

`second_result` has a term signature `(Value) Inst`, in other words it
takes an `Inst` and returns an `Option<Value>`.` `is_nonzero` takes a
`Value`. So we auto-convert the `Value` in the first arg position of
`is_nonzer` to an `Inst`; that uses `def_inst`, which looks up the
defining instruction of the given value. Then `second_result` takes that
`Inst` and gives the second value. But then the next level,
`(smul_overflow ...)`, *again* uses `def_inst` and goes from the (second
result) `Value` back to the inst and matches.

In other words, we're too permissive with the autoconversions on `Value`
to `Inst`; all of this was designed at a time when we more or less only
handled single-result instructions with any nontrivial lowering rule, so
the two were mostly interchangeable. The handling for the overflow-flag
ops changes that.

The specific step in that chain above that is unambiguously wrong wrt
intent is (first result) `Value` -> `Inst` -> `second_result` matching.
So this PR instead introduces `is_second_result` that is `Value` ->
`Option<Value>` and matches only when the specific `Value` is the second
result of an instruction.

This does have me thinking a bit more about the role that the `Value` ->
`Inst` autoconvert matching plays. It is absolutely essential to the
ergonomics of ISLE: without it, we couldn't write

```
(rule (lower (iadd (imul a b) c)) ...)
```

because `iadd`'s args are `Value`s and we need to match back to an
`Inst` for `imul`. *But* we also have cases like the one in this PR
where we really shouldn't be so permissive. Perhaps we want a kind of
type modifier (`=Value` ?) that means "exactly this type, not
autoconverted". I'll bring this up in the Cranelift meeting this week.

Fixes #14293.

* Review feedback.

* Test minimization.

* Adjust the recursive `run_concurrent` check (#14302)

This commit adjust the previous `check_recursive_run` function found in
`concurrent.rs` to instead be a check of the now-present
`event_loop_running` bool. This allows disparate stores to run
recursively as there should be no issue with that but still requires
a single store just once and never recursively.

This was discovered in Spin's update to Wasmtime 49 at
spinframework/spin#3710 where delegation of an HTTP request from a p3
component (executed with `run_concurrent`) to a p2 component
(instantiated with `instantiate_async`) started panicking with this
recursive check in Wasmtime 49. The cause of this was the refactoring
in #14146 where all instantiation now simulates the concurrent event
loop where enabled for the `start` function. Spin executes the
components in different stores, however, which is how this commit fixes
that case.

---------

Co-authored-by: Nick Fitzgerald <fitzgen@gmail.com>
Co-authored-by: Chris Fallin <chris@cfallin.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cranelift Issues related to the Cranelift code generator

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants