Commit Graph

227141 Commits

Author SHA1 Message Date
Nicholas Nethercote
7c3ce02a11 Introduce a minimum CGU size in non-incremental builds.
Because tiny CGUs make compilation less efficient *and* result in worse
generated code.

We don't do this when the number of CGUs is explicitly given, because
there are times when the requested number is very important, as
described in some comments within the commit. So the commit also
introduces a `CodegenUnits` type that distinguishes between default
values and user-specified values.

This change has a roughly neutral effect on walltimes across the
rustc-perf benchmarks; there are some speedups and some slowdowns. But
it has significant wins for most other metrics on numerous benchmarks,
including instruction counts, cycles, binary size, and max-rss. It also
reduces parallelism, which is good for reducing jobserver competition
when multiple rustc processes are running at the same time. It's smaller
benchmarks that benefit the most; larger benchmarks already have CGUs
that are all larger than the minimum size.

Here are some example before/after CGU sizes for opt builds.

- html5ever
  - CGUs: 16, mean size: 1196.1, sizes: [3908, 2992, 1706, 1652, 1572,
    1136, 1045, 948, 946, 938, 579, 471, 443, 327, 286, 189]
  - CGUs: 4, mean size: 4396.0, sizes: [6706, 3908, 3490, 3480]

- libc
  - CGUs: 12, mean size: 35.3, sizes: [163, 93, 58, 53, 37, 8, 2 (x6)]
  - CGUs: 1, mean size: 424.0, sizes: [424]

- tt-muncher
  - CGUs: 5, mean size: 1819.4, sizes: [8508, 350, 198, 34, 7]
  - CGUs: 1, mean size: 9075.0, sizes: [9075]

Note that CGUs of size 100,000+ aren't unusual in larger programs.
2023-06-14 10:57:44 +10:00
Nicholas Nethercote
95d85899ce Add more measurements to the CGU debug printing.
For example, we go from this:
```
FINAL (4059 items, total_size=232342; 16 CGUs, max_size=39608,
min_size=5468, max_size/min_size=7.2):
- CGU[0] regex.f2ff11e98f8b05c7-cgu.0 (318 items, size=39608):
  - fn ...
  - fn ...
```
to this:
```
FINAL
- unique items: 2726 (1459 root + 1267 inlined), unique size: 201214 (146046 root + 55168 inlined)
- placed items: 4059 (1459 root + 2600 inlined), placed size: 232342 (146046 root + 86296 inlined)
- placed/unique items ratio: 1.49, placed/unique size ratio: 1.15
- CGUs: 16, mean size: 14521.4, sizes: [39608, 31122, 20318, 20236, 16268, 13777, 12310, 10531, 10205, 9810, 9250, 9065 (x2), 7785, 7524, 5468]

- CGU[0]
  - regex.f2ff11e98f8b05c7-cgu.0, size: 39608
  - items: 318, mean size: 124.6, sizes: [28395, 3418, 558, 485, 259, 228, 176, 166, 146, 118, 117 (x3), 114 (x5), 113 (x3), 101, 84, 82, 77, 76, 72, 71 (x2), 66, 65, 62, 61, 59 (x2), 57, 55, 54 (x2), 53 (x4), 52 (x5), 51 (x4), 50, 48, 47, 46, 45 (x3), 44, 43 (x5), 42, 40, 38 (x4), 37, 35, 34 (x2), 32 (x2), 31, 30, 28 (x2), 27 (x2), 26 (x3), 24 (x2), 23 (x3), 22 (x2), 21, 20, 16 (x4), 15, 13 (x7), 12 (x3), 11 (x6), 10, 9 (x2), 8 (x4), 7 (x8), 6 (x38), 5 (x21), 4 (x7), 3 (x45), 2 (x63), 1 (x13)]
  - fn ...
  - fn ...
```
This is a lot more information, distinguishing between root items and
inlined items, showing how much duplication there is of inlined items,
plus the full range of sizes for CGUs and items within CGUs. All of
which is really helpful when analyzing this stuff and trying different
CGU formation algorithms.
2023-06-14 10:15:59 +10:00
bors
6330daade9 Auto merge of #112062 - lukas-code:unsized-layout, r=wesleywiser
Make struct layout not depend on unsizeable tail

fixes (after backport) https://github.com/rust-lang/rust/issues/112048

