T Compiler Meeting Agenda 2025 10 23

T-compiler Meeting Agenda 2025-10-23

Announcements

  • One week to theRust 1.91 release
    • Note: yesterday we got an unusual number of regressions from the beta crater run, see rust#146902. Mostly already triaged or prioritized but another look probably won’t be bad.
  • 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

MCPs/FCPs

Backport nominations

T-compiler beta / T-compiler stable

  • :beta: “fix panic when rustc tries to reduce intermediate filenames len with utf8” rust#148018
    • Authored by tardyp (thanks!)
    • Fixes #147975 (maybe P-critical) from yesterdays’ beta crater run
    • Voting Zulip topic, in favor
  • :beta: “Revert monomorphization for func::{closure#0}rust#148023
    • Authored by Kivooeo (thanks!)
    • Fixes #147976 (reverting #143290)
    • Voting Zulip topic (probably the safest choice)
  • No stable nominations for T-compiler this time.

T-types beta / T-types stable

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

PRs S-waiting-on-t-compiler

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

  • “hidden type for impl ... captures lifetime that does not appear in bounds” rust#147529
    • Fixed by #147566 (beta backport accepted, will be backported)
  • “regression: ICE byte index is not a char boundary” rust#147975
    • fixed by #148018 (beta backport nominaed)

T-types

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

P-high regressions

P-high beta regressions

  • “regression: ICE all spans must be disjoint” rust#147973
    • (Maybe P-high) Needs scrutiny/bisection
    • Could be fixed by #147849 (waiting on mcp#929)
  • “regression: queries overflowed the depth limit” rust#147976
    • Fixed by #148023 (beta backport nominaed)

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs for 2025-10-21

Fairly busy week, with lots of mixed results. However, overall we ended with a slight improvement on average.

Triage done by @simulacrum. Revision range: 956f47c3..4068bafe

Summary:

(instructions:u)meanrangecount
Regressions (primary)0.5%[0.2%, 0.8%]21
Regressions (secondary)0.6%[0.1%, 2.5%]78
Improvements (primary)-0.8%[-7.3%, -0.1%]88
Improvements (secondary)-0.6%[-5.4%, -0.1%]87
All (primary)-0.6%[-7.3%, 0.8%]109

2 Regressions, 5 Improvements, 10 Mixed; 5 of them in rollups 39 artifact comparisons made in total

Regressions

Rollup of 11 pull requests #147745 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)1.0%[0.8%, 2.0%]7
Improvements (primary)--0
Improvements (secondary)-0.3%[-0.3%, -0.3%]1
All (primary)--0

Suspecting https://github.com/rust-lang/rust/pull/147718, but since regressions are only to match-stress it’s unlikely to be particularly interesting. Possibly a missing #[inline] to regain instruction counts.

deduced_param_attrs: check Freeze on monomorphic types. #147695 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.3%[0.3%, 0.4%]3
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)--0
All (primary)0.3%[0.3%, 0.4%]3

Appears to be a regression limited to the bitmaps benchmark. Most other benchmarks, though below noise threshold, are slightly improved or neutral. The initial perf run in PR was also a strict improvement. It doesn’t seem like a spurious regression, but also doesn’t seem like it merits further followup.

Improvements

Restrict sysroot crate imports to those defined in this repo. #143548 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-2.8%[-2.8%, -2.8%]1
Improvements (secondary)--0
All (primary)-2.8%[-2.8%, -2.8%]1

rustdoc-search: stringdex 0.0.2 #147660 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.8%[-2.5%, -0.2%]5
Improvements (secondary)-1.1%[-5.7%, -0.3%]9
All (primary)-0.8%[-2.5%, -0.2%]5

Rollup of 6 pull requests #147842 (Comparison Link)

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

Rollup of 4 pull requests #147884 (Comparison Link)

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

Add a != check to ChunkedBitSet::union. #147619 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)2.9%[2.9%, 2.9%]1
Regressions (secondary)--0
Improvements (primary)-3.5%[-9.3%, -0.1%]8
Improvements (secondary)--0
All (primary)-2.8%[-9.3%, 2.9%]9

One regression looks spurious so manually moved to improvements.

Mixed

Change int-to-ptr transmute lowering back to inttoptr #147541 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.2%, 0.2%]1
Regressions (secondary)2.2%[0.1%, 2.9%]8
Improvements (primary)--0
Improvements (secondary)-0.3%[-0.6%, -0.1%]12
All (primary)0.2%[0.2%, 0.2%]1

Mitigation for soundness problems, costs are worth it.

only call polymorphic array iter drop machinery when the type requires it #147353 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.7%[0.7%, 0.7%]2
Regressions (secondary)0.3%[0.1%, 1.1%]4
Improvements (primary)--0
Improvements (secondary)-0.1%[-0.1%, -0.0%]2
All (primary)0.7%[0.7%, 0.7%]2

