T Compiler Meeting Agenda 2023 06 15

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)

MCPs/FCPs

  • New MCPs (take a look, see if you like them!)
  • 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=1compiler-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 to target_archcompiler-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)
  • Pending FCP requests (check your boxes!)
    • No pending FCP requests this time.
  • Things in FCP (make sure you’re good with it)
  • Accepted MCPs
  • 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

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

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

  • No P-critical issues for T-compiler at this time.

T-types

  • No P-critical issues for T-types at this time.

T-rustdoc

  • No P-critical issues for T-rustdoc at this time.

P-high regressions

P-high beta regressions

  • No new P-high regressions

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Nominated Issues

T-compiler

  • “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

RFC

  • No I-compiler-nominated RFCs this time.

Performance logs

triage logs 2023-06-13

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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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

T-compiler

  • “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