T-compiler Meeting Agenda 2023-06-15
Announcements
- Input from @apiraino (echoing a comment from @Jack Huey): rethinking WGs checkins in t-compiler meetings. Is the current rotation reflecting the reality? Suggests opening a topic under #t-compiler and discuss with the leads
- Types team meeting at time:2023-06-19T10: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 (calendar link)
- wg-async: Open discussion at time:2023-06-15T16:30:00-04:00
- wg-rls-2.0 weekly sync-up at time:2023-06-19T11:00:00-04:00
- wg-rls-2.0 steering meeting at time:2023-06-19T11:00:00-04:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “[MCP] proposing a macros working group” compiler-team#637
- Old MCPs (stale MCP might be closed as per MCP procedure)
- None at this time
- Old MCPs (not seconded, take a look)
- “2024: Decrease debuginfo generated by
-Cdebuginfo=1
” compiler-team#613 (last review activity: about 54 days ago) - “Cell Broadband Engine SPU support” compiler-team#614 (last review activity: 2 months ago)
- “Revise error code documentation standard” compiler-team#615 (last review activity: about 54 days ago)
- “Runtime checks for occupied niches” compiler-team#624 (last review activity: about 19 days ago)
- “Add support for Zephyr OS” compiler-team#629 (last review activity: about 19 days ago)
- “Add
mips64r6
option totarget_arch
” compiler-team#632 (last review activity: about 19 days ago) - “Consistently use “region” terminology in later stages of the compiler” compiler-team#634 (last review activity: about 19 days ago)
- “Add a new
--build-id
flag to rustc” compiler-team#635 (last review activity: about 19 days ago) - “Simplify and improve explicitness of the check-cfg syntax” compiler-team#636 (last review activity: about 0 days ago)
- “2024: Decrease debuginfo generated by
- Pending FCP requests (check your boxes!)
- No pending FCP requests this time.
- Things in FCP (make sure you’re good with it)
- “Disallow incoherent cfgs” compiler-team#610
- “Add a blanket flag to enable/disable codegen UB checks” compiler-team#625
- “Report all lints, even if other errors already occurred.” compiler-team#633
- Accepted MCPs
- “Take MIR
Analysis
by&mut
” compiler-team#598
- “Take MIR
- Finalized FCPs (disposition merge)
- “Make pointer_structural_match normal and warn” rust#110166
- “rustdoc: Add search result item types after their name” rust#110688
- “[mir-opt] SimplifyLocals should also clean up debuginfo” rust#110702
- “Stabilize inline asm for LoongArch64” rust#111235
- “Uplift
clippy::undropped_manually_drops
lint” rust#111530 - “Uplift
clippy::invalid_utf8_in_unchecked
lint” rust#111543 - “Uplift
clippy::cast_ref_to_mut
lint” rust#111567 - “Uplift
clippy::fn_null_check
lint” rust#111717 - “Uplift
clippy::cmp_nan
lint” rust#111818 - “rustdoc: search for slices and arrays by type with
[]
” rust#111958
WG checkins
- @_WG-self-profile by @mw and @Wesley Wiser (previous checkin):
@andjo403 modified the event file format to support ASCII newline characters in https://github.com/rust-lang/measureme/pull/208. This resolved a panic that @jyn reported when profiling the compiler.
Backport nominations
T-compiler stable / T-compiler beta
- :beta: 1.71.0 “Make struct layout not depend on unsizeable tail” rust#112062
- fixes #112048, P-critical unsoundness
- it is now merged, perf. run triage neutral
- :beta: 1.71.0 “Update to LLVM 16.0.5” rust#112312
- Fixes a number of regressions: #111823, #112061, #112170
- perf. bench triaged and approved (see comment)
- No stable nominations for
T-compiler
this time.
T-rustdoc stable / T-rustdoc beta
- No stable nominations for
T-rustdoc
this time. - No beta nominations for
T-rustdoc
this time.
:back: / :shrug: / :hand:
PRs S-waiting-on-team
Issues of Note
Short Summary
- 0 T-compiler P-critical issues
- 62 T-compiler P-high issues
- 0 P-critical, 1 P-high, 1 P-medium, 0 P-low regression-from-stable-to-beta
- 1 P-critical, 0 P-high, 1 P-medium, 2 P-low regression-from-stable-to-nightly
- 0 P-critical, 35 P-high, 100 P-medium, 17 P-low regression-from-stable-to-stable
P-critical
- No
P-critical
issues forT-compiler
at this time.
- No
P-critical
issues forT-types
at this time.
- No
P-critical
issues forT-rustdoc
at this time.
P-high regressions
- No new
P-high
regressions
Unassigned P-high nightly regressions
- No unassigned
P-high
nightly regressions this time.
Nominated Issues
- “MSVC and rustc disagree on minimum stack alignment on x86 Windows” rust#112480
- unsoundness for windows-msvc 32bit target, caused by (quote) “the x86 ABI on Windows doesn’t guarantee the stack alignment above 4”.
- @Chris Denton suggests skipping the check (comment) but what to do in the long term?
- example at comment
- nominated to figure out at which level (t-lang, t-compiler, t-else) should this be discussed and addressed
- “Resurrect: rustc_target: Add alignment to indirectly-passed by-value types, correcting the alignment of byval on x86 in the process.” rust#112157
- nominated by @Nikita Popov as a FIY for the T-compiler (comment)
- more context from @_erikdesjardins at this comment
- “Add
internal_features
lint” rust#108955- nominated by Felix: does it need an FCP or not?
- No I-compiler-nominated RFCs this time.
Performance logs
Our build pipeline got sped up by PR #112012, which side-steps one of the rustc rebuilds we were suffering with before. (There is further potential speed-up by caching LLVM, as noted by on that PR.) Other than that, various small regressions that are largely noise, as well as one unexpected increase in binary sizes from PR #109005 that we should follow up on.
Triage done by @pnkfelix. Revision range: adc719d7..4bd4e2ea
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 2.5% | [0.2%, 21.6%] | 84 |
Regressions (secondary) | 6.2% | [0.2%, 21.0%] | 105 |
Improvements (primary) | -0.8% | [-1.6%, -0.2%] | 26 |
Improvements (secondary) | -0.7% | [-1.2%, -0.2%] | 19 |
All (primary) | 1.7% | [-1.6%, 21.6%] | 110 |
7 Regressions, 3 Improvements, 5 Mixed; 5 of them in rollups 46 artifact comparisons made in total 30 untriaged Pull Requests
Regressions
Misc HIR typeck type mismatch tweaks #112116 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.7% | [0.7%, 0.8%] | 3 |
Regressions (secondary) | 0.4% | [0.3%, 0.7%] | 11 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
All (primary) | 0.7% | [0.7%, 0.8%] | 3 |
- only primary benchmark to regress was helloworld (3 incr check variants), and not by all that much (relatively speaking)
- secondary regressions were mainly to unify-linearly, await-call-tree, token-stream-stress.
- impact seems acceptable, marking as triaged.
Uplift clippy::undropped_manually_drops
lint #111530 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.7% | [0.6%, 0.7%] | 3 |
Regressions (secondary) | 0.5% | [0.3%, 0.6%] | 8 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.7% | [0.6%, 0.7%] | 3 |
- only primary benchmark to regress was helloworld (3 incr check variants), and not by all that much (relatively speaking)
- secondary regressions were solely to unify-linearly, await-call-tree, token-stream-stress.
- impact seems acceptable (one expects new lint to add some amount of extra work, and I wouldn’t be surprised if this is actually noise,. given #112116 above).
- marking as triaged.
Rollup of 3 pull requests #112465 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 4.2% | [0.4%, 14.8%] | 6 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 4.2% | [0.4%, 14.8%] | 6 |
- already marked as triaged (expected regressions to doc benchmarks)
increase the accuracy of effective visibilities calculation #112426 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.2%, 0.6%] | 10 |
Regressions (secondary) | 1.2% | [0.6%, 1.9%] | 9 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.4% | [0.2%, 0.6%] | 10 |
- primary regressions are to serde (check, debug, opt) and also cargo + webrender (both check)
- This PR added some extra work to the compiler to ensure some lazily-filled in tables are constructed correctly.
- Therefore, this seems like extra work that is largely unavoidable.
- marking as triaged.
rustdoc: re-elide cross-crate default trait-object lifetime bounds #107637 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.3%, 0.9%] | 12 |
Regressions (secondary) | 0.7% | [0.3%, 0.9%] | 18 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.4% | [0.3%, 0.9%] | 12 |
- already marked as triaged (expected regressions to doc benchmarks)
Rollup of 3 pull requests #112530 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 9.3% | [0.6%, 21.0%] | 19 |
Regressions (secondary) | 8.7% | [1.0%, 20.8%] | 71 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 9.3% | [0.6%, 21.0%] | 19 |
- One of the rolled up PRs, PR #112528, is itself a partial revert of PR #110221, which yields the large compile-time losses noted here (solely for helloworld, it is worth noting).
- the point is, the gains were 1. accidental 2. isolated to a toy and 3. due to an unintended change (which was now reverted).
- marking as triaged.
Private-in-public lints implementation #111801 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.2% | [0.1%, 0.2%] | 3 |
Regressions (secondary) | 0.6% | [0.2%, 1.1%] | 3 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.2% | [0.1%, 0.2%] | 3 |
- primary regressions were to stm32f4-0.14.0 check+opt incr, but by a really small amount (0.18%).
- marking as triaged.
Improvements
Avoid one rustc
rebuild in the optimized build pipeline #112012 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.4%, 0.5%] | 2 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.9% | [-1.6%, -0.3%] | 26 |
Improvements (secondary) | -1.1% | [-1.2%, -0.9%] | 11 |
All (primary) | -0.8% | [-1.6%, 0.5%] | 28 |
- Interesting case where removing PGO data improved a class of benchmarks
- Specifically, nearly all the improvements were to debug builds
- this makes sense, because the PGO data we were gathering was during rustc bootstrap, which does not exercise the debug build paths.
Rollup of 5 pull requests #112450 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.6% | [-0.6%, -0.6%] | 3 |
Improvements (secondary) | -0.4% | [-0.6%, -0.3%] | 8 |
All (primary) | -0.6% | [-0.6%, -0.6%] | 3 |
[rustdoc] Fix infinite loop when retrieving impls for type alias #112543 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -3.8% | [-12.9%, -0.4%] | 6 |
Improvements (secondary) | - | - | 0 |
All (primary) | -3.8% | [-12.9%, -0.4%] | 6 |
Mixed
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 |
- changes are all to secondary benchmarks
- only notable was coercions debug incr-full regressing by 5.7%, but that’s acceptable given what we expect benefits to be here w.r.t. codegen.
- marking as triaged.
Update to LLVM 16.0.5 #112312 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 0.3% | [0.2%, 0.3%] | 5 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -5.2% | [-5.2%, -5.2%] | 1 |
All (primary) | - | - | 0 |
- effects are all to secondary benchmarks
- effects are small enough that they would not block an LLVM upgrade
- marking as triaged.
Rollup of 7 pull requests #112344 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 5.4% | [5.4%, 5.4%] | 1 |
Improvements (primary) | -0.2% | [-0.2%, -0.2%] | 2 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.2% | [-0.2%, -0.2%] | 2 |
- sole regression is to secondary coercions debug incr-full.
- not worth dissecting this rollup for that.
- marking as triaged.
Remember names of cfg
-ed out items to mention them in diagnostics #109005 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.3%, 0.5%] | 11 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.2% | [-0.2%, -0.2%] | 3 |
Improvements (secondary) | -0.5% | [-0.6%, -0.4%] | 8 |
All (primary) | 0.2% | [-0.2%, 0.5%] | 14 |
- instruction counts regressed (expected) and binary sizes regressed (which may have been unexpected).
- specifically the binary sizes for libc and syn both regressed on the order of 3%.
- not marking as triaged until we get confirmation that it is expected for the metadata in question to leak into the binary sizes being measured.
Rollup of 4 pull requests #112420 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.3% | [0.2%, 0.6%] | 5 |
Regressions (secondary) | 0.4% | [0.2%, 0.6%] | 7 |
Improvements (primary) | -0.3% | [-0.3%, -0.3%] | 2 |
Improvements (secondary) | -0.3% | [-0.3%, -0.2%] | 2 |
All (primary) | 0.2% | [-0.3%, 0.6%] | 7 |
- currently guessing that the regression here might be due to PR #109953.
- doing a specific rust-timer run now to check that, not marking as triaged for now.
Oldest PRs waiting for review
- “Validate fluent variable references in tests” rust#111269 (last review activity: about 31 days ago)
- cc @davidtwco
- “Implement a global value numbering MIR optimization” rust#109597 (last review activity: about 22 days ago)
- cc: @Jak{e,ob} Degen maybe also @RalfJ (since participant in the review)
- “Add casting suggestion when assigning negative 2’s complement bin or hex literal to a size compatible signed integer” rust#111212
- ~2 months old PR is a diag improvement
- author (new contributor) rerolls the review assignment, are the changes straightforward enough?
Next week’s WG checkins
- Generic Associated Types initiative by @Jack Huey
- @_WG-diagnostics by @Esteban Küber and @oli
Agenda draft: https://hackmd.io/EpILk3k_Q_SMcZKucMEAOQ