T Compiler Meeting Agenda 2022 12 01

T-compiler Meeting Agenda 2022-12-01

Announcements

Other WG meetings (calendar link)

MCPs/FCPs

  • New MCPs (take a look, see if you like them!)
  • Old MCPs (not seconded, take a look)
    • “Add #[alias] attribute to allow symbol aliasing” compiler-team#526 (last review activity: 4 months ago)
    • “Use RangeInclusive in SpanData instead of lo/hi” compiler-team#534 (last review activity: 3 months ago)
    • " Promote i586-unknown-linux-gnu to Tier 2 with Host Tools " compiler-team#543 (last review activity: 3 months ago)
    • “Lower baseline expectations for i686 unix-like targets” compiler-team#548 (last review activity: 2 months ago)
    • “MCP: Flag to disable extended error info.” compiler-team#550 (last review activity: 2 months ago)
    • “configurable rustc timeout for compiletest tests” compiler-team#554 (last review activity: 2 months ago)
    • “Rustc Contributor Program Major Change Proposal” compiler-team#557 (last review activity: about 37 days ago)
    • “Introduce a #[rustc::*] tool attribute namespace and provide a stable #[rustc::on_unimplemented] attribute” compiler-team#560 (last review activity: about 43 days ago)
    • -Z instrument-xray option” compiler-team#561 (last review activity: about 43 days ago)
    • “New tier-3 targets for OpenHarmony” compiler-team#568 (last review activity: about 12 days ago)
  • Pending FCP requests (check your boxes!)
    • “Encode spans relative to the enclosing item – enable by default” rust#84762
    • “Change bindings_with_variant_name to deny-by-default” rust#104154
  • Things in FCP (make sure you’re good with it)
  • Accepted MCPs
  • Finalized FCPs (disposition merge)
    • “Make PROC_MACRO_DERIVE_RESOLUTION_FALLBACK a hard error” rust#84022
    • “Make Sized coinductive, again” rust#100386
    • “Handle projections as uncovered types during coherence check” rust#100555
    • “Elaborate supertrait obligations when deducing closure signatures” rust#101834
    • “make const_err a hard error” rust#102091
    • “make unaligned_reference a hard error” rust#102513
    • “make order_dependent_trait_objects show up in future-breakage reports” rust#102635
    • “Stabilize raw-dylib for non-x86” rust#102793
    • “Use token::Lit in ast::ExprKind::Lit.” rust#102944
    • “Remove drop order twist of && and || and make them associative” rust#103293
    • “Unreserve braced enum variants in value namespace” rust#103578
    • “Stabilize native library modifier verbatimrust#104360
    • “Expand a style-guide principle: readability in plain text” rust#104506

WG checkins

Backport nominations

T-compiler beta / T-compiler stable

  • :beta: “Reverts check done by #100757” rust#104610

    • nominated by @Michael Goulet (compiler-errors)
    • Reverts #100757 which caused some issues in production crates (#103274 #104322 #104606)
    • this revert #100757 reopened issues #95134, #92004 and #92470 which now crash again
  • :beta: “Statics used in reachable function’s inline asm are reachable” rust#105023

    • Fixes #104925 (could not link libraries using inline asm)
    • nominated by @Wesley Wiser to allow reaching next stable along #103168 (stabilization of asm_sym)
  • No stable nominations for T-compiler this time.

T-rustdoc beta / T-rustdoc stable

  • No backport nominations for T-rustdoc this time.

:back: / :shrug: / :hand:

PRs S-waiting-on-team

T-compiler

  • “Encode spans relative to the enclosing item – enable by default” rust#84762
    • FCP open, needs a couple more ticks after review (link)
    • @mw raises concern about subtle bugs (comment)
  • (other hidden issues in progress or waiting on other teams, details here)

Oldest PRs waiting for review

T-compiler

  • “Allow to feed a value in another query’s cache” rust#96840
    • unsure about the status, does #104940 supersedes this? cc @cjgillot
  • “Error parsing lifetime following by Sized and message + between them” rust#103020
    • cc: @Michael Goulet (compiler-errors)
  • “Inferred lifetimes cleanup” rust#102673 (last review activity: about 55 days ago)
    • rust highfive added T-compiler: is it the case though?
  • “add with_hash_task to generate DepNode deterministically” rust#100987 (last review activity: about 45 days ago)
    • cc @cjgillot
  • “Remove box_free lang item” rust#100036 (last review activity: about 39 days ago)
    • needs review? cc @Wesley Wiser
  • “Add SEMICOLON_IN_EXPRESSIONS_FROM_MACROS to future-incompat report” rust#103418 (last review activity: about 34 days ago)
    • needs T-compiler signoff?

Issues of Note

Short Summary

P-critical

T-compiler

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

T-rustdoc

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

P-high regressions

