T Compiler Meeting Agenda 2021 12 09

T-compiler Meeting Agenda 2021-12-09

Tracking Issue


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


  • New MCPs (take a look, see if you like them!)
  • Old MCPs (not seconded, take a look)
    • “CI should exercise (subset of) tests under –stage 1” compiler-team#439 (last review activity: 3 months ago)
    • “Accept pc in place of unknown and unknown in place of pc for x86_64 and i?86 targets” compiler-team#441 (last review activity: 5 months ago)
    • “Make -Z binary-dep-depinfo the default behavior” compiler-team#464 (last review activity: 2 months ago)
  • Pending FCP requests (check your boxes!)
    • “Tracking issue for RFC 2115: In-band lifetime bindings” rust#44524
  • Things in FCP (make sure you’re good with it)
    • No FCP requests this time.
  • Accepted MCPs
  • Finalized FCPs (disposition merge)
    • “Tracking Issue for cargo report future-incompat” rust#71249
    • “Tracking Issue for inline assembly (asm!)” rust#72016

WG checkins

@WG-mir-optimization checkin by @oli (previous checkin)

  • @Dylan MacKenzie (ecstatic-morse) is working on the MIR pass manager #91386
  • there is a lot of unclarity around what dialects of MIR we have and what rules exist
    • Not really a new thing, but it caused a bug (#90762) and almost caused a much bigger bug (in #73255), though we that caught that in time
    • See this discussion for some examples of the problems

@WG-polymorphization checkin by @davidtwco (previous checkin)

we’re making slow progress, @lcnr is working on a patch that removes our main blocker, there’s not much else to do with polymorphization until that’s complete.

Backport nominations

T-compiler stable / T-compiler beta

  • :beta: “Sync portable-simd to remove autosplats” rust#91484
    • @simulacrum suggests two strategies for backport: either backported in full or a targeted backport that excludes the submodule with a config setting (see comment)
  • No stable nominations for T-compiler this time.

T-rustdoc stable / T-rustdoc beta

  • :beta: “Make rustdoc headings black, and markdown blue” rust#91534
    • seems all fine to backport this small UI fix
  • No stable nominations for T-rustdoc this time.

:back: / :shrug: / :hand:

PRs S-waiting-on-team


  • “Make specifying repr optional for fieldless enums” rust#88203
    • waiting on T-lang
  • “Make feature key optional for rustc_stable, rustc_const_stable attributes” rust#88588
    • Waiting on T-libs
  • “remove pref_align_of intrinsic” rust#90877
    • Waiting on T-lang

Oldest PRs waiting for review


Issues of Note

Short Summary



  • “Miscompilation where binding only some fields leaks the others” rust#90752

  • “Huge compile-time regression in beta/nightly” rust#91128

    • issue author mentions that disabling the new LLVM pass manager makes the regression disappear
    • some public code to reproduce is at this comment
    • @nikic followed up with some great insights
    • discussed last week, linked to PR #91190, due to be evaluated again next week
  • “Compile-time regression between 1.56.1 and 1.57.0 for deeply nested decorator types” rust#91598

    • this affects production code on different scenarios
    • time needed for compilation seems to have abnormally regressed
  • No P-critical issues for T-rustdoc this time.

P-high regressions

P-high beta regressions

  • “Where bounds with associated types equality cause overflow.” rust#89503

Unassigned P-high nightly regressions

  • “Undefined reference to getauxval in function init_have_lse_atomics when compiling to nightly aarch64-unknown-linux-muslrust#89626
  • “nightly-2021-12-02 to nightly-2021-12-03 regression (PR #91354): auto-deref on Cow does not seem to work anymore in all circumstances” rust#91489

Performance logs

triage logs for 2021-12-07

A week of mostly rather small changes with many regressions being hard to diagnose. The largest regression comes from the introduction of a new future (desugaring .await into a call to IntoFuture::into_future). This was deemed acceptable as it only seems to have a negative impact in stress test situations where async/await is used more than one would normally expect. Unfortunately this does mean regressions beat out improvements this week.

Triage done by @rylev. Revision range: 1c0287830e0fb3c4007afea2819ba03766da6e9c..ecb65b0e170fc5275870c9d0fba7267a57cf35e5

3 Regressions, 5 Improvements, 5 Mixed; 3 of them in rollups, 29 Untriaged Pull Requests 31 comparisons made in total


Implement version of normalize_erasing_regions that allows for normalization failure #91255

  • Small regression in instruction counts (up to 0.9% on incr-full builds of ctfe-stress-4)
  • Nothing immediately jumps out as an issue, so a run of cachegrind might be necessary.
  • Left a comment as such.

Rollup of 10 pull requests #91486

  • Large regression in instruction counts (up to 1.1% on full builds of match-stress-enum)
  • Seems to be impacting compilation of match expressions, but none of the sub PRs seem to be a likely culprit.
  • Left a comment as such.

Reintroduce into_future in .await desugaring #90737

  • Very large regression in instruction counts (up to 9.3% on incr-full builds of deeply-nested-async)
  • The regression was very much expected but only really appears in extremely await-heavy code. We’ll have to wait to see how this impacts real world users, and see if we can work on performance of trait obligation resolution to improve the performance lost.
  • A more detailed justification for taking the performance hit can be found here.


  • Lint elided lifetimes in path during lifetime resolution. #90446
  • Optimize rustc_lexer #91393
  • Revert “Auto merge of #91354 - fee1-dead:const_env, r=spastorino” #91491
  • Add a MIR pass manager (Taylor’s Version) #91475


Introduce RawVec::reserve_for_push. #91352

  • Large improvement in instruction counts (up to -3.0% on incr-patched: println builds of webrender-wrench)
  • Small regression in instruction counts (up to 0.4% on incr-patched: println builds of style-servo)
  • The improvements outweigh the regressions and are mostly found in real-world crates.
  • Justification for the regressions can be found here.

Rollup of 4 pull requests #91406

  • Large improvement in instruction counts (up to -2.7% on incr-unchanged builds of deeply-nested-async)
  • Very large regression in instruction counts (up to 7.1% on incr-unchanged builds of clap-rs)
  • A case where it’s hard to tell where the regression is coming from, but it is a quite a large regression in a real-world crate (albeit one that is a tiny bit noisy).
  • Both and only really touch rustdoc so that’s unlikely the culprit.
  • Left a comment for follow up

Cleanup: Eliminate ConstnessAnd #91354

  • Small improvement in instruction counts (up to -0.6% on full builds of deeply-nested)
  • Moderate regression in instruction counts (up to 1.1% on incr-patched: b9b3e592dd cherry picked builds of style-servo)
  • Reverted by #91491 which recovered the regression.

Rollup of 4 iffy pull requests #91455

  • Very large improvement in instruction counts (up to -6.7% on incr-unchanged builds of clap-rs)
  • Large regression in instruction counts (up to 3.4% on incr-unchanged builds of clap-rs)
  • The improvements outweigh the regressions with the largest regression in a non-noisy benchmark being only 0.8%.
  • Given the difficult nature of figuring out what caused regressions in a rollup of 4 iffy pull requests, we’ll let this one slide.

Reduce boilerplate around infallible folders #91318

  • Moderate improvement in instruction counts (up to -0.8% on incr-unchanged builds of externs)
  • Small regression in instruction counts (up to 0.6% on full builds of deeply-nested)
  • cachegrind was already run, but there are no clear explanations for the regressions.

Nominated Issues


  • No I-compiler-nominated issues t this time.


  • No nominated RFCs for T-compiler this time.