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) | mean | range | count |
---|---|---|---|
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
No regressions this week.
Greatly decrease the size of rustc_driver.so
when debuginfo is enabled #110221 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
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.
Rollup of 6 pull requests #112016 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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.