Skip to content

Conversation

jhpratt
Copy link
Member

@jhpratt jhpratt commented Sep 4, 2025

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

dpaoliello and others added 13 commits August 21, 2025 09:18
 - Add a fallback implementation for the intrinsics
 - Add LLVM backend support for funnel shifts

Co-Authored-By: folkertdev <[email protected]>
rust-analyzer would like to use a non-interned `Probe` there.

Also rename it to `Probe` for this reason.
Promote aarch64-pc-windows-msvc to Tier 1

Per <rust-lang/rfcs#3817>

Tracking issue: <rust-lang#145671>
…ross35

Implement Integer funnel shifts

Tracking issue: rust-lang#145686
ACP: rust-lang/libs-team#642

This implements funnel shifts on primitive integer types. Implements this for cg_llvm, with a fallback impl for everything else

Thanks `@folkertdev` for the fixes and tests

cc `@rust-lang/libs-api`
compiletest: Implement an experimental `--new-output-capture` mode

Thanks to the efforts on rust-lang#140192, compiletest no longer has an unstable dependency on libtest, but it still has an unstable dependency on `#![feature(internal_output_capture)]`. That makes building compiletest more complicated than for most other bootstrap tools.

This PR therefore adds opt-in support for an experimental compiletest mode that avoids the use of `internal_output_capture` APIs, and instead uses more mundane means to capture the output of individual test runners.

Each `TestCx` now contains `&dyn ConsoleOut` references for stdout and stderr. All print statements in `compiletests::runtest` have been replaced with `write!` or `writeln!` calls that explicitly write to one of those trait objects. The underlying implementation then forwards to `print!` or `eprint!` (for `--no-capture` or old-output-capture mode), or writes to a separate buffer (in new-output-capture mode).

---

Currently, new-output-capture is disabled by default. It can be explicitly enabled in one of two ways:

- When running `x test`, pass `--new-output-capture=on` as a *compiletest* argument (after `--`).
  - E.g. `x test ui -- --new-output-capture=on`.
  - The short form is `-Non` or `-Ny`.
- Set environment variable `COMPILETEST_NEW_OUTPUT_CAPTURE=on`.

After some amount of opt-in testing, new-output-capture will become the default (with a temporary opt-out). Eventually, old-output-capture and `#![feature(internal_output_capture)]` will be completely removed from compiletest.

r? jieyouxu
Update bootstrap's dependencies to remove winapi and old windows-sys

Bumps `opener` to 0.8 and `junction` to 1.3 - this removes the dependency on `winapi` (unless the `build-metrics` feature is enabled) and replaces the usage of `windows-sys` 0.52 with 0.60.

Together this means that bootstrap can now be built for Arm64EC.
Don't require next-solver `ProbeRef` to be `Copy`

rust-analyzer would like to use a non-interned `Probe` there.

Also rename it to `Probe` for this reason.

We can make it `Copy` (although then `Probe` will need to be `Clone` for rust-analyzer) but it seems just non-needed.

r? types
@rustbot rustbot added A-compiletest Area: The compiletest test runner A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-testsuite Area: The testsuite used to check the correctness of rustc S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) rollup A PR which is a rollup labels Sep 4, 2025
@jhpratt
Copy link
Member Author

jhpratt commented Sep 4, 2025

@bors r+ rollup=never p=5

@bors
Copy link
Collaborator

bors commented Sep 4, 2025

📌 Commit b4f76b3 has been approved by jhpratt

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 4, 2025
@bors
Copy link
Collaborator

bors commented Sep 4, 2025

⌛ Testing commit b4f76b3 with merge 45b9d13...

@bors
Copy link
Collaborator

bors commented Sep 4, 2025

☀️ Test successful - checks-actions
Approved by: jhpratt
Pushing 45b9d13 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Sep 4, 2025
@bors bors merged commit 45b9d13 into rust-lang:master Sep 4, 2025
11 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Sep 4, 2025
@rust-timer
Copy link
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#145682 Promote aarch64-pc-windows-msvc to Tier 1 b7c728c860d5767ed74fb111e5cb9251f51bc7d2 (link)
#145690 Implement Integer funnel shifts 6ccbe1858be8a5f3abcc645bbea9f5fef886df2f (link)
#146119 compiletest: Implement an experimental `--new-output-captur… b7da574d2114a19cede7452a12fff7d8f41262ff (link)
#146168 Update bootstrap's dependencies to remove winapi and old wi… 78757e52f2fbf57555c144649c227254918cfd5e (link)
#146182 Don't require next-solver ProbeRef to be Copy 7ac85de892fec4f5a6cee01d4d392a8d3e179650 (link)

previous master: 79bdc62756

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

Copy link
Contributor

github-actions bot commented Sep 4, 2025

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing 79bdc62 (parent) -> 45b9d13 (this PR)

Test differences

Show 4064 test diffs

