blob: 84477e210ae3455c190e763732dd7c7d5043a1bc [file] [log] [blame] [view] [edit]
# 2023-07-26 Triage Log
A relatively light week with respect to performance changes. The one major
regressing PR was reverted (for other reasons), and we saw some very nice gains
on compile-times from (1.) changes to our codegen-unit merging logic and from
(2.) changes to the stdlib slice iterators encoding its non-null guarantees
directly, allowing the removal of a call to the `assume` intrinsic.
Triage done by **@pnkfelix**.
Revision range: [6b9236ed..0308df23](https://perf.rust-lang.org/?start=6b9236ed5a58879969ddcf4c35a6a24f6260e979&end=0308df23e621e783e31a27ca5beaa01b9df60d4a&absolute=false&stat=instructions%3Au)
**Summary**:
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 1.4% | [0.6%, 10.2%] | 27 |
| Regressions ❌ <br /> (secondary) | 1.1% | [0.3%, 2.9%] | 19 |
| Improvements ✅ <br /> (primary) | -2.2% | [-8.3%, -0.4%] | 21 |
| Improvements ✅ <br /> (secondary) | -1.6% | [-2.0%, -1.2%] | 2 |
| All ❌✅ (primary) | -0.2% | [-8.3%, 10.2%] | 48 |
1 Regressions, 1 Improvements, 4 Mixed; 1 of them in rollups
35 artifact comparisons made in total
#### Regressions
Prototype: Add unstable `-Z reference-niches` option [#113166](https://github.com/rust-lang/rust/pull/113166) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=1e6c09a803fd543a98bfbe1624d697a55300a786&end=557359f92512ca88b62a602ebda291f17a953002&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.7% | [0.3%, 1.1%] | 19 |
| Regressions ❌ <br /> (secondary) | 1.0% | [0.3%, 1.2%] | 4 |
| Improvements ✅ <br /> (primary) | - | - | 0 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | 0.7% | [0.3%, 1.1%] | 19 |
* reverted in PR #113946
* marked as triaged
#### Improvements
Inline overlap based CGU merging [#113777](https://github.com/rust-lang/rust/pull/113777) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=903e279f468590fa3425f8aff7f3d61a5a873dbb&end=0d6a9b2bf7f823ed563ca3a75392ba9bf9ff1566&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 1.2% | [1.2%, 1.2%] | 1 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -1.8% | [-4.5%, -0.3%] | 11 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | -1.6% | [-4.5%, 1.2%] | 12 |
this improved instruction-counts for 9 opt-full primary benchmarks. (The one regression was to regex-1.5.5 opt-full, by -1.15%; but the wins elsewhere pay for this.)
As noted by @nnethercote , this results in nearly 10second reduction in bootstrap time (i.e. -1.495%, no small feat at all!)
#### Mixed
Turn copy into moves during DSE. [#113758](https://github.com/rust-lang/rust/pull/113758) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=6b53175b5d8558b69f5f46ce969fe42fb457e01b&end=06a53ddc0bd3a50f9bcf2f7c373011dc7869f59f&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 9.4% | [9.4%, 9.4%] | 1 |
| Regressions ❌ <br /> (secondary) | 0.6% | [0.6%, 0.6%] | 1 |
| Improvements ✅ <br /> (primary) | -1.0% | [-2.1%, -0.2%] | 14 |
| Improvements ✅ <br /> (secondary) | -0.8% | [-1.3%, -0.2%] | 2 |
| All ❌✅ (primary) | -0.3% | [-2.1%, 9.4%] | 15 |
* regression is to webrender-2022 opt incr-patched, (by 9.4%, as you can see from the above)
* from the flamegraphs, seems like `codegen_module_perform_lto` went from 8.6 seconds to 9.6 seconds, with half of the growth in `LLVM_lto_optimize`, and half in `LLVM_module_codegen_emit_obj`.
* not marking as triaged for now.
Rollup of 7 pull requests [#113890](https://github.com/rust-lang/rust/pull/113890) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=06a53ddc0bd3a50f9bcf2f7c373011dc7869f59f&end=092e4f46be168ab24d53e4141086b2cf04822b8e&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | - | - | 0 |
| Regressions ❌ <br /> (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements ✅ <br /> (primary) | -0.3% | [-0.3%, -0.2%] | 4 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | -0.3% | [-0.3%, -0.2%] | 4 |
* that doesn't seem worth dissecting
* marking as triaged
* (the specific secondary is tt-muncher check incr-unchanged 0.23%)
Always const-prop scalars and scalar pairs [#113858](https://github.com/rust-lang/rust/pull/113858) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=399b068235ceea440540539b3bfd1aeb82214a28&end=e2a7ba2771a70439cd546fdae676abe11dacf6f9&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 0.8% | [0.3%, 3.3%] | 42 |
| Regressions ❌ <br /> (secondary) | 0.7% | [0.2%, 1.1%] | 19 |
| Improvements ✅ <br /> (primary) | -0.6% | [-1.3%, -0.2%] | 6 |
| Improvements ✅ <br /> (secondary) | - | - | 0 |
| All ❌✅ (primary) | 0.6% | [-1.3%, 3.3%] | 48 |
* we didn't anticipate such a high impact to the instruction-counts; the trial run said there were two primary regressions here, not 42.
* exa-0.10.1 opt-full regressed by 3.34%
* five various bitmaps-3.1.0 profiles/scenarios regressed by 1.01% to 1.21%
* ripgrep-13.0.0 check-incr-unchanged regressed by 1.01%
* bunch of others that regressed by a little less than 1%... seems not great.
* not marking as triaged.
Get `!nonnull` metadata on slice iterators, without `assume`s [#113344](https://github.com/rust-lang/rust/pull/113344) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=e2a7ba2771a70439cd546fdae676abe11dacf6f9&end=c720a9cd1280d24838d0f649538dcd0e4352692c&stat=instructions:u)
| (instructions:u) | mean | range | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary) | 8.3% | [8.3%, 8.3%] | 1 |
| Regressions ❌ <br /> (secondary) | - | - | 0 |
| Improvements ✅ <br /> (primary) | -1.1% | [-8.3%, -0.5%] | 63 |
| Improvements ✅ <br /> (secondary) | -0.7% | [-1.1%, -0.3%] | 15 |
| All ❌✅ (primary) | -1.0% | [-8.3%, 8.3%] | 64 |
* cranelift-codegen-0.82.1 opt-full regressed by 8.31%
* a slew of other benchmarks improved (regex-1.5.5 incr-patched by -8.28%, bitmaps incr by 1.2-1.4%, the rest by -1% or less)
* overall, a nice win. That's enough to let me mark this as triaged.
#### Untriaged Pull Requests
- [#114011 interpret: Unify projections for MPlaceTy, PlaceTy, OpTy](https://github.com/rust-lang/rust/pull/114011)
- [#114004 Add `riscv64gc-unknown-hermit` target](https://github.com/rust-lang/rust/pull/114004)
- [#113973 match on chars instead of &strs for .split() or .strip_prefix()](https://github.com/rust-lang/rust/pull/113973)
- [#113965 Fix test panics for submodule of book is not updated](https://github.com/rust-lang/rust/pull/113965)
- [#113890 Rollup of 7 pull requests](https://github.com/rust-lang/rust/pull/113890)
- [#113858 Always const-prop scalars and scalar pairs](https://github.com/rust-lang/rust/pull/113858)
- [#113758 Turn copy into moves during DSE.](https://github.com/rust-lang/rust/pull/113758)
- [#113485 Bump version to 1.73](https://github.com/rust-lang/rust/pull/113485)
- [#113476 Reimplement C-str literals](https://github.com/rust-lang/rust/pull/113476)
- [#113370 Rollup of 8 pull requests](https://github.com/rust-lang/rust/pull/113370)
- [#113344 Get `!nonnull` metadata on slice iterators, without `assume`s](https://github.com/rust-lang/rust/pull/113344)
- [#113320 Add some extra information to opaque type cycle errors](https://github.com/rust-lang/rust/pull/113320)
- [#113306 Update debuginfo test runner to provide more useful output](https://github.com/rust-lang/rust/pull/113306)
- [#113304 Upgrade to indexmap 2.0.0](https://github.com/rust-lang/rust/pull/113304)
- [#113270 perform TokenStream replacement in-place when possible in expand_macro](https://github.com/rust-lang/rust/pull/113270)
- [#113166 Prototype: Add unstable `-Z reference-niches` option](https://github.com/rust-lang/rust/pull/113166)
- [#113057 Rollup of 2 pull requests](https://github.com/rust-lang/rust/pull/113057)
- [#112963 Stop bubbling out hidden types from the eval obligation queries](https://github.com/rust-lang/rust/pull/112963)
- [#112882 Rewrite `UnDerefer`](https://github.com/rust-lang/rust/pull/112882)
- [#112420 Rollup of 4 pull requests](https://github.com/rust-lang/rust/pull/112420)
- [#112157 Resurrect: rustc_target: Add alignment to indirectly-passed by-value types, correcting the alignment of byval on x86 in the process.](https://github.com/rust-lang/rust/pull/112157)
- [#112083 Make `TrustedStep` require `Copy`](https://github.com/rust-lang/rust/pull/112083)
- [#112016 Rollup of 6 pull requests](https://github.com/rust-lang/rust/pull/112016)
- [#112001 Enable MatchBranchSimplification](https://github.com/rust-lang/rust/pull/112001)
- [#111869 Rollup of 6 pull requests](https://github.com/rust-lang/rust/pull/111869)
- [#111850 Specialize `StepBy<Range<{integer}>>`](https://github.com/rust-lang/rust/pull/111850)
- [#111813 MIR: opt-in normalization of `BasicBlock` and `Local` numbering](https://github.com/rust-lang/rust/pull/111813)
- [#111623 move `super_relate_consts` hack to `normalize_param_env_or_error`](https://github.com/rust-lang/rust/pull/111623)
- [#111524 `ascii::Char`-ify the escaping code in `core`](https://github.com/rust-lang/rust/pull/111524)
- [#111425 Populate effective visibilities in `rustc_privacy` (take 2)](https://github.com/rust-lang/rust/pull/111425)