Seed alias analysis worklist in reverse post-order - #14290
Merged
Conversation
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>
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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