Primary regressions to cargo and cranelift-codegen look real. However, previous runs on the same PR saw oscillating results, and since this likely affects CGU partitioning it doesn’t seem unexpected that would be the case. Marking as triaged.

Rollup of 12 pull requests #147662 (Comparison Link)

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

Per PR comment, perf change is from avoiding redundant UB checks: https://github.com/rust-lang/rust/pull/147620#issuecomment-3404145907.

Regressions don’t look spurious but seem unlikely to be practically investigated to any real effect due to the nature of this change affecting lots of generated code, and seeming like a good change on a surface level.

Rollup of 12 pull requests #147692 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.3%[0.1%, 0.9%]20
Regressions (secondary)0.6%[0.0%, 2.7%]48
Improvements (primary)-0.4%[-0.4%, -0.2%]3
Improvements (secondary)-0.1%[-0.1%, -0.0%]5
All (primary)0.2%[-0.4%, 0.9%]23

Change identification appears to be ongoing on the PR, with no clear cause as yet identified.

prefer alias candidates for sizedness + auto trait goals #144064 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.1%, 0.8%]16
Regressions (secondary)0.5%[0.2%, 1.8%]19
Improvements (primary)-0.2%[-0.6%, -0.1%]6
Improvements (secondary)-0.5%[-0.7%, -0.3%]8
All (primary)0.2%[-0.6%, 0.8%]22

Fix for a regression. Generally fairly neutral so further investigation doesn’t seem warranted.

Use regular Vec in BitSet. #147644 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.2%, 0.7%]16
Regressions (secondary)0.3%[0.0%, 0.8%]26
Improvements (primary)-0.4%[-0.7%, -0.1%]26
Improvements (secondary)-0.8%[-3.0%, -0.1%]69
All (primary)-0.1%[-0.7%, 0.7%]42

Marking as triaged as it’s overall a slight improvement.

TaskDeps improvements #147508 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.5%[0.5%, 0.5%]1
Regressions (secondary)0.5%[0.2%, 0.8%]17
Improvements (primary)-0.4%[-1.0%, -0.1%]25
Improvements (secondary)-0.7%[-1.2%, -0.2%]22
All (primary)-0.4%[-1.0%, 0.5%]26

Improvements definitely outweigh regressions.

Pre-compute MIR CFG caches for borrowck and other analyses #142540 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)1.7%[1.0%, 2.6%]4
Regressions (secondary)0.9%[0.1%, 1.6%]6
Improvements (primary)-0.2%[-0.3%, -0.1%]15
Improvements (secondary)-0.3%[-0.4%, -0.2%]13
All (primary)0.2%[-0.3%, 2.6%]19

I think this is fine. We’re seeing enough wins for more common Rust code (serde, image, syn, etc) that I think it is fine to take the hit for the two outliers (tt-muncher and cranelift-codegen for some reason), I do think it could be because of cloning taking more instructions than what gets saved, but I don’t think that is preventable.

https://github.com/rust-lang/rust/pull/142540#issuecomment-3416857137

I think I’m broadly in agreement with this summary of the results.

Limit impl_trait_header query to only trait impls #144607 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.2%, 0.2%]1
Regressions (secondary)0.2%[0.1%, 0.2%]11
Improvements (primary)-0.6%[-0.8%, -0.4%]7
Improvements (secondary)-1.8%[-2.6%, -0.1%]4
All (primary)-0.5%[-0.8%, 0.2%]8

Some regressions on smaller benchmarks. My guess is that this hurts the case where there’s lots of opt function lookups for that are now two query cache hit lookups rather than just one? But that seems to generally be less likely in our benchmarks than showing an improvement, so willing to just accept the regressions.

Simplify trivial constants in SimplifyConstCondition #147654 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.5%[0.5%, 0.5%]1
Regressions (secondary)0.6%[0.2%, 1.1%]4
Improvements (primary)-0.5%[-0.9%, -0.2%]13
Improvements (secondary)-0.2%[-0.3%, -0.1%]8
All (primary)-0.4%[-0.9%, 0.5%]14

Improvements outweigh regressions.

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

  • “Change codegen of LLVM intrinsics to be name-based, and add llvm linkage support for bf16(xN) and i1xNrust#140763 (last review activity: 3 months ago)
    • cc @Nikita Popov
  • “sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets” rust#123617 (last review activity: 2 months ago)
    • Seems it’s waiting on both T-lang and T-compiler (comment) cc @Wesley Wiser do you remember the status here?
  • “Provide additional context to errors involving const traits” rust#144194 (last review activity: 2 months ago)
    • guess we can probably reassign

Next meetings’ agenda draft: hackmd link