| Age | Commit message (Collapse) | Author | Lines |
|
See also https://github.com/rust-lang/rustc-rayon/pull/3
|
|
Fix clippy warnings
* Use `match` instead of `if` chain
* Remove redundant `into_iter()`
* Use `copied()` instead of `map()`
etc.
|
|
Still more `ObligationForest` improvements.
Following on from #64627, more readability improvements, but negligible effects on speed.
r? @nikomatsakis
|
|
|
|
By collecting the done obligations (when necessary) in the main loop.
This makes the code cleaner.
The commit also changes the order in which successful obligations are
returned -- they are now returned in the registered order, rather than
reversed. Because this order doesn't actually matter, being only used by
tests, the commit uses `sort()` to make the test agnostic w.r.t. the
order.
|
|
|
|
|
|
These make the code more concise.
|
|
|
|
They don't help performance at all, and just complicate things.
|
|
|
|
|
|
It has a single call site, and the code is easier to read this way.
|
|
For consistency with other variables in this file.
|
|
It's not necessary; cycles (which are rare) can be detected by looking
at the node stack.
This change speeds things up slightly, as well as simplifying the code a
little.
|
|
|
|
|
|
|
|
|
|
r=michaelwoerister
No StableHasherResult everywhere
This removes the generic parameter on `StableHasher`, instead moving it to the call to `finish`. This has the side-effect of making all `HashStable` impls nicer, since we no longer need the verbose `<W: StableHasherResult>` that previously existed -- often forcing line wrapping.
This is done for two reasons:
* we should avoid false "generic" dependency on the result of StableHasher
* we don't need to codegen two/three copies of all the HashStable impls when they're transitively used to produce a fingerprint, u64, or u128. I haven't measured, but this might actually make our artifacts somewhat smaller too.
* Easier to understand/read/write code -- the result of the stable hasher is irrelevant when writing a hash impl.
|
|
|
|
|
|
StableMap
A wrapper for FxHashMap that allows to insert, remove, get and get_mut
but no iteration support.
StableSet
A wrapper for FxHashSet that allows to insert, remove, get and create a
sorted vector from a hashset but no iteration support.
|
|
Even more `ObligationForest` improvements
Following on from #64545, more speed and readability improvements.
r? @nikomatsakis
|
|
|
|
Because the meaning of this `index` variable is quite different to all
the other `index` variables in this file.
|
|
The name `waiting_cache` sounds like it is related to the states
`NodeState::Waiting`, but it's not; the cache holds nodes of various
states.
This commit changes it to `active_state`.
|
|
We normally use `index` for indices to `ObligationForest::nodes`, but
this is a `Nodes::dependents` index.
|
|
|
|
This is a big speed win for `keccak` and `inflate`.
|
|
This gives a slight speed-up.
|
|
Now that all indices have type `usize`, it makes sense to be more
consistent about their naming. This commit removes all uses of `i` in
favour of `index`.
|
|
The size of the indices doesn't matter much here, and having a
`newtype_index!` index type without also using `IndexVec` requires lots
of conversions. So this commit removes `NodeIndex` in favour of uniform
use of `usize` as the index type. As well as making the code slightly
more concise, it also slightly speeds things up.
|
|
`Node` has an optional parent and a list of other descendents. Most of
the time the parent is treated the same as the other descendents --
error-handling is the exception -- and chaining them together for
iteration has a non-trivial cost.
This commit changes the representation. There is now a single list of
descendants, and a boolean flag that indicates if there is a parent (in
which case it is first descendent). This representation encodes the same
information, in a way that is less idiomatic but cheaper to iterate over
for the common case where the parent doesn't need special treatment.
As a result, some benchmark workloads are up to 2% faster.
|
|
Various `ObligationForest` improvements
These commits make the code both nicer and faster.
r? @nikomatsakis
|
|
Upgrade parking_lot and tempfile rustc dependencies
This should be last piece to unbreak `rustc` in https://github.com/rust-lang/rust/issues/63848
|
|
|
|
|
|
It's more concise, more idiomatic, and measurably faster.
|
|
This makes the code a little faster, presumably because bounds checks
aren't needed on `nodes` accesses. It requires making `scratch` a
`RefCell`, which is not unreasonable.
|
|
|
|
|
|
|
|
These refer to code that no longer exists.
|
|
|
|
This commit removes the custom index implementation of `NodeIndex`,
which probably predates `newtype_index!`.
As well as eliminating code, it improves the debugging experience,
because the custom implementation had the property of being incremented
by 1 (so it could use `NonZeroU32`), which was incredibly confusing if
you didn't expect it.
For some reason, I also had to remove an `unsafe` block marker from
`from_u32_unchecked()` that the compiler said was now unnecessary.
|
|
Those with type `usize` are now called `i`, those with type `NodeIndex`
are called `index`.
|
|
This function is very hot, doesn't get inlined because it's recursive,
and the function calls are significant.
This commit splits it into inlined and uninlined variants, and uses the
inlined variant for the hot call site. This wins several percent on a
few benchmarks.
|
|
|
|
Refactor `TinyList::contains` and `len` to iterate instead of recurse
None
|