Commit Graph

27397 Commits

Author SHA1 Message Date
Taras Tsugrii
b84942a0fe [rustc_data_structures][perf] Simplify base_n::push_str.
This minor change removes the need to reverse resulting digits.
Since reverse is O(|digit_num|) but bounded by 128, it's unlikely
to be a noticeable in practice. At the same time, this code is
also a 1 line shorter, so combined with tiny perf win, why not?

I ran https://gist.github.com/ttsugriy/ed14860ef597ab315d4129d5f8adb191
on M1 macbook air and got a small improvement
```
Running benches/base_n_benchmark.rs (target/release/deps/base_n_benchmark-825fe5895b5c2693)
push_str/old            time:   [14.180 µs 14.313 µs 14.462 µs]
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe
push_str/new            time:   [13.741 µs 13.839 µs 13.973 µs]
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe
```
2023-07-31 12:40:11 -07:00
Michael Goulet
9295817bad Don't check unnecessarily that impl trait is RPIT 2023-07-31 18:13:48 +00:00
Ralf Jung
b169ee7c1a fix alignment handling for Repeat expressions 2023-07-31 19:22:14 +02:00
Matthias Krüger
f59a5604f9 Rollup merge of #114286 - nbdd0121:upcast, r=compiler-errors
Add missing feature gate in multiple_supertrait_upcastable doc

Fix #112424
2023-07-31 16:57:56 +02:00
Matthias Krüger
692d764e53 Rollup merge of #114267 - compiler-errors:rpitit-opaque-bounds, r=spastorino
Map RPITIT's opaque type bounds back from projections to opaques

An RPITIT in a program's AST is eventually translated into both a projection GAT and an opaque. The opaque is used for default trait methods, like:

```
trait Foo {
  fn bar() -> impl Sized { 0i32 }
}
```

The item bounds for both the projection and opaque are identical, and both have a *projection* self ty. This is mostly okay, since we can normalize this projection within the default trait method body to the opaque, but it does two things:
1. it leads to bugs in places where we don't normalize item bounds, like `deduce_future_output_from_obligations`
2. it leads to extra match arms that are both suspicious looking and also easy to miss

This PR maps the opaque type bounds of the RPITIT's *opaque* back to the opaque's self type to avoid this quirk. Then we can fix the UI test for #108304 (1.) and also remove a bunch of match arms (2.).

Fixes #108304

r? `@spastorino`
2023-07-31 16:57:55 +02:00
Matthias Krüger
95b7116d70 Rollup merge of #114228 - fmease:wf-lazy-ty-aliases, r=oli-obk
Check lazy type aliases for well-formedness

Previously we didn't check if `T: Mul` holds given lazy `type Alias<T> = <T as Mul>::Output;`.
Now we do. It only makes sense.

`@rustbot` label F-lazy_type_alias

r? `@oli-obk`
2023-07-31 16:57:54 +02:00
Matthias Krüger
b8f78fb47c Rollup merge of #114169 - lcnr:unsize, r=compiler-errors
refactor builtin unsize handling, extend comments

r? `@compiler-errors`
2023-07-31 16:57:53 +02:00
Gary Guo
e617faabe7 Add missing feature gate in multiple_supertrait_upcastable doc 2023-07-31 12:28:53 +01:00
lcnr
fc98c5a098 update comment 2023-07-31 12:47:24 +02:00
Oli Scherer
375d8f1b25 Sanity check that we actually flush all buffers 2023-07-31 09:34:36 +00:00
Oli Scherer
d9deaf4b8a Get rid of the thin wrapper type that is Destination and just write to the Writer trait object directly 2023-07-31 09:34:36 +00:00
Oli Scherer
2131eee179 Turn a single-variant enum into a struct 2023-07-31 09:34:36 +00:00
Oli Scherer
10da30f540 Merge all Destination variants 2023-07-31 09:34:36 +00:00
Oli Scherer
826a8ef52e Remove a now-redundant single-variant enum 2023-07-31 09:34:36 +00:00
Oli Scherer
1e2167f5b5 Move WritableDst method onto Style directly 2023-07-31 09:34:36 +00:00
Oli Scherer
00074698a7 Merge buffered destination into raw destination 2023-07-31 09:34:36 +00:00
Oli Scherer
339890e186 Remove an enum variant that can be covered by another 2023-07-31 09:34:36 +00:00
Oli Scherer
51c22154f5 Remove a bool for color in favor of the WriteColor trait wrapping colored and uncolored printing 2023-07-31 09:34:36 +00:00
Oli Scherer
0e7ec9683d Use builder pattern instead of lots of arguments for EmitterWriter::new 2023-07-31 09:34:30 +00:00
bors
5082281609 Auto merge of #113879 - nnethercote:codegen_ssa-cleanups, r=bjorn3
`codegen_ssa` cleanups

Some clarifications I made when reading this code closely.

r? `@tmiasko`
2023-07-31 08:18:19 +00:00
cui fliter
88c7b16e03 remove repetitive words
Signed-off-by: cui fliter <imcusg@gmail.com>
2023-07-31 16:13:02 +08:00
Oli Scherer
29de70da1b Replace the many arguments of EmitterWriter::stderr with builder methods 2023-07-31 07:19:23 +00:00
Nicholas Nethercote
c17c8dc78e Remove unnecessary semicolon. 2023-07-31 16:34:13 +10:00
Nicholas Nethercote
5673f47042 Clean up generate_lto_work.
This function has some shared code for the thin LTO and fat LTO cases,
but those cases have so little in common that it's actually clearer to
treat them fully separately.
2023-07-31 16:21:03 +10:00
Nicholas Nethercote
d404699fb1 Fix LLVM thread names on Windows.
PR #112946 tweaked the naming of LLVM threads, but messed things up
slightly, resulting in threads on Windows having names like `optimize
module {} regex.f10ba03eb5ec7975-cgu.0`.

