T Compiler Meeting Agenda 2023 11 09

T-compiler Meeting Agenda 2023-11-09

Announcements

  • Next week Rust stable 1.74 release
  • 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 (calendar link)

  • No meetings scheduled for next week

MCPs/FCPs

Backport nominations

T-compiler stable / T-compiler beta

  • :beta: “Make sure that predicates with unmentioned bound vars are still considered global in the old solver” rust#117589
  • :beta: “Check binders with bound vars for global bounds that don’t hold” rust#117637
    • Fixes a regression found during rust#117589’s crater run
    • Needs to be backported along that PR

T-types stable / T-types beta

PRs S-waiting-on-team

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

  • “Code no longer compiles after -Zdrop-tracking-mir was enabled by default” rust#116242
    • It’s fixed, left open to track backports

T-types

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

P-high regressions

P-high beta regressions

  • “regression: new resolution failures in 1.74” rust#117056
    • Fixed by rust#117589, thanks @Michael (compiler-errors) Goulet
  • “regression: change in async capture rules?” rust#117059
    • Fixed by rust#117134, thanks @lcnr, beta backport approved.

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs for 2023-11-07

A difficult week for triage, due to what appears to be system-level disruption to measurement apparatus, yielding transient noise (and potentially masking actual problems). The main non-noise performance change was huge regression to bitmaps introduced by PR 117131, and that already has a fix in-flight (PR #117542). The other thing worth noting is that the parallel rustc front-end has been enabled in the nightly builds, which has introduced some overhead that was expected by wg-parallel-rustc.

Triage done by @pnkfelix. Revision range: 650991d6..7b97a5ca

Summary:

(instructions:u) mean range count
Regressions ❌ (primary) 5.8% [0.3%, 104.7%] 234
Regressions ❌ (secondary) 2.7% [0.5%, 11.6%] 219
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 5.8% [0.3%, 104.7%] 234

10 Regressions, 4 Improvements, 3 Mixed; 3 of them in rollups 68 artifact comparisons made in total

Regressions

Accept less invalid Rust in rustdoc #117450 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 4.1% [0.6%, 21.0%] 17
Regressions ❌ (secondary) 3.0% [1.0%, 7.7%] 6
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 4.1% [0.6%, 21.0%] 17
  • primary regressions are to doc benchmarks, were anticipated, and are unavoidable.
  • marking as triaged.

Fix order of implementations in the “implementations on foreign types” section #117521 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 2.4% [0.7%, 3.3%] 3
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 2.4% [0.7%, 3.3%] 3
  • the primary regressions are to diesel-doc-full (3.35%), syn-opt-full (3.07%) and serde-doc-full (0.69%).
  • the syn-opt-full “regression” is noise; the other two primary benchmarks are doc; this is rustdoc fix and that team has already said they don’t think they can do much to address the situation there.
  • marking as triaged.

dropck_outlives check whether generator witness needs_drop #117134 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 0.3% [0.2%, 0.3%] 5
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 0.3% [0.2%, 0.3%] 5
  • regressed ripgrep check for incr-patched:println (0.35%), incr-full (0.26%), and full (0.21%); regressed regex check for incr-patched:Job (0.29%) and incr-patched:println (0.24%).
  • this is easily justified; it is fixing a code-acceptance regression
  • marking as triaged

Add track_caller to transmute_copy #117510 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 0.4% [0.4%, 0.4%] 3
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 0.4% [0.4%, 0.4%] 3
  • regressed bitmaps incr-full for check (0.37%), opt (0.36%), and debug (0.36%).
  • this seems likely to be noise. It certainly paled in comparison to the regression associated with #117131 for this benchmark (see below).
  • marking as triaged.

Guarantee representation of None in NPO #115333 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 12.2% [0.9%, 30.1%] 8
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 12.2% [0.9%, 30.1%] 8
  • this is a docs change.
  • There was a spike of noise that somehow significantly (but temporarily) affected three instances of stm32f4 debug, as well as clap opt (all of which immediately went away in the next commit).
  • there is more discussion of why on zulip
  • already marked as triaged.

clone less #117540 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 16.5% [1.1%, 30.2%] 3
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 16.5% [1.1%, 30.2%] 3
  • the regressions here seem to be correlated with the same spike of noise that afflicted #115333.
  • marking as triaged

Run tidy license checker on more workspaces #115274 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 8.8% [3.3%, 17.8%] 3
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 8.8% [3.3%, 17.8%] 3
  • the regressions here seem to be correlated with the same spike of noise that afflicted #115333.
  • already marked as triaged

Warn users who set non_exhaustive_omitted_patterns lint level on a match arm #117094 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 0.2% [0.2%, 0.3%] 3
Regressions ❌ (secondary) 0.1% [0.1%, 0.1%] 4
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 0.2% [0.2%, 0.3%] 3
  • regressed check incr-full for cranelift-codegen (0.25%), cargo (0.22%) and hyper (0.21%).
  • this small amount does not appear to be noise
  • but it shouldn’t have any (significant) effect if the non_exhaustive_omitted_patterns lint is not in use.
  • marking as triaged

Rollup of 6 pull requests #117590 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 12.7% [0.4%, 30.9%] 6
Regressions ❌ (secondary) 16.2% [8.1%, 24.2%] 2
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 12.7% [0.4%, 30.9%] 6
  • the primary regressions (bitmaps and cargo), while huge, are also clearly noise.
  • marking as triaged.

enable parallel rustc front end in nightly builds #117435 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 2.9% [0.4%, 5.1%] 209
Regressions ❌ (secondary) 2.7% [0.4%, 9.1%] 219
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) 2.9% [0.4%, 5.1%] 209
  • I was not sure that wg-parallel-rustc was anticipating there being this much of a regression here.
  • after followup in zulip for wg-parallel-rustc, they clarified that their expectation of a 1.65% regression was based on wall-time that includes so-called “non-relevant results”. (Our default rustc-perf presentation filters out the non-relevant results, which will boost outliers and thus inflate the true mean effect.)
  • concluded that this was anticipated and marking as triaged

