A good week: The regressions were small; some have follow-up PR's in flight to address them; and we saw a big improvement from PR #97345, which adds more fast paths for quickly exiting comparisons between two types (such as BitsImpl<M>
and BitsImpl<N>
for const integers M
and N
). This improved compile-times for the bitmaps
benchmark by 50-65% in some cases (including the trunk nalgebra
, according to independent investigation from nnethercote). That same PR had more modest improvements (1% to 2%) to the compile-times for a number of other crates. Many thanks to lcnr and nnethercote for some excellent work here!
Triage done by @pnkfelix. Revision range: 43d9f385..0a43923a
Summary:
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 0.8% | 0.9% | 3 |
Improvements π (primary) | -4.0% | -65.9% | 227 |
Improvements π (secondary) | -2.0% | -7.7% | 217 |
All πΏπ (primary) | -4.0% | -65.9% | 227 |
3 Regressions, 1 Improvements, 9 Mixed; 0 of them in rollups 59 artifact comparisons made in total
Proc macro tweaks #97004 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.2% | 0.2% | 1 |
Regressions πΏ (secondary) | 0.6% | 1.5% | 10 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | N/A | N/A | 0 |
All πΏπ (primary) | 0.2% | 0.2% | 1 |
Buffer<T>
non-generic (its solely instantiated at u8
) caused a performance regression.#[inline]
annotations.rustdoc: include impl generics / self in search index #96652 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.5% | 1.0% | 3 |
Regressions πΏ (secondary) | 1.1% | 1.1% | 3 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | N/A | N/A | 0 |
All πΏπ (primary) | 0.5% | 1.0% | 3 |
Move things to rustc_type_ir
#97287 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.5% | 0.7% | 9 |
Regressions πΏ (secondary) | 1.1% | 1.1% | 3 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | N/A | N/A | 0 |
All πΏπ (primary) | 0.5% | 0.7% | 9 |
bitmaps
(in a variety of contexts), and the PR author said better to take that perf hit and deal with it later.bitmaps
and unicode-normalization
are affected, regressing by 0.35% to 0.70%.Add suggestion for relaxing static lifetime bounds on dyn trait impls in NLL #97284 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | N/A | N/A | 0 |
Improvements π (primary) | -0.2% | -0.2% | 1 |
Improvements π (secondary) | -5.3% | -5.9% | 6 |
All πΏπ (primary) | -0.2% | -0.2% | 1 |
CallArgument
and that had fallout that ended up being positive overall (despite our intuition being that it would hurt performance due to the increase in size).add a deep fast_reject routine #97345 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 0.9% | 1.6% | 10 |
Improvements π (primary) | -11.0% | -65.8% | 45 |
Improvements π (secondary) | -0.5% | -0.9% | 12 |
All πΏπ (primary) | -11.0% | -65.8% | 45 |
Move various checks to typeck so them failing causes the typeck result to get tainted #96046 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 0.9% | 1.1% | 4 |
Improvements π (primary) | -0.3% | -0.4% | 4 |
Improvements π (secondary) | -0.3% | -0.3% | 24 |
All πΏπ (primary) | -0.3% | -0.4% | 4 |
Update jemalloc to v5.3 #96790 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 0.3% | 0.3% | 1 |
Improvements π (primary) | -0.9% | -6.2% | 212 |
Improvements π (secondary) | -1.1% | -3.2% | 191 |
All πΏπ (primary) | -0.9% | -6.2% | 212 |
Split dead store elimination off dest prop #97158 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.5% | 1.3% | 15 |
Regressions πΏ (secondary) | 0.6% | 2.3% | 12 |
Improvements π (primary) | -0.4% | -1.9% | 50 |
Improvements π (secondary) | -0.6% | -1.3% | 33 |
All πΏπ (primary) | -0.2% | -1.9% | 65 |
Try to cache region_scope_tree as a query #97383 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 1.0% | 1.0% | 3 |
Improvements π (primary) | -1.7% | -4.7% | 98 |
Improvements π (secondary) | -2.4% | -7.7% | 43 |
All πΏπ (primary) | -1.7% | -4.7% | 98 |
proc_macro: don't pass a client-side function pointer through the server. #97461 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.5% | 0.5% | 2 |
Regressions πΏ (secondary) | N/A | N/A | 0 |
Improvements π (primary) | -0.4% | -0.8% | 11 |
Improvements π (secondary) | -2.6% | -5.4% | 10 |
All πΏπ (primary) | -0.3% | -0.8% | 13 |
serde_derive
(debug), which regressed by ~0.5% for the full and incr-full variants.codegen_module
Replace #[default_method_body_is_const]
with #[const_trait]
#96964 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.2% | 0.3% | 9 |
Regressions πΏ (secondary) | 0.2% | 0.3% | 3 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | -1.1% | -1.1% | 3 |
All πΏπ (primary) | 0.2% | 0.3% | 9 |
improve format impl for literals #97480 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | 0.4% | 0.5% | 4 |
Regressions πΏ (secondary) | N/A | N/A | 0 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | -1.5% | -1.5% | 1 |
All πΏπ (primary) | 0.4% | 0.5% | 4 |
format!("literal")
will compile into the same code as "literal".to_owned()
.bitmaps
.bitmaps
is due to format!("literal")
being totally unused in that code; all instances of format!
there take an additional argument. So its possible that the extra code to check about whether to use the fast-path is slowing things down there.format!
, but most of the expanded code is going to be dominated by all the impl
blocks, not the relatively few format!
instances. (Unless I massively misunderstand how the macros and/or codegen and/or inlining end up linking up here.)errors: simplify referring to fluent attributes #97357 (Comparison Link)
mean | max | count | |
---|---|---|---|
Regressions πΏ (primary) | N/A | N/A | 0 |
Regressions πΏ (secondary) | 0.4% | 0.6% | 9 |
Improvements π (primary) | N/A | N/A | 0 |
Improvements π (secondary) | -0.4% | -0.5% | 4 |
All πΏπ (primary) | N/A | N/A | 0 |
ItemLikeVisitor
traitcore::ptr::Unique
on top of NonNull
parse_tt
: a few more tweaksNonterminal