Since unsizing `Ptr<Foo<T>>` -> `Ptr<Foo<U>` just copies the pointer and adds the metadata, the layout of `Foo` must not depend on niches in and alignment of the tail `T`.

Nominating for beta 1.71, because it will have this issue: `@rustbot` label beta-nominated
2023-06-13 22:34:59 +00:00
Celina G. Val
af4040a5c1 Use a Stable trait to translate mir -> smir
I was wondering if this would be a bit cleaner.
2023-06-13 15:17:01 -07:00
Michael Goulet
01377e8064 opportunistically resolve regions 2023-06-13 22:10:51 +00:00
Michael Goulet
7ff79cf4aa Move test 2023-06-13 21:54:11 +00:00
Michael Goulet
c92342d58d Erase regions even if normalization fails in writeback 2023-06-13 21:53:01 +00:00
Henrik Böving
82466625b4 fix: get the l4re target working again 2023-06-13 20:41:33 +00:00
Wesley Wiser
b982f3a988 Add test case for unsizing with niche 2023-06-13 15:32:42 -04:00
bors
2445d740f7 Auto merge of #112314 - ferrocene:pa-core-alloc-abort, r=bjorn3
Ignore `core`, `alloc` and `test` tests that require unwinding on `-C panic=abort`

Some of the tests for `core` and `alloc` require unwinding through their use of `catch_unwind`. These tests fail when testing using `-C panic=abort` (in my case through a target without unwinding support, and `-Z panic-abort-tests`), while they should be ignored as they don't indicate a failure.

This PR marks all of these tests with this attribute:

```rust
#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
```

I'm not aware of a way to test this on rust-lang/rust's CI, as we don't test any target with `-C panic=abort`, but I tested this locally on a Ferrocene target and it does indeed make the test suite pass.
2023-06-13 19:03:27 +00:00
bors
371994e0d8 Auto merge of #112314 - ferrocene:pa-core-alloc-abort, r=bjorn3
Ignore `core`, `alloc` and `test` tests that require unwinding on `-C panic=abort`

Some of the tests for `core` and `alloc` require unwinding through their use of `catch_unwind`. These tests fail when testing using `-C panic=abort` (in my case through a target without unwinding support, and `-Z panic-abort-tests`), while they should be ignored as they don't indicate a failure.

This PR marks all of these tests with this attribute:

```rust
#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
```

I'm not aware of a way to test this on rust-lang/rust's CI, as we don't test any target with `-C panic=abort`, but I tested this locally on a Ferrocene target and it does indeed make the test suite pass.
2023-06-13 19:03:27 +00:00
bohan
f7330eb752 fix(resolve): update shadowed_glob more precision 2023-06-14 01:38:35 +08:00
bjorn3
485d7e129f Remove outdated fixme 2023-06-13 16:39:59 +00:00
bjorn3
a691b14aee Allow skipping tests from the commandline 2023-06-13 16:39:59 +00:00
bjorn3
8c1c84d79e Copy Cargo.lock over in ./y.sh prepare
This makes it easier for ./x.py to vendor all dependencies
2023-06-13 16:39:59 +00:00
bjorn3
bcac222013 Lazily patch the standard library 2023-06-13 16:39:59 +00:00
bjorn3
d0ea8bbc5e Only copy library dir for stdlib
When building as part of rust, the sysroot source dir is symlinked to
the main source dir, which contains the build dir to which we are likely
copying.
2023-06-13 16:39:59 +00:00
bjorn3
6b9af8cb36 Disable all incremental compilation for CARGO_BUILD_INCREMENTAL=false 2023-06-13 16:39:59 +00:00
bjorn3
eb3e8bb7d7 Move some profile settings out of the stdlib cargo workspace patch 2023-06-13 16:39:59 +00:00
bjorn3
8ad9e9f861 Ensure everything has a lockfile 2023-06-13 16:39:59 +00:00
bjorn3
d3da972441 Write stdlib workspace Cargo.toml directly in prepare.rs 2023-06-13 16:39:59 +00:00
bjorn3
67f9fe6863 Lazily patch all test projects 2023-06-13 16:39:59 +00:00
bjorn3
3baee66f9b Rework standard library building 2023-06-13 16:39:59 +00:00
bjorn3
54eaa5382c Enable compiler-builtins no-asm feature using --features flag 2023-06-13 16:39:59 +00:00
bjorn3
b9129c0d6b Rename a couple of build dirs for consistency 2023-06-13 16:39:59 +00:00
bjorn3
fc23a8a7e0 Lazily patch coretests 2023-06-13 16:39:59 +00:00
bjorn3
2c38effe28 Don't patch in place in apply_patches
This will make it easier to skip patching if unnecessary in the future
2023-06-13 16:39:59 +00:00
bjorn3
75327f8587 Reuse existing download in y.sh prepare if fresh 2023-06-13 16:39:59 +00:00
bjorn3
0e4139922e Put patched sources in build/ instead of download/ 2023-06-13 16:39:59 +00:00
bjorn3
d0b8896189 Allow building the build system using cargo
Rust's build system only handles cargo, not rustc.
2023-06-13 16:39:59 +00:00
bjorn3
ce3f300e40 Add --download-dir option to specify download dir separate from --out-dir 2023-06-13 16:39:59 +00:00
bors
5683791ebb Auto merge of #112017 - Nemo157:unsafe-block-rustfix, r=eholk
Add MVP suggestion for `unsafe_op_in_unsafe_fn`