P-high beta regressions

  • (issue #102754 recently discussed in past meetings)

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs for 2022-11-29

A relatively quiet week for performance, with the notable exception of “Avoid GenFuture shim when compiling async constructs #104321” which brought sizeable wins on a number of stress test benchmarks. It probably won’t be of huge benefit to most codebases, but should provide smaller wins to folks with large amounts of async-generated futures.

Triage done by @simulacrum. Revision range: a78c9bee4d9d51a3891bd8ecae1f28a93b83653b..8a09420ac48658cad726e0a6997687ceac4151e3

Summary:

(instructions:u) mean range count
Regressions (primary) 1.0% [0.3%, 1.5%] 11
Regressions (secondary) 1.8% [0.4%, 3.0%] 25
Improvements (primary) -1.0% [-3.8%, -0.3%] 148
Improvements (secondary) -6.7% [-87.7%, -0.3%] 107
All (primary) -0.9% [-3.8%, 1.5%] 159

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

Regressions

Rollup of 6 pull requests #104758 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.3% [0.3%, 0.3%] 1
Regressions (secondary) 2.1% [0.6%, 7.1%] 13
Improvements (primary) - - 0
Improvements (secondary) - - 0
All (primary) 0.3% [0.3%, 0.3%] 1

This PR was a perf regression (see the report here https://github.com/rust-lang/rust/pull/104758#issuecomment-1325100344). It’s relatively small and mostly limited to secondary workloads so I’m marking as triaged.

Branch Clause from Predicate #104846 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.8% [0.2%, 2.4%] 38
Regressions (secondary) 0.4% [0.3%, 0.8%] 5
Improvements (primary) - - 0
Improvements (secondary) - - 0
All (primary) 0.8% [0.2%, 2.4%] 38

Unexpected regression, PR reviewer and author are going to look into it.

Add ConstKind::Expr #99798 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.3% [0.2%, 0.5%] 6
Regressions (secondary) 0.9% [0.3%, 1.6%] 21
Improvements (primary) - - 0
Improvements (secondary) -0.2% [-0.2%, -0.2%] 1
All (primary) 0.3% [0.2%, 0.5%] 6

Previous perf runs showed slight improvements, but the post-merge one shows regressions. They are mostly among secondary benchmarks.

Improvements

Fix perf regression by correctly matching keywords #104410 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) - - 0
Regressions (secondary) - - 0
Improvements (primary) -0.3% [-0.5%, -0.2%] 32
Improvements (secondary) -0.8% [-1.1%, -0.5%] 8
All (primary) -0.3% [-0.5%, -0.2%] 32

Use an IndexVec to cache queries with index-like key #103808 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) - - 0
Regressions (secondary) - - 0
Improvements (primary) -0.8% [-2.3%, -0.2%] 133
Improvements (secondary) -1.2% [-7.8%, -0.2%] 105
All (primary) -0.8% [-2.3%, -0.2%] 133

Avoid GenFuture shim when compiling async constructs #104321 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) - - 0
Regressions (secondary) - - 0
Improvements (primary) - - 0
Improvements (secondary) -28.0% [-87.8%, -1.9%] 22
All (primary) - - 0

Mixed

optimize field ordering by grouping m*2^n-sized fields with equivalently aligned ones #102750 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.5% [0.3%, 0.8%] 4
Regressions (secondary) 1.2% [0.3%, 2.3%] 26
Improvements (primary) -0.5% [-2.2%, -0.2%] 44
Improvements (secondary) -0.6% [-1.2%, -0.1%] 22
All (primary) -0.4% [-2.2%, 0.8%] 48

Some followup discussion on https://github.com/rust-lang/rust/issues/104807 but overall a roughly neutral change.

privacy: Fix more (potential) issues with effective visibilities #104602 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.3% [0.2%, 0.3%] 8
Regressions (secondary) 2.2% [0.3%, 3.6%] 17
Improvements (primary) -1.0% [-1.4%, -0.5%] 13
Improvements (secondary) - - 0
All (primary) -0.5% [-1.4%, 0.3%] 21

This fixes correctness issues, and the regressions are mostly in unused-warnings which is a stress test where 3% doesn’t really matter. Plus libc got a bit faster. So overall, not a performance concern.

Manually implement PartialEq for Option<T> and specialize non-nullable types #103556 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 2.1% [2.1%, 2.1%] 1
Regressions (secondary) - - 0
Improvements (primary) -0.3% [-0.4%, -0.2%] 2
Improvements (secondary) -0.3% [-0.4%, -0.3%] 2
All (primary) 0.5% [-0.4%, 2.1%] 3

Relatively few relatively small changes, no further investigation needed.

Stop peeling the last iteration of the loop in Vec::resize_with #104818 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.8% [0.8%, 0.8%] 1
Regressions (secondary) 0.3% [0.3%, 0.3%] 1
Improvements (primary) -0.3% [-0.3%, -0.3%] 3
Improvements (secondary) -0.3% [-0.4%, -0.1%] 7
All (primary) -0.0% [-0.3%, 0.8%] 4

Perf changes are very small, and wins slightly outweigh losses.

Update VecDeque implementation to use head+len instead of head+tail #102991 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) - - 0
Regressions (secondary) 0.8% [0.2%, 1.4%] 4
Improvements (primary) -0.3% [-0.5%, -0.2%] 3
Improvements (secondary) -0.3% [-0.5%, -0.2%] 3
All (primary) -0.3% [-0.5%, -0.2%] 3

Performance looks like overall neutral to slight win.

Rollup of 6 pull requests #105008 (Comparison Link)

(instructions:u) mean range count
Regressions (primary) 0.6% [0.2%, 0.9%] 8
Regressions (secondary) - - 0
Improvements (primary) -0.9% [-0.9%, -0.8%] 2
Improvements (secondary) -2.4% [-2.7%, -2.1%] 6
All (primary) 0.3% [-0.9%, 0.9%] 10

keccak improvements may be spurious but overall neutral so no further investigation warranted.

Nominated Issues

T-compiler

  • No nominated issues for T-compiler this time.

RFC

  • No nominated RFCs for T-compiler this time.

Next week’s WG checkins

  • @_WG-rustc-dev-guide by @Santiago Pastorino and @Yuki Okushi|217081
  • Impl Trait initiative by @oli