T-compiler Meeting Agenda 2024-01-18
Announcements
- Compiler team P-high issues review time:2024-01-19T14:00:00+01:00
- Types Team: ITE (Impl Trait Everywhere) Triage time:2024-01-19T:00:00+01:00
- Reminder: if you see a PR/issue that seems like there might be legal implications due to copyright/IP/etc, please let us know (or at least message @davidtwco or @Wesley Wiser so we can pass it along).
Other WG meetings
- Stable MIR weekly meeting time:2024-01-19T16:00:00+01:00
- WG-rust-analyzer weekly meeting time:2024-01-19T16:00:00+01:00
- WG-macros triage weekly meeting time:2024-01-19T17:00:00+01:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- No new proposals this time.
- Old MCPs (stale MCP might be closed as per MCP procedure)
- None at this time
- Old MCPs (not seconded, take a look)
- “Semantics of
-Cinstrument-coverage=all
” compiler-team#690 (Zulip) (last review activity: about 35 days ago) - “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: about 0 days ago)
- concern: added-complexity-to-frontend
- “Introduce perma-unstable
wasm-c-abi
flag” compiler-team#703 (Zulip) (last review activity: about 33 days ago) - “Support patchable-function-entry” compiler-team#704 (Zulip) (last review activity: about 33 days ago)
- “Add -Z direct-access-external-data” compiler-team#707 (Zulip) (last review activity: about 7 days ago)
- “Semantics of
- Pending FCP requests (check your boxes!)
- “Add a new
--build-id
flag to rustc” compiler-team#635 (Zulip)- concern: other-existing-options
- concern: option-name
- “Retire the mailing list and make all decisions on zulip” compiler-team#649 (Zulip)
- concern: single-point-of-failure-via-stream-archival
- concern: automatic-sync
- “Stabilize
--json=unused-externs(-silent)
” compiler-team#674 (Zulip) - “Support overriding
warnings
level for a specific lint via command line” rust#113307 - “Update Windows platform support” rust#115141
- “Stabilize Wasm target features that are in phase 4 and 5” rust#117457
- “Add a new
- Things in FCP (make sure you’re good with it)
- “Add a stable flag to enable/disable codegen UB checks” compiler-team#625 (Zulip)
- “Stabilize
--json=unused-externs(-silent)
” compiler-team#674 (Zulip) - “New Tier-3 target:
wasm32-wasi-preview2
” compiler-team#694 (Zulip) - “Smooth the renaming transition of
wasm32-wasi
” compiler-team#695 (Zulip) - “Provide option to shorten symbol names by replacing them with a digest” compiler-team#705 (Zulip)
- “uplift some -Zverbose calls and rename to -Zverbose-internals” compiler-team#706 (Zulip)
- “Promote tier 3
*-pc-windows-gnullvm
targets to tier 2” compiler-team#710 (Zulip) - “Unstably support MIR-only rlibs” compiler-team#713 (Zulip)
- “Undeprecate lint
unstable_features
and make use of it in the compiler” rust#118639 - “Warn on references casting to bigger memory layout” rust#118983
- Accepted MCPs
- “Start using clippy on rustc” compiler-team#709 (Zulip)
- Finalized FCPs (disposition merge)
- “error on incorrect implied bounds in wfcheck except for Bevy dependents” rust#118553
- “const-eval interning: get rid of type-driven traversal” rust#119044
- “Deny braced macro invocations in let-else” rust#119062
WG checkins
-
@_WG-mir-opt by @oli (previous checkin):
No updates, I’m still catching up on 2 months of changes while I was away
-
@_T-rust-analyzer by @Lukas Wirth (previous checkin):
Checkin text
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “[beta] Revert #113923” rust#119886
- Seen last week (on Zulip), @Quentin Dian (dianqk) followed-up and authored the revert patch
- No stable nominations for
T-compiler
this time.
- No beta nominations for
T-types
this time. - No stable nominations for
T-types
this time.
PRs S-waiting-on-team
- Other issues in progress or waiting on other teams
Issues of Note
Short Summary
- 0 T-compiler P-critical issues
- 59 T-compiler P-high issues
- 0 P-critical, 0 P-high, 3 P-medium, 0 P-low regression-from-stable-to-beta
- 0 P-critical, 0 P-high, 2 P-medium, 2 P-low regression-from-stable-to-nightly
- 0 P-critical, 39 P-high, 100 P-medium, 17 P-low regression-from-stable-to-stable
P-critical
- No
P-critical
issues forT-compiler
this time.
- No
P-critical
issues forT-types
this time.
P-high regressions
- No
P-high
beta regressions this time.
Unassigned P-high nightly regressions
- No unassigned
P-high
nightly regressions this time.
Performance logs
This week had some small regressions that did not warrant further investigation, several of which were dismissed as being noise/blips in the data. There were also a number of gains. (Don’t get exicited about that 20.6% improvement, its an measurement artifact from a temporary blip in the PR that immediately preceded this week’s triage.)
Triage done by @pnkfelix. Revision range: 76101eec..f9c2421a
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.7% | [0.6%, 0.7%] | 2 |
Regressions (secondary) | 3.1% | [0.8%, 4.1%] | 9 |
Improvements (primary) | -1.2% | [-20.6%, -0.2%] | 133 |
Improvements (secondary) | -0.8% | [-7.3%, -0.1%] | 31 |
All (primary) | -1.2% | [-20.6%, 0.7%] | 135 |
3 Regressions, 5 Improvements, 5 Mixed; 3 of them in rollups 55 artifact comparisons made in total
Regressions
Rollup of 10 pull requests #119754 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 2.4% | [2.4%, 2.4%] | 2 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | - | - | 0 |
- The 2 regressing (and secondary) benchmarks are tt-muncher debug {incr-full, full}. Its not transient.
- I’ve skimmed over the list of PR’s in the rollup. None of them are obvious culprits here. I looked at the ones related to debuginfo (#118903) and to code-coverage (#119033 and #119681), but none of those seem likely to be to blame here
- Since this only affects a secondary benchmark, and only the instruction count (e.g. not cpu-clock:u nor wall-time for these two benchmarks), I do not think its worth further investigation and I’m going to mark it as triaged.
Exhaustiveness: use an Option
instead of allocating fictitious patterns #119688 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 3.8% | [3.6%, 4.1%] | 6 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | - | - | 0 |
- This impacted the 6 variants of match-stress {incr-full,full} x {check,debug,opt}
- I think the impact on match-stress was probably well-anticipated, and within a reasonable range for a stress-test benchmark.
- Note that #119688 was a precursor to some further cleanup code (namely to remove the use of a local-arena within exhaustiveness checking).
- Marking as triaged.
never patterns: Check bindings wrt never patterns #119610 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.3% | [0.3%, 0.4%] | 3 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.3% | [0.3%, 0.4%] | 3 |
- This impacted 3 variants of unicode-normalization-0.1.19: debug incr-unchanged and check {incr-unchanged, incr-patched:println}.
- Interestingly, during two different try runs, those three variants were found to have improved by similar amounts by this PR.
- there’s some weird interaction between that benchmark and the code paths impacted by this PR, and I do not think its worth investing effort in further investigation.
- marking as triaged.
Improvements
macro_rules: Add an expansion-local cache to span marker #119693 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -1.4% | [-20.5%, -0.2%] | 80 |
Improvements (secondary) | -0.8% | [-1.9%, -0.3%] | 16 |
All (primary) | -1.4% | [-20.5%, -0.2%] | 80 |
- the bitmaps changes (-20.5%, -17.9%, -13.1%) are all artifacts of returning to normal after a blip in the previous PR.
A more efficient slice comparison implementation for T: !BytewiseEq #116846 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.5% | [-0.9%, -0.2%] | 15 |
Improvements (secondary) | -0.6% | [-0.6%, -0.6%] | 1 |
All (primary) | -0.5% | [-0.9%, -0.2%] | 15 |
- it is too bad that work in PR #100124 stalled.
Remove a large amount of leb128-coded integers #119791 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 1.1% | [1.1%, 1.1%] | 1 |
Improvements (primary) | -0.3% | [-0.3%, -0.2%] | 5 |
Improvements (secondary) | -0.3% | [-0.5%, -0.1%] | 12 |
All (primary) | -0.3% | [-0.3%, -0.2%] | 5 |
- the 1.1% hit is to deep-vector debug full. It may be transient; the history is pretty up-and-down at the time of this PR, and has settled at a lower level than where it was when this PR landed.
- in any case, the gains elsewhere, especially bootstrap, outweigh the loss to that one secondary benchmark. (Which … I guess is what the rustc-perf bot now computes as well, since it categorized this as an Improvement rather than Mixed?)
Exhaustiveness: track overlapping ranges precisely #119396 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.4% | [-1.7%, -0.2%] | 32 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.4% | [-1.7%, -0.2%] | 32 |
Rollup of 6 pull requests #119889 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -1.8% | [-1.9%, -1.7%] | 4 |
Improvements (secondary) | -4.3% | [-7.4%, -1.3%] | 2 |
All (primary) | -1.8% | [-1.9%, -1.7%] | 4 |
Mixed
Support async recursive calls (as long as they have indirection) #117703 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
Improvements (primary) | -0.3% | [-0.4%, -0.3%] | 3 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.3% | [-0.4%, -0.3%] | 3 |
- this is weird, it looks like an inverse blip occurred on the preceding PR, where tt-muncher check incr-unchanged had a single point with -0.2% instruction-count, and then it preceding to “return to normal” on the succeeding PRs.
- (Its harder for me to explain away “inverse blips” …)
- but at the same time, this does not seem like a significant regression by our usual metrics.
- marking as triaged.
Rollup of 9 pull requests #119767 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 1.3% | [0.4%, 2.3%] | 2 |
Regressions (secondary) | 0.9% | [0.5%, 1.2%] | 2 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.3% | [-0.3%, -0.3%] | 1 |
All (primary) | 1.3% | [0.4%, 2.3%] | 2 |
- primary regressions: syn opt-full regressed by 2.3%, bitmaps check-incr-full by 0.35%. secondary regressions: coercions debug-full by 1.23%, ctfe-stress check-full by 0.51%
- from the overall history, it seems like syn opt-full returned to “normal” with later PRs that don’t necessarily seem like they would have affected syn (e.g. PR #117449). bitmap check-incr-full’s trend is likewise downward after this point.
- marking as triaged
Add assume into NonZeroIntX::get
#119452 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.5% | [0.4%, 0.9%] | 4 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.7% | [-0.7%, -0.7%] | 1 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.3% | [-0.7%, 0.9%] | 5 |
- scottmcm writes: “Instructions have a couple red in instruction counts for opt, but that’s entirely reasonable for something intended to enable optimizations. Notably, the cycles are green, with no regressions. So I think this is fine.”
- marking as triaged
Avoid some redundant work in GVN #119439 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.8% | [0.6%, 0.9%] | 4 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.7% | [-1.1%, -0.5%] | 4 |
Improvements (secondary) | -0.4% | [-0.4%, -0.4%] | 1 |
All (primary) | 0.0% | [-1.1%, 0.9%] | 8 |
- primary regressions are regex-1.5.5 debug-full, opt-incr-patched:Job, incr-full, and exa opt-full.
- the exa regression looks like a blip. The regex ones were predicted during a try run for the PR. I assume they were deemed acceptable as they are offset improvements elsewhere (or dismissed as noise?)
- marking as triaged.
Sandwich MIR optimizations between DSE. #119672 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.7% | [0.2%, 1.4%] | 14 |
Regressions (secondary) | 0.5% | [0.2%, 2.7%] | 14 |
Improvements (primary) | -1.0% | [-2.2%, -0.2%] | 31 |
Improvements (secondary) | -0.9% | [-2.2%, -0.2%] | 10 |
All (primary) | -0.4% | [-2.2%, 1.4%] | 45 |
- already marked as triaged by @lqd with the comment “As seen in the previous runs: some nice wins on bigger benchmarks, and overall gains outweigh the few losses.”
Nominated Issues
- “
exported_private_dependencies
lint only take effect in innermost dependency” rust#119428- RFC3516 describes an additional Cargo.toml flag (
public = <bool>
) to clarify public/private crate dependencies - After this RFC a
warn
lint will be added suggesting that it will become error starting from Rust 2024 edition - Changes to rustc are needed to adapt to this new behaviour (comment)
- Another piece of work is #71043 which is about places the lint should be triggered but isn’t (comment)
- Any capacity from
T-{compiler,compiler-contributor}
to help with any of these? (Owning this work could help make these changes into the 2024 edition) (@_Ed Page probably the point of contact for this work)
- RFC3516 describes an additional Cargo.toml flag (
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “compiler: allow transmute of ZST arrays with generics” rust#114009
- cc: @Wesley wiser did you have some time for that (ref. comment), do we want to reroll?
- “[rustc_data_structures] Use partition_point to find slice range end.” rust#114231
- cc: @cjgillot: seems this is ready to merge? Can you r+?
- “Stabilize
extended_varargs_abi_support
” rust#116161 (last review activity: 3 months ago)- cc: @wesley wiser
- “Make privacy visitor use types more (instead of HIR)” rust#113671 (last review activity: about 54 days ago)
- cc: vadim petrochenkov
Next week’s WG checkins
- @_WG-async-foundations by @nikomatsakis and @tmandry
- @_WG-diagnostics by @Esteban Küber and @oli
Next meetings' agenda draft: hackmd link