Clean up and speed up inference variable resolving code - #160913
Clean up and speed up inference variable resolving code#160913jdonszelmann wants to merge 5 commits into
Conversation
|
@bors try @rust-timer queue |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Clean up and speed up resolving code
This comment has been minimized.
This comment has been minimized.
3dde145 to
b5fe24d
Compare
This comment has been minimized.
This comment has been minimized.
| match self.inner.borrow_mut().type_variables().probe(vid) { | ||
| TypeVariableValue::Known { value } => Ok(value), | ||
| match value { | ||
| TypeVariableValue::Known { value } => Ok(self.shallow_resolve_non_recursive(value)), |
There was a problem hiding this comment.
this method (and the one below) now also does the recursive resolving shallow_resolve already did. No tests change here.
| // Cold because the case in which a tyvar resolves to an intvar which resolves to a type is | ||
| // quite rare. It's way more common for `shallow_resolve_non_recursive` to return ty. | ||
| #[cold] | ||
| fn shallow_resolve_infer_non_recursive(&self, infer: InferTy, ty: Ty<'tcx>) -> Ty<'tcx> { |
There was a problem hiding this comment.
the non-recursive caase helps ~0.5% on local benchmarks. Not much, but still a bit.
| /// In cases where we do, this can aid performance. | ||
| #[inline(always)] | ||
| fn shallow_resolve_ty_var(&self, v: TyVid, ty: Ty<'tcx>) -> Ty<'tcx> { | ||
| fn shallow_resolve_ty_var_with_ty(&self, v: TyVid, ty: Option<Ty<'tcx>>) -> Ty<'tcx> { |
There was a problem hiding this comment.
By taking an Option here, we can merge more methods' implementations. Doing this has 0 performance overhead, #[inline(always)] makes sure the callsites that always call with Some get optimized properly.
There was a problem hiding this comment.
could we instead change this function to not take a ty and return and Option instead?
This comment has been minimized.
This comment has been minimized.
|
💔 Test for 7e8d4ec failed: CI. Failed job:
|
b5fe24d to
6b88c26
Compare
|
@bors try (failed due to missing rustdoc changes now applied) |
|
Unknown argument "(failed". Did you mean to use |
This comment has been minimized.
This comment has been minimized.
|
@bors try |
This comment has been minimized.
This comment has been minimized.
Clean up and speed up resolving code
This comment has been minimized.
This comment has been minimized.
9ddd601 to
68fded2
Compare
This comment has been minimized.
This comment has been minimized.
68fded2 to
aad9f36
Compare
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
aad9f36 to
25e4653
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
25e4653 to
5ca7e19
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
…er a shallow_resolve
5ca7e19 to
7cf7138
Compare
|
@rustbot review |
|
@bors try @rust-timer queue |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Clean up and speed up inference variable resolving code
7cf7138 to
3cbad4a
Compare
This comment has been minimized.
This comment has been minimized.
|
Finished benchmarking commit (d1e451b): comparison URL. Overall result: ✅ improvements - no action neededBenchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf. @bors rollup=never rustc-perf Instruction countOur most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.
Max RSS (memory usage)Results (primary 6.5%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 1.9%, secondary -8.7%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeThis perf run didn't have relevant results for this metric. Bootstrap: 495.332s -> 496.666s (0.27%) |
View all comments
r? @lcnr
As part of #162126, I found some small performance wins resulting from the fact that
shallow_resolvenow returns root vids.The last commit also makes it so calls to
shallow_resolveneed to explicitly handle the possibility of reusing the existing interned value.Note
I've not used an LLM for any part of this PR, or any other PR I make. This includes any related work like research.