T Compiler Meeting Agenda 2026 09 10

T-compiler Meeting Agenda 2026-09-10

Announcements

  • 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 @Boxy so we can pass it along).

MCPs/FCPs

Backport nominations

T-compiler beta / T-compiler stable

  • No beta nominations for T-compiler this time.
  • No stable nominations for T-compiler this time.

PRs S-waiting-on-t-compiler

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

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

T-types

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

P-high regressions

Results for the latest beta 1.99 crater run is at https://github.com/rust-lang/rust/issues/161326

P-high beta regressions

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.
  • Note: the new trait solver in the nightly release channel is generating feedback and @_lcnr is keeping track of the regressions (here a list)

Performance logs

2026-09-07 Triage Log

This week we’ve hit quite a few regressions, both expected and unexpected. One of them has already been fixed, with fixes for a few others being discussed. One big improvement comes from caching the sanitizer set in Session, which fixes a large regression from last week. A few minor improvements landed, including a 75% reduction in memory usage while compiling bevy_render with the next trait solver.

Triage done by @JonathanBrouwer. Revision range: 5321a4f4..656a9da1

Summary:

(instructions:u)meanrangecount
Regressions (primary)0.5%[0.1%, 1.3%]121
Regressions (secondary)0.6%[0.1%, 10.3%]106
Improvements (primary)-0.6%[-1.9%, -0.1%]63
Improvements (secondary)-0.6%[-2.4%, -0.1%]65
All (primary)0.1%[-1.9%, 1.3%]184

3 Regressions, 2 Improvements, 8 Mixed; 6 of them in rollups 33 artifact comparisons made in total

Regressions

abby: always store nextgen region constraints in canonical form #161306 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.1%, 0.5%]57
Regressions (secondary)0.3%[0.1%, 0.6%]41
Improvements (primary)--0
Improvements (secondary)-0.1%[-0.1%, -0.1%]1
All (primary)0.2%[0.1%, 0.5%]57

The cause of the regression is not yet known, the author has been pinged about this. Given that this change should only affect the next trait solver, it is unexpected that it has an effect on performance on stable.

Rollup of 25 pull requests #162229 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.2%, 0.2%]1
Regressions (secondary)0.4%[0.2%, 0.7%]18
Improvements (primary)--0
Improvements (secondary)--0
All (primary)0.2%[0.2%, 0.2%]1

Perf regression triaged to #162229. This PR is reverting a perf improvement that caused a correctness regression, and the regression is therefore accepted. It seems likely that this will re-land in the future.

Rollup of 25 pull requests #162310 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)1.0%[0.2%, 2.6%]50
Regressions (secondary)1.2%[0.2%, 5.4%]60
Improvements (primary)--0
Improvements (secondary)-0.3%[-0.4%, -0.2%]5
All (primary)1.0%[0.2%, 2.6%]50

Caused by #162179 and #161953.

  • For #162179: The const_of_item query went from only being supported on type consts and ICEing on non-type consts, and instead, supports all constants, began to return Option instead of the value directly, and returns None if it’s not a “direct” constant. This extra storage of storing None for all constants, rather than just type consts, will increase metadata and query cache size. Unfortunately this is unavoidable, we can’t detect direct const stuff in the def_collector, and is worth a minor perf hit IMO.

  • For #161953: The sanitizers() function before just did a single bitor. Now it iterates over an array and performs a bunch of computation. This is fixed in #162371 by caching the function result.

Improvements

Mixed

Add intrinsics for integer minimum and maximum #161081 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.1%[0.1%, 0.2%]4
Regressions (secondary)0.2%[0.2%, 0.2%]1
Improvements (primary)-0.9%[-0.9%, -0.9%]1
Improvements (secondary)--0
All (primary)-0.1%[-0.9%, 0.2%]5

Perf changes look mostly like the kind of thing that makes sense from better inlining: reduced is_mir_available calls, and permuted codegen schedules from different CGU partitioning that sometimes is better, sometimes worse. The pre-merge perf run was more green, which is expected based on this theory.

