about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2023-09-27 11:23:39 +0000
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2023-09-28 16:13:38 +0000
commit2d4201f7c65b223967bb12aed2a790f85e457969 (patch)
tree9b25bd9b6f9129ed74415eaf69559bac174a9ba3 /compiler/rustc_mir_transform/src
parent6ea2db7c2d78182fabf66a8c6ffc856446e1cf81 (diff)
Skip reinterning if nothing changed
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/reveal_all.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/reveal_all.rs b/compiler/rustc_mir_transform/src/reveal_all.rs
index 6cc0d383119..55f1eac6f84 100644
--- a/compiler/rustc_mir_transform/src/reveal_all.rs
+++ b/compiler/rustc_mir_transform/src/reveal_all.rs
@@ -32,6 +32,10 @@ impl<'tcx> MutVisitor<'tcx> for RevealAllVisitor<'tcx> {
         _context: PlaceContext,
         _location: Location,
     ) {
+        // Performance optimization: don't reintern if there is no `OpaqueCast` to remove.
+        if place.projection.iter().all(|elem| !matches!(elem, ProjectionElem::OpaqueCast(_))) {
+            return;
+        }
         // `OpaqueCast` projections are only needed if there are opaque types on which projections are performed.
         // After the `RevealAll` pass, all opaque types are replaced with their hidden types, so we don't need these
         // projections anymore.