]> git.lizzy.rs Git - rust.git/commitdiff
Add a fast path for identical regions in lub_concrete_regions
authorBjörn Steinbrink <bsteinbr@gmail.com>
Thu, 10 Jan 2019 18:28:42 +0000 (19:28 +0100)
committerBjörn Steinbrink <bsteinbr@gmail.com>
Thu, 10 Jan 2019 20:28:06 +0000 (21:28 +0100)
In functions with lots of region constraint, if the fixed point
iteration converges only slowly, a lot of the var/var constraints will
have equal regions most of the time. Yet, we still perform the LUB
calculation and try to intern the result. Especially the latter incurs
quite some overhead.

This reduces the take taken by the item bodies checking pass for the
unicode_normalization crate by about 75%.

src/librustc/infer/lexical_region_resolve/mod.rs

index 2a93217b9b423b3efb74eccae15c2e99c785669d..39ce8cc621b49d9215de6dfe3998085a937eead7 100644 (file)
@@ -274,6 +274,13 @@ fn expand_node(
 
     fn lub_concrete_regions(&self, a: Region<'tcx>, b: Region<'tcx>) -> Region<'tcx> {
         let tcx = self.tcx();
+
+        // Equal scopes can show up quite often, if the fixed point
+        // iteration converges slowly, skip them
+        if a == b {
+            return a;
+        }
+
         match (a, b) {
             (&ty::ReClosureBound(..), _)
             | (_, &ty::ReClosureBound(..))