2022-02-24 Triage Log

A relatively quiet week with improvements largely outweighing regressions. On the regressions side, doc performance has worsened somewhat significantly most likely introduced by adding more docs to blanket impls. On the improvement side, LLVM 14 allowed for an optimization the significantly improves codegen performance.

Triage done by @rylev. Revision range: a240ccd81c74c105b6f5fe84c46f8d36edb7e306..1204400ab8da9830f6f77a5e40e7ad3ea459676a

3 Regressions, 2 Improvements, 7 Mixed; 3 of them in rollups 38 comparisons made in total

Regressions

Rollup of 8 pull requests #94072

  • Average relevant regression: 11.3%
  • Largest regression in instruction counts: 157.0% on full builds of stm32f4 doc
  • The regressions are all in doc runs but the largest are quite severe.
  • The most likely culprit is #89869 which adds documentation to many different blanket impls.
  • Left a comment to investigate.

Rollup of 9 pull requests #94103

  • Average relevant regression: 1.1%
  • Largest regression in instruction counts: 2.1% on full builds of deeply-nested-async check
  • Almost all of the regressions are in stress tests so the actual impact on users is likely not that large
  • None of the rolled up PRs seem to be suspicious so it's hard to know where to begin

Fix a layout possible miscalculation in alloc::RawVec #83706

  • Average relevant regression: 0.5%
  • Largest regression in instruction counts: 1.2% on incr-unchanged builds of deeply-nested-async debug
  • A small regression would seem likely after this change since more work (e.g., checked multiplication) is being done in RawVec which is used quite a lot. I am, however, unsure whether the actual regression we're seeing here is expected
  • Left a comment for investigation.

Improvements

Rollup of 7 pull requests #94254

  • Average relevant improvement: -0.8%
  • Largest improvement in instruction counts: -0.8% on incr-unchanged builds of externs opt

Reapply cg_llvm: fewer_names in uncached_llvm_type #94107

  • Average relevant improvement: -7.8%
  • Largest improvement in instruction counts: -61.2% on incr-patched: println builds of webrender-wrench opt

Mixed

Upgrade to LLVM 14 #93577

  • Average relevant regression: 0.7%
  • Average relevant improvement: -1.3%
  • Largest improvement in instruction counts: -3.8% on full builds of projection-caching check
  • Largest regression in instruction counts: 3.0% on incr-patched: add static arr item builds of coercions debug
  • Upgrading LLVM is always likely to produce performance changes. Luckily the perf improvements seem to outweigh the perf regressions considerably both in number and magnitude.

Revert #91403 #94088

  • Average relevant regression: 1.1%
  • Average relevant improvement: -1.5%
  • Largest improvement in instruction counts: -1.7% on full builds of issue-88862 check
  • Largest regression in instruction counts: 1.7% on incr-unchanged builds of clap-rs check
  • The perf regressions here are relatively minor, and this change fixes a correctness issue, so I think it's fine to let it through.

Guard against unwinding in cleanup code #92911

  • Average relevant regression: 0.9%
  • Average relevant improvement: -1.6%
  • Largest improvement in instruction counts: -3.4% on incr-full builds of syn opt
  • Largest regression in instruction counts: 3.7% on full builds of ripgrep opt
  • A relatively large regression considering the change is meant to protect against a rare occurrence (double unwind).
  • Left a comment asking for justification.

Allow inlining of ensure_sufficient_stack() #93934

  • Average relevant regression: 0.9%
  • Average relevant improvement: -0.8%
  • Largest improvement in instruction counts: -1.0% on incr-patched: add vec item builds of deep-vector opt
  • Largest regression in instruction counts: 0.9% on incr-unchanged builds of ctfe-stress-4 check
  • This was an attempt at an optimization that proved fruitful before LLVM 14 was merged. Now the regressions and improvements weigh each other out.

safely transmute<&List<Ty<'tcx>>, &List<GenericArg<'tcx>>> #93505

  • Average relevant regression: 1.2%
  • Average relevant improvement: -0.6%
  • Largest improvement in instruction counts: -0.8% on incr-full builds of ucd check
  • Largest regression in instruction counts: 2.7% on full builds of deeply-nested-async check
  • This led to a larger regression than was seen before the PR was merged.
  • The author is now looking into the perf

Simplify rustc_serialize by dropping support for decoding into JSON #93839

  • Average relevant regression: 0.8%
  • Average relevant improvement: -0.5%
  • Largest improvement in instruction counts: -0.5% on incr-unchanged builds of ctfe-stress-4 check
  • Largest regression in instruction counts: 1.0% on full builds of externs opt
  • This change was justified: The performance changes to the compiler are pretty much a wash, but this does have a good impact on compiler bootstrapping (~6 seconds).

Introduce ChunkedBitSet and use it for some dataflow analyses. #93984

  • Average relevant regression: 1.0%
  • Average relevant improvement: -3.8%
  • Largest improvement in instruction counts: -5.3% on full builds of keccak debug
  • Largest regression in instruction counts: 6.0% on full builds of clap-rs check
  • While the regressions look minor they are likely even less of an issue due to this particular optimization likely helping wall-time and definitely helping max RSS while hurting instruction counts.
  • For more detail see the justification.

Untriaged Pull Requests