Rollup of 16 pull requests #162117 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.3%[0.3%, 0.3%]1
Regressions (secondary)0.4%[0.0%, 0.7%]29
Improvements (primary)-0.1%[-0.1%, -0.1%]1
Improvements (secondary)-0.4%[-1.0%, -0.0%]27
All (primary)0.1%[-0.1%, 0.3%]2

Perf improvements caused by https://github.com/rust-lang/rust/pull/161929 and perf regression caused by https://github.com/rust-lang/rust/pull/162051

  • For #161929, the unexpected improvement is caused by calling the def_kind query fewer times.
  • For #162051, even though the effect is quite strong, it is just noise. The benchmarks affected are parsing benchmarks, which this PR does not touch, and the regression does not reproduce locally.

Revert “Use drop_guard in some places in {core,alloc,std}” #162128 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.7%[0.3%, 1.5%]3
Regressions (secondary)--0
Improvements (primary)-0.5%[-1.9%, -0.2%]46
Improvements (secondary)-0.6%[-1.8%, -0.2%]26
All (primary)-0.4%[-1.9%, 1.5%]49

This PR is a revert of a PR from last week, because of the performance regressions caused by that PR. The performance improvements strongly outweigh the regressions.

Rollup of 3 perf-sensitive pull requests #162183 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.1%[0.1%, 0.2%]9
Improvements (primary)-0.3%[-1.3%, -0.1%]49
Improvements (secondary)-0.3%[-0.7%, -0.1%]39
All (primary)-0.3%[-1.3%, -0.1%]49

This is a rollup of three perf-sensitive pull requests:

Update cargo submodule #161789 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.3%[0.2%, 0.4%]2
Regressions (secondary)0.2%[0.1%, 0.2%]2
Improvements (primary)--0
Improvements (secondary)-1.0%[-2.1%, -0.1%]11
All (primary)0.3%[0.2%, 0.4%]2

A small performance regression in unicode-normalization, caused by cargo setting extra options that it needs for the stabilization of cargo lints. The PR also comes with a nice improvement on the large-workspace benchmark, the cause of which is not clear. The regression is worth it, so this is accepted.

always rerun if we normalize local opaques #161795 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)6.8%[4.7%, 10.7%]3
Improvements (primary)--0
Improvements (secondary)-0.1%[-0.1%, -0.1%]1
All (primary)--0

The regression concentrates in a stress test which is very sensitive to changes on opaques. The regressions are unavoidable. only on secondary benchmarks, and need to be accepted to fix a bug.

Rollup of 14 pull requests #162333 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.1%, 0.7%]94
Regressions (secondary)0.3%[0.2%, 0.5%]35
Improvements (primary)-0.3%[-0.5%, -0.2%]6
Improvements (secondary)-0.3%[-0.5%, -0.2%]12
All (primary)0.3%[-0.5%, 0.7%]100

Caused by two PRS: #160745 and #162250.

  • #160745 caused a regression because it removes the noalias llvm annotations of the closure argument in FnOnce closures. The topic is nominated to the opsem team for discussion, of whether this deserves a revert.
  • #162250 is a minor regression (+0.3% on 5 secondary benchmarks), which is required to fix the correctness of hashing span locations. The regression is only visible in doc builds.

Use query for Variant InhabitedPredicate #159541 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.1%[0.1%, 0.2%]2
Improvements (primary)-0.4%[-0.5%, -0.4%]2
Improvements (secondary)-0.1%[-0.1%, -0.1%]3
All (primary)-0.4%[-0.5%, -0.4%]2

Improvements are real, achieved by introducing new caching. The regression is noise.

Nominated Issues

T-compiler

  • No I-compiler-nominated issues this time.

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • “support passing i128 to assembly on aarch64” rust#154342 (last review activity: 5 months ago)
    • cc @Amanieu d’Antras
  • “Fix quadratic MIR blowup for large vec![] expressions with Drop-implementing elements in async functions” rust#154720 (last review activity: 5 months ago)
    • cc @Ben Kimock (Saethlin) (or reroll?)
  • “Move checking placeholder types in return types to typeck” rust#153243 (last review activity: 4 months ago)
    • cc @Ben Kimock (Saethlin) @León Orell Liehr (fmease)

Next meetings’ agenda draft: hackmd link