diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-09-17 18:05:57 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-09-19 06:36:06 +1000 |
| commit | 3b85597d22dc9dc9226445a95e275b8130880e63 (patch) | |
| tree | bf90bdcf1fa96838e44f84dcfd2b818111263bdd /src/librustc/traits | |
| parent | 82e5c6ee6597e7d8926b4f2fea89d02d77f978d4 (diff) | |
| download | rust-3b85597d22dc9dc9226445a95e275b8130880e63.tar.gz rust-3b85597d22dc9dc9226445a95e275b8130880e63.zip | |
Add a specialized version of `shallow_resolve()`.
The super-hot call site of `inlined_shallow_resolve()` basically does `r.inlined_shallow_resolve(ty) != ty`. This commit introduces a version of that function specialized for that particular call pattern, `shallow_resolve_changed()`. Incredibly, this reduces the instruction count for `keccak` by 5%. The commit also renames `inlined_shallow_resolve()` as `shallow_resolve()` and removes the `inline(always)` annotation, as it's no longer nearly so hot.
Diffstat (limited to 'src/librustc/traits')
| -rw-r--r-- | src/librustc/traits/fulfill.rs | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/src/librustc/traits/fulfill.rs b/src/librustc/traits/fulfill.rs index 5eaaeca82f2..805727b6ce0 100644 --- a/src/librustc/traits/fulfill.rs +++ b/src/librustc/traits/fulfill.rs @@ -264,9 +264,7 @@ impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx> { // This `for` loop was once a call to `all()`, but this lower-level // form was a perf win. See #64545 for details. for &ty in &pending_obligation.stalled_on { - // Use the force-inlined variant of shallow_resolve() because this code is hot. - let resolved = ShallowResolver::new(self.selcx.infcx()).inlined_shallow_resolve(ty); - if resolved != ty { + if ShallowResolver::new(self.selcx.infcx()).shallow_resolve_changed(ty) { changed = true; break; } |
