# 2021-02-02 Triage Log

Another week dominated by rollups, most of which had relatively small changes
with unclear causes embedded. Overall no major changes in performance this week.

Triage done by **@simulacrum**.
Revision range: [1483e67addd37d9bd20ba3b4613b678ee9ad4d68..f6cb45ad01a4518f615926f39801996622f46179](https://perf.rust-lang.org/?start=1483e67addd37d9bd20ba3b4613b678ee9ad4d68&end=f6cb45ad01a4518f615926f39801996622f46179&absolute=false&stat=instructions%3Au)

2 Regressions, 1 Improvements, 1 Mixed
3 of them in rollups

#### Regressions

Rollup of 12 pull requests [#81625](https://github.com/rust-lang/rust/issues/81625)
- Moderate regression in [instruction counts](https://perf.rust-lang.org/compare.html?start=70b18bc2cbac4712020019f5bf57c00905373205&end=02b85d722050d61b40ae9746b3bac54ab55b1056&stat=instructions:u) (up to 3.3% on `incr-unchanged` builds of `match-stress-enum-check`)
- Unclear responsible PR. Nothing in this rollup stands out, and self-profile
  information does not reveal obvious causes.

Add visitors for checking #[inline] [#80641](https://github.com/rust-lang/rust/issues/80641)
- Moderate regression in [instruction counts](https://perf.rust-lang.org/compare.html?start=02b85d722050d61b40ae9746b3bac54ab55b1056&end=d4e3570db4c007089035b833cc20c7fc2f8cb32f&stat=instructions:u) (up to 1.7% on `incr-unchanged` builds of `unicode_normalization-check`)
- Primarily limited to incremental benchmarks; we are simply visiting more nodes
  for this check, so it is unsurprising that we take a performance hit.

#### Improvements

Rollup of 13 pull requests [#81461](https://github.com/rust-lang/rust/issues/81461)
- Large improvement in [instruction counts](https://perf.rust-lang.org/compare.html?start=e32f372c4203b2527221b313cf63b05ea178e8a9&end=0e190206e2ff0c13d64701d9b4145bf89a2d0cab&stat=instructions:u) (up to -5.7% on `incr-unchanged` builds of `deeply-nested-async-check`)
- Unknown causes; no major investigation.

#### Mixed

Rollup of 10 pull requests [#81493](https://github.com/rust-lang/rust/issues/81493)
- Moderate regression in [instruction counts](https://perf.rust-lang.org/compare.html?start=b05fd2a15de7c9e50110e9ed4c01f114be215739&end=74500b99783d126e330184f0392a78f8b93b73ef&stat=instructions:u) (up to 1.0% on `incr-patched: b9b3e592dd cherry picked` builds of `style-servo-debug`)
- Also a moderate improvement in instruction counts, around 0.3%.
- Not clear what is responsible, but the regression is very limited to a few
  crates and incremental, so not spending too much time investigating.

#### Nags requiring follow up

From last week:

- Deprecate in future regression [#80958](https://github.com/rust-lang/rust/pull/80958#issuecomment-767837811)
    - Some commentary in response but seems likely this will not be addressed
      one way or another.
- Waiting on [response](https://github.com/rust-lang/rust/pull/80919#issuecomment-767854932) to inquiry.
    - Some investigation in [#81476](https://github.com/rust-lang/rust/issues/81476), potentially regression was down to a bugfix.
- Regression in prevent query cycles in the MIR inliner - expected? [#68828](https://github.com/rust-lang/rust/pull/68828#issuecomment-767872361)
    - No updates yet from @oli-obk on their investigation.
