# 2023-07-11 Triage Log

A very quiet week with nearly no changes in compiler performance. 

Triage done by **@rylev**.
Revision range: [52d8c49..1d4f5af](https://perf.rust-lang.org/?start=52d8c490a3aabe65cdd9f2d3aed95034dd5dbad7&end=1d4f5affbdee00c816f961c227c6b28a3e725ce6&absolute=false&stat=instructions%3Au)

**Summary**:

| (instructions:u)                   | mean  | range          | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary)    | 1.1%  | [0.7%, 1.7%]   | 8     |
| Regressions ❌ <br /> (secondary)  | 2.1%  | [0.4%, 3.7%]   | 2     |
| Improvements ✅ <br /> (primary)   | -0.9% | [-1.2%, -0.5%] | 26    |
| Improvements ✅ <br /> (secondary) | -1.2% | [-1.8%, -0.2%] | 16    |
| All ❌✅ (primary)                 | -0.4% | [-1.2%, 1.7%]  | 34    |


4 Regressions, 2 Improvements, 2 Mixed; 1 of them in rollups
51 artifact comparisons made in total

#### Regressions

Rollup of 8 pull requests [#113370](https://github.com/rust-lang/rust/pull/113370) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=e4cd1610067501fa4d347eba7b18f77137dbbf48&end=5dac6b320be868f898a3c753934eabc79ff2e406&stat=instructions:u)

| (instructions:u)                   | mean | range        | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary)    | 1.3% | [0.6%, 2.1%] | 11    |
| Regressions ❌ <br /> (secondary)  | 1.6% | [1.6%, 1.6%] | 1     |
| Improvements ✅ <br /> (primary)   | -    | -            | 0     |
| Improvements ✅ <br /> (secondary) | -    | -            | 0     |
| All ❌✅ (primary)                 | 1.3% | [0.6%, 2.1%] | 11    |
- [#113320](https://github.com/rust-lang/rust/pull/113320) seemed to be the culprit but it's not clear why. Following up with the author.

Remove some unnecessary(?) normalization [#113348](https://github.com/rust-lang/rust/pull/113348) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=0d50ab77397d7278500abd22d34de0e10940b2ee&end=b112bc5529cfa8d8a9000f7a85278ece3232e579&stat=instructions:u)

| (instructions:u)                   | mean | range        | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary)    | 0.8% | [0.4%, 1.1%] | 6     |
| Regressions ❌ <br /> (secondary)  | -    | -            | 0     |
| Improvements ✅ <br /> (primary)   | -    | -            | 0     |
| Improvements ✅ <br /> (secondary) | -    | -            | 0     |
| All ❌✅ (primary)                 | 0.8% | [0.4%, 1.1%] | 6     |
- Noise as this change only touched test files


Bump version to 1.73 [#113485](https://github.com/rust-lang/rust/pull/113485) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=83964c156db1f444050a38b2498dbd0da6d5d503&end=03247fbbe87b28a991d721c4fe7cdf4e6fc5d5a3&stat=instructions:u)

| (instructions:u)                   | mean | range        | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary)    | 0.8% | [0.5%, 1.2%] | 32    |
| Regressions ❌ <br /> (secondary)  | 0.7% | [0.7%, 0.7%] | 3     |
| Improvements ✅ <br /> (primary)   | -    | -            | 0     |
| Improvements ✅ <br /> (secondary) | -    | -            | 0     |
| All ❌✅ (primary)                 | 0.8% | [0.5%, 1.2%] | 32    |
- Noise as this only was a version bump


Update debuginfo test runner to provide more useful output [#113306](https://github.com/rust-lang/rust/pull/113306) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=1861088f9088344a6b821abf335678d7fe037872&end=ba37a69d30fc6ffc0c2589eb59e936c261b36e76&stat=instructions:u)

| (instructions:u)                   | mean | range        | count |
|:----------------------------------:|:----:|:------------:|:-----:|
| Regressions ❌ <br /> (primary)    | -    | -            | 0     |
| Regressions ❌ <br /> (secondary)  | 5.6% | [5.6%, 5.6%] | 1     |
| Improvements ✅ <br /> (primary)   | -    | -            | 0     |
| Improvements ✅ <br /> (secondary) | -    | -            | 0     |
| All ❌✅ (primary)                 | -    | -            | 0     |
- Noise as this change only touched test files


#### Improvements

Move `TyCtxt::mk_x` to `Ty::new_x` where applicable [#113377](https://github.com/rust-lang/rust/pull/113377) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=b112bc5529cfa8d8a9000f7a85278ece3232e579&end=4dd1719b3406d80f539d2f49e9842f3563908632&stat=instructions:u)

| (instructions:u)                   | mean  | range          | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary)    | -     | -              | 0     |
| Regressions ❌ <br /> (secondary)  | -     | -              | 0     |
| Improvements ✅ <br /> (primary)   | -0.7% | [-1.1%, -0.4%] | 10    |
| Improvements ✅ <br /> (secondary) | -     | -              | 0     |
| All ❌✅ (primary)                 | -0.7% | [-1.1%, -0.4%] | 10    |


Port PGO/LTO/BOLT optimized build pipeline to Rust [#112235](https://github.com/rust-lang/rust/pull/112235) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=f05d743c204a3c433fb5c2976691fb4eb5c7a530&end=1861088f9088344a6b821abf335678d7fe037872&stat=instructions:u)

| (instructions:u)                   | mean  | range          | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary)    | -     | -              | 0     |
| Regressions ❌ <br /> (secondary)  | 0.3%  | [0.3%, 0.3%]   | 1     |
| Improvements ✅ <br /> (primary)   | -0.9% | [-1.3%, -0.5%] | 38    |
| Improvements ✅ <br /> (secondary) | -0.8% | [-2.3%, -0.3%] | 11    |
| All ❌✅ (primary)                 | -0.9% | [-1.3%, -0.5%] | 38    |


#### Mixed

perform TokenStream replacement in-place when possible in expand_macro [#113270](https://github.com/rust-lang/rust/pull/113270) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=7cc3da05f99fbc89782fc6cb7e207fa11aa6add5&end=921f669749a57ab5936721fdd93b2da57b581381&stat=instructions:u)

| (instructions:u)                   | mean  | range          | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary)    | 0.6%  | [0.6%, 0.7%]   | 2     |
| Regressions ❌ <br /> (secondary)  | 0.3%  | [0.3%, 0.3%]   | 3     |
| Improvements ✅ <br /> (primary)   | -     | -              | 0     |
| Improvements ✅ <br /> (secondary) | -0.3% | [-0.3%, -0.3%] | 2     |
| All ❌✅ (primary)                 | 0.6%  | [0.6%, 0.7%]   | 2     |
- Might be noise, but otherwise too small to be worth the investigation.


Sync portable-simd to 2023 July 07 [#113437](https://github.com/rust-lang/rust/pull/113437) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=1a449dcfd25143f7e1f6b6f5ddf1c12af361e2ff&end=fd68a6ded951bd7b852ab8107007f7145e3ad6ec&stat=instructions:u)

| (instructions:u)                   | mean  | range          | count |
|:----------------------------------:|:-----:|:--------------:|:-----:|
| Regressions ❌ <br /> (primary)    | -     | -              | 0     |
| Regressions ❌ <br /> (secondary)  | 1.6%  | [1.6%, 1.6%]   | 1     |
| Improvements ✅ <br /> (primary)   | -1.0% | [-1.5%, -0.6%] | 11    |
| Improvements ✅ <br /> (secondary) | -1.0% | [-1.7%, -0.6%] | 4     |
| All ❌✅ (primary)                 | -1.0% | [-1.5%, -0.6%] | 11    |
- Numbers were declared acceptable as it potentially could have been much worse.
