T-compiler Meeting Agenda 2022-08-25
Announcements
- Compiler Team Planning meeting at time:2022-08-26T10:00:00-04:00
- Reminder: if you see a PR/issue that seems like there might be legal implications due to copyright/IP/etc, please let the Core team know (or at least message @pnkfelix or @Wesley Wiser so we can pass it along).
Other WG meetings
- Types Team: Planning/Deep-Dive meeting at time:2022-08-26T09:00:00-04:00
- wg-rls-2.0 steering meeting at time:2022-08-29T11:00:00-04:00
- Async WG triage meeting at time:2022-08-29T11:30:00-04:00
- [wg-traits] GATs Sync at time:2022-08-29T16:00:00-04:00
- [Types team] Hack session: Advanced subtyping at time:2022-08-31T09:00:00-04:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Use RangeInclusive in SpanData instead of lo/hi” compiler-team#534
- “Allow informational -Z flags on stable compiler” compiler-team#542
- " Promote
i586-unknown-linux-gnu
to Tier 2 with Host Tools " compiler-team#543 - “Lower baseline expectations for i686 unix-like targets” compiler-team#548
- Old MCPs (not seconded, take a look)
- “Arbitrary annotations in compiletest” compiler-team#513 (last review activity: 3 months ago)
- any pending concerns?
- “Add support for the LoongArch architecture” compiler-team#518 (last review activity: 2 months ago)
- MCP proponents are working on implementing this in rust#96971 (with some comments from @Wesley Wiser), rustup PR rustup#3052 and others. Was the MCP implicitely seconded?
- “Add
#[alias]
attribute to allow symbol aliasing” compiler-team#526 (last review activity: about 34 days ago)
- “Arbitrary annotations in compiletest” compiler-team#513 (last review activity: 3 months ago)
- Pending FCP requests (check your boxes!)
- “Stabilize raw-dylib for non-x86” rust#99916
- Things in FCP (make sure you’re good with it)
- “Rewrite compiletest out of tree” compiler-team#536
- “Make format_args!() its own AST node (ast::ExprKind::FormatArgs)” compiler-team#541
- “Exploit Mitigations Project Group Proposal” compiler-team#545
- “Add
#[rustc_safe_intrinsic]
attribute” compiler-team#546
- Accepted MCPs
- “Debuggable Macro Expansions” compiler-team#386
- “Removing codegen logic for
nvptx-nvidia-cuda
(32-bit target)” compiler-team#496 - “Add import_name_type parameter to #[link]” compiler-team#525
- “Introduce
-Z
flag to control how proc-macros are run” compiler-team#528 - “move hir typeck into separate crate” compiler-team#529
- “Create
#[rustc_on_type_error]
mimicking#[rustc_on_unimplemented]
for E0308 customization” compiler-team#530 - “Split
Predicate
intoGoal
andClause
” compiler-team#531 - “Deref is not a projection” compiler-team#532
- “Remove HashStable impl for collection types with unstable iteration order” compiler-team#533
- “Re-add most early unstable syntax gates as future-compat lints” compiler-team#535
- “Introduce
core::marker::Tuple
to properly type-checkextern "rust-call"
calls” compiler-team#537
- Finalized FCPs (disposition merge)
- “Stabilize
-Zgcc-ld=lld
as-Clink-self-contained=linker -Clinker-flavor=gcc-lld
” compiler-team#510 - “Tracking issue for RFC 2046, label-break-value” rust#48594
- “Tracking Issue for “unsafe blocks in unsafe fn” (RFC #2585)” rust#71668
- “Increase the minimum linux-gnu versions” rust#95026
- “Remove migrate borrowck mode” rust#95565
- “Modify MIR building to drop repeat expressions with length zero” rust#95953
- “Lang: Stabilize usage of rustc_nonnull_optimization_guaranteed on -1” rust#97122
- “Remove a back-compat hack on lazy TAIT” rust#97346
- “Make outlives::{components,verify} agree” rust#97406
- “[RFC] Support
.comment
section like GCC/Clang (!llvm.ident
)” rust#97550 - “make cenum_impl_drop_cast deny-by-default” rust#97652
- “make const_err show up in future breakage reports” rust#97743
- “lub: don’t bail out due to empty binders” rust#97867
- “allow unions with mutable references and tuples of allowed types” rust#97995
- “do not mark interior mutable shared refs as dereferenceable” rust#98017
- “session: stabilize split debuginfo on linux” rust#98051
- “relate
closure_substs.parent_substs()
to parent fn in NLL” rust#98835
- “Stabilize
WG checkins
-
Types team by @nikomatsakis and @Jack Huey (previous checkin):
It’s been a slow last couple weeks, since people have been on vacation. Progress continues on the various initiatives. No big updates worth mentioning.
-
@_WG-mir-opt MIR Optimizations by @oli (previous checkin):
Checkin text
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “Check projection types before inlining MIR” rust#100571
- PR authored and nominated by @cjgillot
- fixes rust#100550, P-critical that broke building a crate
- No stable nominations for
T-compiler
this time.
T-rustdoc beta / T-rustdoc stable
- No backport nominations for
T-rustdoc
this time.
:back: / :shrug: / :hand:
PRs S-waiting-on-team
- (2 issues hidden since WIP or waiting on other teams)
Oldest PRs waiting for review
- “[DO NOT MERGE] Only apply
ProceduralMasquerade
hack to older versions ofrental
” rust#94063 (last review activity: 6 months ago)- cc @Aaron Hill
- “Suggest using an appropriate keyword for
struct
andenum
” rust#94996 (last review activity: 5 months ago)- cc: @Esteban Küber who reviewed
- “Rewrite LLVM’s archive writer in Rust” rust#97485 (last review activity: about 57 days ago)
- cc @Wesley Wiser
- “Use only ty::Unevaluated<‘tcx, ()> in type system” rust#98588 (last review activity: about 50 days ago)
- some merge conflicts with upstream but otherwise seems reviewable again? cc: @lcnr
- “Lower the assume intrinsic to a MIR statement” rust#98332 (last review activity: about 43 days ago)
- cc @Wesley Wiser
- “distinguish the method and associated function diagnostic information” rust#99064 (last review activity: about 39 days ago)
- cc: @Esteban Küber
Issues of Note
Short Summary
- 3 T-compiler P-critical issues
- 57 T-compiler P-high issues
- 1 P-critical, 1 P-high, 1 P-medium, 0 P-low regression-from-stable-to-beta
- 1 P-critical, 1 P-high, 2 P-medium, 0 P-low regression-from-stable-to-nightly
- 0 P-critical, 38 P-high, 84 P-medium, 8 P-low regression-from-stable-to-stable
P-critical
- “Wrong cast of u16 to usize on aarch64” rust#97463
- Will be fixed by rust#97800 (@Wesley Wiser approved, now waiting on bors)
- “Regression in consteval: error[E0080]: could not evaluate static initializer (unable to turn pointer into raw bytes)” rust#99923
- No
P-critical
issues forT-rustdoc
this time.
P-high regressions
- “Anon lifetime in
impl Trait
no longer suggests adding a lifetime parameter” rust#100615- @_TaKO8Ki self-assigned
Unassigned P-high nightly regressions
- “Borrow checking for static methods became more strict” rust#100725
- Comments from @_Frank Steffahn on the issue and on Zulip
Performance logs
Overall some really impressive wins this week. Note in particular
PR #100209, “Lazily
decode SourceFile from metadata” (which improved 75 primary benchmark
scenarios and 158 secondary scenarios) and
PR #98655 “Don’t derive
PartialEq::ne
”, which improved 65 primary scenarios and 27 secondary
scenarios). There were a few cases that pnkfelix explicitly decided not
to mark as triaged; see report for more details there.
Also pnkfelix wonders if there is a recent slight-upward trend on max-rss
for the past week, see the summary graph
Triage done by @pnkfelix. Revision range: 14a459bf..4a24f08b
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.6% | [0.4%, 0.8%] | 27 |
Regressions (secondary) | 0.4% | [0.2%, 0.6%] | 9 |
Improvements (primary) | -1.7% | [-20.1%, -0.3%] | 91 |
Improvements (secondary) | -3.6% | [-18.7%, -0.3%] | 160 |
All (primary) | -1.2% | [-20.1%, 0.8%] | 118 |
3 Regressions, 4 Improvements, 4 Mixed; 3 of them in rollups 43 artifact comparisons made in total 30 Untriaged Pull Requests
Regressions
Rollup of 15 pull requests #100677 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.3% | [0.3%, 0.3%] | 2 |
Regressions (secondary) | 1.3% | [0.5%, 1.9%] | 4 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.3% | [0.3%, 0.3%] | 2 |
- lqd hypothesized this was caused by PR #100652 “Remove deferred sized checks (make them eager)”
- regressions for #100652 include most of the rollup regressions, all by similar amounts (only ucd was absent from the narrower view).
- left a comment on PR #100652 and marked it as a regression; marked rollup as triaged.
rustc_metadata: dedupe strings to prevent multiple copies in rmeta/query cache blow file size #98851 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.6% | [0.3%, 1.5%] | 15 |
Regressions (secondary) | 1.1% | [0.3%, 1.6%] | 21 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.4% | [-0.6%, -0.2%] | 2 |
All (primary) | 0.6% | [0.3%, 1.5%] | 15 |
- the performance of this PR was heavily evaluated as part of its development.
- some regression to instruction counts is compensated for by the improvements file-size and to max-rss.
- the follow-up PR #100803 is going to more than compensate for the regressions here.
- marked as triaged.
implied bounds: explicitly state which types are assumed to be wf #100676 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.3% | [0.2%, 0.5%] | 22 |
Regressions (secondary) | 0.4% | [0.2%, 0.8%] | 22 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.3% | [0.2%, 0.5%] | 22 |
- This PR was intended to be a refactor, but it turns out it has other problems (see issue 100910).
- The regressions alone are not cause to revert the PR, but the soundness bug pushes me over the line.
- Nominated for discussion (of revert) in Thursday’s T-compiler meeting. Not tagging as triaged.
Improvements
Don’t derive PartialEq::ne
. #98655 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 1.0% | [1.0%, 1.0%] | 1 |
Improvements (primary) | -0.7% | [-1.4%, -0.2%] | 65 |
Improvements (secondary) | -5.2% | [-10.0%, -0.3%] | 27 |
All (primary) | -0.7% | [-1.4%, -0.2%] | 65 |
- This had an interesting discussion thread on it; see nnethercote’s summary comment for more info.
Lazily decode SourceFile from metadata #100209 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.2% | [0.2%, 0.2%] | 2 |
Regressions (secondary) | 0.7% | [0.4%, 0.9%] | 3 |
Improvements (primary) | -1.6% | [-19.6%, -0.2%] | 75 |
Improvements (secondary) | -3.0% | [-18.3%, -0.2%] | 158 |
All (primary) | -1.6% | [-19.6%, 0.2%] | 77 |
- Don’t get too excited y’all, that 19.6% improvement was to helloworld.
- having said that, this does represent a huge win across a broad suite of benchmarks, nearly all in incremental.
- (also, lqd notes that helloworld is a useful proxy for near-trivial build.rs scripts.)
Update minifier version to 0.2.2 #100624 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.6% | [-1.6%, -0.3%] | 13 |
Improvements (secondary) | -1.1% | [-1.5%, -0.3%] | 20 |
All (primary) | -0.6% | [-1.6%, -0.3%] | 13 |
- As noted by nnethercote, the cycles and max-rss results are neutral or under noise threshold, while instruction counts improved.
Kind-less SessionDiagnostic derive #100765 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.8% | [-0.9%, -0.6%] | 5 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.8% | [-0.9%, -0.6%] | 5 |
- all five improvements are to instances of regex-opt-incr-{patched,full} benchmark
Mixed
Rollup of 9 pull requests #100810 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 0.3% | [0.2%, 0.3%] | 2 |
Improvements (primary) | -0.7% | [-0.9%, -0.3%] | 8 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.7% | [-0.9%, -0.3%] | 8 |
- already triaged: “The small number of small improvements slightly outweighs the small number of small regressions. No further action is needed.”
update Miri #100841 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.8% | [0.5%, 1.0%] | 5 |
Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
Improvements (primary) | -0.8% | [-0.8%, -0.8%] | 1 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.5% | [-0.8%, 1.0%] | 6 |
- regressions were in regex-opt-incr-patched (and ucd-doc-full, but that was just 0.24%)
- while the regression here is unfortunate, there is not much we can expect to do in the short term to address it
- its not even clear whether miri is really at fault; the detailed query info says that the regression is due to
LLVM_lto_optimize
. Could the miri changes have somehow caused the codegen unit partitioning to change? Why would a miri update affect the time forLLVM_lto_optimize
? - not marking as triaged. I’m not sure if anyone can justify spending time to look at this, but I don’t want to just let it slide through just yet.
Rollup of 11 pull requests #100847 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
Improvements (primary) | -0.5% | [-0.5%, -0.5%] | 1 |
Improvements (secondary) | -0.7% | [-1.1%, -0.3%] | 5 |
All (primary) | -0.5% | [-0.5%, -0.5%] | 1 |
- benefits here heavily outweigh the one minor regression.
- already triaged by nnethercote
Use AttrVec
more #100668 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.6% | [0.2%, 1.0%] | 2 |
Regressions (secondary) | 0.6% | [0.3%, 1.3%] | 8 |
Improvements (primary) | -0.3% | [-0.4%, -0.2%] | 7 |
Improvements (secondary) | -0.5% | [-1.2%, -0.2%] | 15 |
All (primary) | -0.1% | [-0.4%, 1.0%] | 9 |
- already triaged by nnethercote: “a few small wins and losses here, which balance each other out, and the net effect is perf-neutral.”
Nominated Issues
- No nominated issues for
T-compiler
this time.
- No nominated RFCs for
T-compiler
this time.
Next week’s WG checkins
- @_wg-polymorphization by @davidtwco
- @_WG-rls2.0 by @matklad