Rebase of https://github.com/rust-lang/rust/pull/99827

cc tracking issue https://github.com/rust-lang/rust/issues/71668

No real changes since the original PR, just migrated the new suggestion to use fluent messages and added a couple more testcases, AFAICT from the discussion there were no outstanding changes requested.
2023-06-13 15:57:59 +00:00
Maybe Waffle
af4631ad6e Add a test for -Zprint-vtable-sizes 2023-06-13 15:16:48 +00:00
yukang
3bbc598d16 use bug! for overflow of u128 2023-06-13 22:14:05 +08:00
Deadbeef
1caed51673 do not use stringly typed diagnostics 2023-06-13 13:53:56 +00:00
Pietro Albini
7886be6327 remove patch from cranelift backend to ignore unwinding tests 2023-06-13 15:53:26 +02:00
Pietro Albini
a988dc2711
remove patch from cranelift backend to ignore unwinding tests 2023-06-13 15:53:26 +02:00
Pietro Albini
44556eed36
ignore core, alloc and test tests that require unwinding on panic=abort 2023-06-13 15:53:24 +02:00
Wim Looman
802c1d5979
Add test cases for suggestions with unsafe operations contained inside macros 2023-06-13 15:48:57 +02:00
Wim Looman
8f3e876e52
Add note about unsafe functions body not being unsafe 2023-06-13 15:48:57 +02:00
Wim Looman
62a712a8bb
Hide suggestion to wrap function in unsafe block 2023-06-13 15:48:55 +02:00
Wim Looman
aca61b2c07
Test that a couple more types of unsafe-ops get a wrapping unsafe block added 2023-06-13 15:47:02 +02:00
Léo Lanteri Thauvin
975152ce30
Add MVP suggestion for unsafe_op_in_unsafe_fn
Nemo157 rebase notes: Migrated the changes to the lint into fluent
2023-06-13 15:46:54 +02:00
bors
2ca8d358e5 Auto merge of #112549 - jieyouxu:fix-tests-for-unit-bindings, r=Nilstrieb
Adjust UI tests for `unit_bindings` lint

- Explicitly annotate `let x: () = expr;` where `x` has unit type, or remove the unit binding to leave only `expr;` instead.
- Use `let () = init;` or `let pat = ();` where appropriate.
- Fix disjoint-capture-in-same-closure test which wasn't actually testing a closure: `tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs`.

Note that unfortunately there's *a lot* of UI tests, there are a couple of places where I may have left something like `let (): ()` (this is not needed but is left over from an ealier version of the lint) which is bad style.

This PR is to help with the `unit_bindings` lint at #112380.
2023-06-13 13:07:43 +00:00
Pietro Albini
47b6732766
add another check for empty ccs 2023-06-13 14:54:42 +02:00
Maybe Waffle
dc0fba0238 Tweak the sort of vtable sizes 2023-06-13 12:39:59 +00:00
bjorn3
45781e107c Fix rustc test suite 2023-06-13 12:31:34 +00:00
WANG Rui
22a45258d9 loongarch64-none*: Remove environment component from llvm target 2023-06-13 20:24:22 +08:00
Maybe Waffle
8e6a193946 Tweak names and docs for vtable stats 2023-06-13 12:07:12 +00:00
Alex Macleod
fda3c9f4a8 Don't print unsupported split-debuginfo modes with -Zunstable-options 2023-06-13 11:57:58 +00:00