2023-06-06 Triage Log

This week was a bunch of improvements, largely driven by cutting std debuginfo in #110221 and a few MIR or codegen optimizations. No pure regressions landed this week!

Triage done by @simulacrum. Revision range: 1221e43bdf413f7c405e9b17ef19d76c88222098..adc719d7147d5e2578ce08e0b4504be44650256e

Summary:

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.6%[0.3%, 2.0%]11
Regressions ❌
(secondary)
0.5%[0.3%, 1.0%]9
Improvements ✅
(primary)
-1.9%[-17.4%, -0.2%]103
Improvements ✅
(secondary)
-5.2%[-17.4%, -0.2%]116
All ❌✅ (primary)-1.7%[-17.4%, 2.0%]114

0 Regressions, 1 Improvements, 12 Mixed; 2 of them in rollups 79 artifact comparisons made in total

Regressions

No regressions this week.

Improvements

Greatly decrease the size of rustc_driver.so when debuginfo is enabled #110221 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-8.8%[-17.6%, -0.5%]17
Improvements ✅
(secondary)
-7.5%[-17.2%, -0.2%]72
All ❌✅ (primary)-8.8%[-17.6%, -0.5%]17

This PR compresses and cuts some debuginfo from the shipped std library, somewhat unintentionally. This might be something we roll back if we get regression reports about it - not clear whether this changes behavior in a meaningful way for anyone.

Mixed

Rollup of 6 pull requests #112016 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.5%[0.2%, 1.0%]14
Regressions ❌
(secondary)
0.3%[0.3%, 0.5%]6
Improvements ✅
(primary)
-0.7%[-1.1%, -0.3%]2
Improvements ✅
(secondary)
-0.5%[-0.5%, -0.5%]1
All ❌✅ (primary)0.3%[-1.1%, 1.0%]16

Roughly scattered changes, many of which are in high-variance benchmarks.

Enable MatchBranchSimplification #112001 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.5%[0.3%, 0.7%]5
Regressions ❌
(secondary)
0.6%[0.2%, 0.8%]10
Improvements ✅
(primary)
-0.3%[-0.4%, -0.2%]4
Improvements ✅
(secondary)
-0.3%[-0.3%, -0.3%]1
All ❌✅ (primary)0.2%[-0.4%, 0.7%]9

Scattered changes, mostly a wash. Optimization targets particular code patterns which don't occur that often in rustc most likely.

MIR: opt-in normalization of BasicBlock and Local numbering #111813 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.3%[0.3%, 0.3%]1
Regressions ❌
(secondary)
0.7%[0.3%, 1.2%]8
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.0%[-1.5%, -0.3%]7
All ❌✅ (primary)0.3%[0.3%, 0.3%]1

Mostly noise, probably. The new normalization is off by default.

Inline derived hash #111963 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.3%[0.3%, 0.3%]1
Regressions ❌
(secondary)
0.5%[0.2%, 0.6%]15
Improvements ✅
(primary)
-0.3%[-0.6%, -0.2%]16
Improvements ✅
(secondary)
-0.7%[-1.4%, -0.3%]21
All ❌✅ (primary)-0.2%[-0.6%, 0.3%]17

Improvements outweigh regressions.

Use Cow in {D,Subd}iagnosticMessage. #111748 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.7%[0.6%, 0.8%]5
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-0.5%[-0.8%, -0.3%]10
All ❌✅ (primary)--0

Regressions limited to secondary benchmarks, and a good portion of them are bimodal benchmarks. No further investigation warranted.

Make TrustedStep require Copy #112083 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.2%[0.2%, 0.2%]1
Regressions ❌
(secondary)
0.5%[0.2%, 0.7%]5
Improvements ✅
(primary)
-1.1%[-1.1%, -1.1%]1
Improvements ✅
(secondary)
-1.2%[-3.5%, -0.4%]13
All ❌✅ (primary)-0.4%[-1.1%, 0.2%]2

Improvements clearly outweigh regressions.

move super_relate_consts hack to normalize_param_env_or_error #111623 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.3%[0.2%, 0.6%]8
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-0.3%[-0.3%, -0.2%]2
Improvements ✅
(secondary)
-2.0%[-2.2%, -2.0%]6
All ❌✅ (primary)0.2%[-0.3%, 0.6%]10

Most likely inlining or other codegen changes; roughly neutral change overall.

Enable ScalarReplacementOfAggregates in optimized builds #112002 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.4%[0.2%, 0.9%]6
Regressions ❌
(secondary)
0.8%[0.3%, 2.3%]15
Improvements ✅
(primary)
-0.3%[-0.9%, -0.2%]13
Improvements ✅
(secondary)
-1.2%[-2.9%, -0.3%]3
All ❌✅ (primary)-0.1%[-0.9%, 0.9%]19

SROA benefits cranelift codegen and has no significant impact on runtimes, so enabling by default makes sense. It also helps with MatchBranchSimplification, enabled in a separate PR.

Enable ConstGoto and SeparateConstSwitch passes by default #112040 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
2.6%[2.6%, 2.6%]1
Regressions ❌
(secondary)
0.2%[0.2%, 0.2%]1
Improvements ✅
(primary)
-0.5%[-1.1%, -0.2%]72
Improvements ✅
(secondary)
-0.8%[-2.0%, -0.2%]33
All ❌✅ (primary)-0.4%[-1.1%, 2.6%]73

More MIR opt enablement -- some regressions here, but improvements are much more wide-ranging than the regressions.

Rollup of 7 pull requests #112253 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
0.5%[0.4%, 0.6%]6
Regressions ❌
(secondary)
0.9%[0.4%, 1.3%]9
Improvements ✅
(primary)
-0.4%[-0.4%, -0.4%]1
Improvements ✅
(secondary)
-0.3%[-0.4%, -0.2%]4
All ❌✅ (primary)0.4%[-0.4%, 0.6%]7

Possibly just noise/bimodality given benchmarks and lack of significant PRs in this rollup. Not investigating further.

Only check inlining counter after recursing. #112240 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.1%, 0.3%]5
Improvements ✅
(primary)
-0.3%[-0.5%, -0.2%]6
Improvements ✅
(secondary)
-0.5%[-1.0%, -0.3%]11
All ❌✅ (primary)-0.3%[-0.5%, -0.2%]6

Changes in inlining, overall a positive despite a few regressions.

Use load+store instead of memcpy for small integer arrays #111999 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
2.2%[0.1%, 5.7%]3
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-0.3%[-0.3%, -0.3%]4
All ❌✅ (primary)--0

No clear impact on rustc workloads, but may benefit others.