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

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