This commit removes the extraneous `{} `.
2023-07-31 16:21:03 +10:00
Nicholas Nethercote
90ce358afa Introduce running_with_any_token closure.
It makes things a little clearer.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
3b44f5b0eb Use standard Rust capitalization rules for names containing "LTO". 2023-07-31 16:21:02 +10:00
Nicholas Nethercote
a08220bcab Tweak structure of the message loop.
The main loop has a *very* complex condition, which includes two
mentions of `codegen_state`. The body of the loop then immediately
switches on the `codegen_state`.

I find it easier to understand if it's a `loop` and we check for exit
conditions after switching on `codegen_state`. We end up with a tiny bit
of code duplication, but it's clear that (a) we never exit in the
`Ongoing` case, (b) we exit in the `Completed` state only if several
things are true (and there's interaction with LTO there), and (c) we
exit in the `Aborted` state if a couple of things are true. Also, the
exit conditions are all simple conjunctions.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
179bf19813 Tweak a loop condition.
This loop condition involves `codegen_state`, `work_items`, and
`running_with_own_token`. But the body of the loop cannot modify
`codegen_state`, so repeatedly checking it is unnecessary.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
d21d31cce7 Move maybe_start_llvm_timer's body into spawn_work.
The two functions are alway called together. This commit factors out the
repeated code.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
3517fe899e Remove CodegenContext::worker.
`CodegenContext` is immutable except for the `worker` field - we clone
`CodegenContext` in multiple places, changing the `worker` field each
time. It's simpler to move the `worker` field out of `CodegenContext`.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
67e4bec200 Fix a comment.
Make it match the corresponding comment at the start of the unstable
options.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
4a120f33f7 Remove ExtraBackendMethods::spawn_thread.
It's no longer used, and `spawn_named_thread` is preferable, because
naming threads is helpful when profiling.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
e78fb95dfa Give the coordinator thread a name.
This is useful when profiling with a profiler like Samply.
2023-07-31 16:21:02 +10:00
Nicholas Nethercote
176610c2cd Remove some unused values in codegen_crate. 2023-07-31 16:21:02 +10:00
Nicholas Nethercote
8b9e3f0dd6 Remove an unnecessary pub. 2023-07-31 16:21:00 +10:00
Nicholas Nethercote
f81fe9d702 Rename MainThreadWorkerState.
The `Worker` is unnecessary, and just makes it longer than necessary.
2023-07-31 16:20:18 +10:00
Nicholas Nethercote
5bef04ed38 Rename things related to the main thread's operations.
It took me some time to understand how the main thread can lend a
jobserver token to an LLVM thread. This commit renames a couple of
things to make it clearer.

- Rename the `LLVMing` variant as `Lending`, because that is a clearer
  description of what is happening.
- Rename `running` as `running_with_own_token`, which makes it clearer
  that there might be one additional LLVM thread running (with a loaned
  token). Also add a comment to its definition.
2023-07-31 16:20:18 +10:00
Nicholas Nethercote
fd017d3c17 Add some assertions.
- Thin and fat LTO can't happen together.
- `NeedsLink` and (non-allocator) `Compiled` work item results can't
  happen together.
2023-07-31 16:20:18 +10:00
Nicholas Nethercote
4f598b852c Add comments to WorkItemResult.
And rename the `Compiled` variant as `Finished`, because that name makes
it clearer there is nothing left to do, contrasting nicely with the
`Needs*` variants.
2023-07-31 16:20:18 +10:00
Nicholas Nethercote
a8c71f0a15 Inline and remove submit_pre_codegened_module_to_llvm.
It has a single callsite, and provides little value.
2023-07-31 16:20:18 +10:00
Nicholas Nethercote
2e6ce68fba Remove desugar_doc_comments arg from Parser::new().
It's only true at one call site; do the desugaring there instead.
2023-07-31 14:47:08 +10:00
Nicholas Nethercote
d72fc5ce44 Remove TokenTreeCursor::replace_prev_and_rewind.
It's no longer used.
2023-07-31 14:47:06 +10:00
Nicholas Nethercote
ff7d5ba65e Move doc comment desugaring out of TokenCursor.
`TokenCursor` currently does doc comment desugaring on the fly, if the
`desugar_doc_comment` field is set. This requires also modifying the
token stream on the fly with `replace_prev_and_rewind`.

This commit moves the doc comment desugaring out of `TokenCursor`, by
introducing a new `TokenStream::desugar_doc_comment` method. This
separation of desugaring and iterating makes the code nicer.
2023-07-31 14:47:03 +10:00
bors
3be07c1161 Auto merge of #114266 - calebzulawski:simd-bswap, r=compiler-errors
Fix simd_bswap for i8/u8

#114156 missed this test case ☹️
cc `@workingjubilee`
2023-07-31 04:43:48 +00:00
bohan
8e32dade71 parser: more friendly hints for handling async move in the 2015 edition 2023-07-31 11:04:28 +08:00
Nicholas Nethercote
c70c8b7196 No need to desugar doc comments when parsing decl macro definitions. 2023-07-31 11:21:30 +10:00
Nicholas Nethercote
a8909b059f Reflow an overlong comment. 2023-07-31 11:21:24 +10:00
Nicholas Nethercote
cfc1aa3c5d Fix a typo in a comment. 2023-07-31 11:14:39 +10:00
Nicholas Nethercote
d16b1f4a8c Remove more unnecessary return keywords. 2023-07-31 11:14:39 +10:00