Stage 1

  • num::u128::test_funnel_shift: [missing] -> pass (J0)
  • num::u128::test_funnel_shifts_runtime: [missing] -> pass (J0)
  • num::u128::test_funnel_shl_overflow: [missing] -> pass (J0)
  • num::u128::test_funnel_shr_overflow: [missing] -> pass (J0)
  • num::u16::test_funnel_shift: [missing] -> pass (J0)
  • num::u16::test_funnel_shifts_runtime: [missing] -> pass (J0)
  • num::u16::test_funnel_shl_overflow: [missing] -> pass (J0)
  • num::u16::test_funnel_shr_overflow: [missing] -> pass (J0)
  • num::u32::test_funnel_shift: [missing] -> pass (J0)
  • num::u32::test_funnel_shifts_runtime: [missing] -> pass (J0)
  • num::u32::test_funnel_shl_overflow: [missing] -> pass (J0)
  • num::u32::test_funnel_shr_overflow: [missing] -> pass (J0)
  • num::u64::test_funnel_shift: [missing] -> pass (J0)
  • num::u64::test_funnel_shifts_runtime: [missing] -> pass (J0)
  • num::u64::test_funnel_shl_overflow: [missing] -> pass (J0)
  • num::u64::test_funnel_shr_overflow: [missing] -> pass (J0)
  • num::u8::test_funnel_shift: [missing] -> pass (J0)
  • num::u8::test_funnel_shifts_runtime: [missing] -> pass (J0)
  • num::u8::test_funnel_shl_overflow: [missing] -> pass (J0)
  • num::u8::test_funnel_shr_overflow: [missing] -> pass (J0)

Stage 2

  • num::u128::test_funnel_shift: [missing] -> pass (J1)
  • num::u128::test_funnel_shifts_runtime: [missing] -> pass (J1)
  • num::u128::test_funnel_shl_overflow: [missing] -> pass (J1)
  • num::u128::test_funnel_shr_overflow: [missing] -> pass (J1)
  • num::u16::test_funnel_shift: [missing] -> pass (J1)
  • num::u16::test_funnel_shifts_runtime: [missing] -> pass (J1)
  • num::u16::test_funnel_shl_overflow: [missing] -> pass (J1)
  • num::u16::test_funnel_shr_overflow: [missing] -> pass (J1)
  • num::u32::test_funnel_shift: [missing] -> pass (J1)
  • num::u32::test_funnel_shifts_runtime: [missing] -> pass (J1)
  • num::u32::test_funnel_shl_overflow: [missing] -> pass (J1)
  • num::u32::test_funnel_shr_overflow: [missing] -> pass (J1)
  • num::u64::test_funnel_shift: [missing] -> pass (J1)
  • num::u64::test_funnel_shifts_runtime: [missing] -> pass (J1)
  • num::u64::test_funnel_shl_overflow: [missing] -> pass (J1)
  • num::u64::test_funnel_shr_overflow: [missing] -> pass (J1)
  • num::u8::test_funnel_shift: [missing] -> pass (J1)
  • num::u8::test_funnel_shifts_runtime: [missing] -> pass (J1)
  • num::u8::test_funnel_shl_overflow: [missing] -> pass (J1)
  • num::u8::test_funnel_shr_overflow: [missing] -> pass (J1)

Additionally, 4024 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 45b9d13b455f820c12760e0fbf6ce69110a3aeda --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 6273.4s -> 8483.7s (35.2%)
  2. pr-check-1: 1337.6s -> 1633.3s (22.1%)
  3. dist-aarch64-apple: 7156.2s -> 5682.5s (-20.6%)
  4. x86_64-gnu-llvm-19: 2349.4s -> 2784.6s (18.5%)
  5. i686-gnu-2: 5404.5s -> 6353.0s (17.6%)
  6. i686-gnu-1: 7493.6s -> 8610.2s (14.9%)
  7. aarch64-gnu-llvm-19-2: 2176.5s -> 2473.0s (13.6%)
  8. aarch64-gnu-debug: 3814.9s -> 4320.0s (13.2%)
  9. dist-x86_64-apple: 7336.2s -> 8221.3s (12.1%)
  10. x86_64-gnu-llvm-20-3: 7423.5s -> 6548.0s (-11.8%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (45b9d13): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.1% [0.1%, 0.1%] 1
Regressions ❌
(secondary)
0.3% [0.1%, 0.4%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.2% [-0.5%, -0.1%] 7
All ❌✅ (primary) 0.1% [0.1%, 0.1%] 1

Max RSS (memory usage)

Results (primary 2.9%, secondary 1.5%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
4.1% [1.1%, 9.8%] 3
Regressions ❌
(secondary)
1.5% [1.5%, 1.5%] 1
Improvements ✅
(primary)
-0.8% [-0.8%, -0.8%] 1
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 2.9% [-0.8%, 9.8%] 4

Cycles

Results (primary 3.1%, secondary -2.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
3.1% [3.1%, 3.1%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.3% [-2.3%, -2.3%] 1
All ❌✅ (primary) 3.1% [3.1%, 3.1%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 466.814s -> 466.452s (-0.08%)
Artifact size: 387.87 MiB -> 387.89 MiB (0.00%)

@rustbot rustbot added the perf-regression Performance regression. label Sep 4, 2025
@jhpratt jhpratt deleted the rollup-mam0bss branch September 4, 2025 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-compiletest Area: The compiletest test runner A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-testsuite Area: The testsuite used to check the correctness of rustc merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. rollup A PR which is a rollup S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants