# 2020-07-28 Triage Log

See the [README](README.md) for details on how this log was gathered.

Triage done by njn. Revision range: [71384101ea3b030b80f7def80a37f67e148518b0..efc02b03d18b0cbaa55b1e421d792f70a39230b2](https://perf.rust-lang.org/?start=71384101ea3b030b80f7def80a37f67e148518b0&end=efc02b03d18b0cbaa55b1e421d792f70a39230b2&absolute=false&stat=instructions%3Au)

2 regressions, 1 improvement, none of them on rollups.

Regressions
- [Serialize span hygiene data #72121](https://github.com/rust-lang/rust/pull/72121#issuecomment-664685450)
  ([instructions](https://perf.rust-lang.org/compare.html?start=c70986264b4d534e35992fc64ecd9139700b5071&end=fa36f960687c41caf5b260ab7610ebd83a7860dd&stat=instructions:u)):
  Up to 3.5% losses on numerous benchmarks. This was expected, and the author and reviewer deemed it reasonable for the improvement in error messages.
- [Polymorphization #69749](https://github.com/rust-lang/rust/pull/69749#issuecomment-664688297)
  ([instructions](https://perf.rust-lang.org/compare.html?start=734233d29771869f824d8ddbaddabb90b3b68e03&end=b52522ade1f6979a35b24087dadcf5ba5c981cbe&stat=instructions:u)):
  Up to 1.8% losses (ignoring the noisy `script-servo-2-opt` results), which was expected. (Hopefully extensions to this change will allow for compile time improvements in the future.) This feature was later disabled due to correctness issues, but the disabling was [performance neutral](https://github.com/rust-lang/rust/pull/74633#issuecomment-664691511), oddly enough.

Improvements
- [Revert libbacktrace -> gimli #74613](https://github.com/rust-lang/rust/pull/74613#issuecomment-664682974)
  ([instructions](https://perf.rust-lang.org/compare.html?start=2bbfa02b1b15974d5772b520aa027bf79f8c248e&end=371917ab218de72a625227ba6eed7e84e610a058&stat=instructions:u)):
  Up to 25.5% wins across many benchmarks. A reversion of one of last week's regressions. This PR may re-land because it's a big functional improvement and the regressions are mostly on very short-running benchmarks. If it does it will be after consideration and with intention.

