2021-02-09 Triage Log

A week of more regressions than improvements with one fairly large regression in incr-patched benchmarks introduced in a rollup. Performance regressions introduced in rollups have been a source of headache lately and something the performance team is looking to improve in the future.

Triage done by @rylev. Revision range: f6cb45ad01a4518f615926f39801996622f46179..ea098255f74923d69ea234ee526df6b9cecc3b9b

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

Regressions

Rollup of 11 pull requests #81660

  • Very large regression in instruction counts (up to 33.1% on incr-patched: println builds of cargo-check)
  • A huge performance regression in a rollup which should not happen. This seems to be happening in incr-patched benchmarks in the typeck and evaluate_obligation.
  • This points towards to #80629 as being the most likely culprit.

Add a new ABI to support cmse_nonsecure_call #81346

  • Moderate regression in instruction counts (up to 1.9% on full builds of deeply-nested-async-check)
  • Adding support for an additional ABI shouldn‘t have performance implications on rustc. Perhaps this just happens to be noise, but it’s hard to tell.

Identify unreachable subpatterns more reliably #80632

  • Moderate regression in instruction counts (up to 1.2% on full builds of match-stress-enum-check)
  • This is a regression in a benchmark specifically for pattern match which is impacted by this change. The check match query was responsible for the regression.
  • Interestingly, a performance run was done on this change during review which did not show the regressions seen here.

expand/resolve: Turn #[derive] into a regular macro attribute #79078

  • Moderate regression in instruction counts (up to 1.3% on incr-unchanged builds of derive-check)
  • This largely seems to be impacting incr-unchanged benchmarks particularly in the expand_crate and late_resolve_crate queries, and it's happening mostly in stress benchmarks. The only “real” code base impacted this is style-servo-check at 1.0% for incr-unchanged.

Use ufcs in derive(Debug) #81294

  • Moderate improvement in instruction counts (up to -3.3% on incr-patched: println builds of cargo-opt)
  • Moderate regression in instruction counts (up to 3.3% on full builds of style-servo-check)
  • This was originally labeled as a “mixed” result, but this is largely a perf regression with only a few improvements.
  • This is a correctness fix so it‘s possible that we’ll need to eat any performance regressions.
  • There is a PR open to try to address the fact that more MIR is produced, but this doesn't seem to have a positive impact on perf.

Improvements

Rollup of 14 pull requests #81678

  • Moderate improvement in instruction counts (up to -1.8% on full builds of deeply-nested-async-check)

Revert 78373 (“dont leak return value after panic in drop”) #81257

  • Large improvement in instruction counts (up to -8.6% on incr-patched: println builds of regression-31157-opt)
  • Moderate regression in instruction counts (up to 1.8% on full builds of cranelift-codegen-opt)
  • This was originally labeled as “mixed”, but it is largely a performance gain.
  • The change is to fix a bug discovered in the beta crater run.

Mixed

Fix derived PartialOrd operators #81384

  • Very large improvement in instruction counts (up to -34.0% on full builds of derive-check)
  • Moderate regression in instruction counts (up to 2.3% on incr-unchanged builds of clap-rs-check)
  • Huge gains in the derive stress benchmark but unfortunately some non-trivial regressions in clap-rs-check. This seems to be impacting type checking.

Nags requiring follow up

  • Waiting on more investigation in #81476.
  • Need to follow up on the regressions reported this week.