Improvements

bootstrap: do not purge docs on CI environment #117471 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -3.0% [-3.0%, -3.0%] 1
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) -3.0% [-3.0%, -3.0%] 1
  • single improvement to syn-opt-full that is almost certainly noise.
  • and was reverted anyway in PR #117533

Remove support for compiler plugins. #116412 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -10.1% [-23.2%, -0.9%] 8
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) -10.1% [-23.2%, -0.9%] 8
  • perf improvements here are mostly noise.

Rollup of 3 pull requests #117564 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -9.6% [-15.4%, -3.0%] 4
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) -9.6% [-15.4%, -3.0%] 4
  • again, perf improvements here seem to be noise

Hint optimizer about try-reserved capacity #117503 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -10.4% [-23.6%, -0.4%] 6
Improvements ✅ (secondary) -13.5% [-19.5%, -7.5%] 2
All ❌✅ (primary) -10.4% [-23.6%, -0.4%] 6
  • improvement here is transient noise on bitmaps and cargo.

Mixed

Update cargo #117462 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 0.9% [0.8%, 1.1%] 2
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) -0.5% [-0.6%, -0.4%] 2
Improvements ✅ (secondary) -1.5% [-1.5%, -1.5%] 1
All ❌✅ (primary) 0.2% [-0.6%, 1.1%] 4
  • regressions are to unicode-normalization-opt-incr-patched:println (1.06%) and clar-opt-full (0.81%)
  • the regressions to instruction counts seem small but they persist; i.e. this is not transient noise. (It is not clear whether the cost is borne from cargo itself, or if something has changed about how cargo is invoking rustc that incurs this cost.)
  • on the other hand, cycle counts and wall time are not impacted at all, which implies to me that this is probably not worth investigating.
  • marking as triaged.

Rollup of 5 pull requests #117459 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) - - 0
Regressions ❌ (secondary) 0.4% [0.3%, 0.5%] 4
Improvements ✅ (primary) -0.2% [-0.3%, -0.1%] 3
Improvements ✅ (secondary) - - 0
All ❌✅ (primary) -0.2% [-0.3%, -0.1%] 3
  • regressions are all minor and to variants of secondary benchmark coercions
  • marking as triaged

Add all RPITITs when augmenting param-env with GAT bounds in check_type_bounds #117131 (Comparison Link)

(instructions:u) mean range count
Regressions ❌ (primary) 32.3% [0.3%, 99.8%] 19
Regressions ❌ (secondary) - - 0
Improvements ✅ (primary) - - 0
Improvements ✅ (secondary) -1.4% [-1.7%, -1.0%] 6
All ❌✅ (primary) 32.3% [0.3%, 99.8%] 19
  • the regression to bitmaps (to 13 variants, ranging from 10.8% to 99.8%) appears persistent (non-noise)
  • it carries over to cycle-count and wall-clock time.
  • compiler-errors has been investigating, and it looks like PR #117542 will address it.
  • marking as triaged

Nominated Issues

RFC

  • “RFC: Packages as (optional) namespaces” rfcs#3243
    • @Ed Page is open to feedback and comments (on the Zulip thread)
    • other teams have already reviewed

Next week’s WG checkins

TODO

Next meetings' agenda draft: hackmd link