@@ -16,6 +16,7 @@ use smallvec::SmallVec;
16
16
use rustc_data_structures:: sync:: { Lrc , Lock } ;
17
17
use std:: env;
18
18
use std:: hash:: Hash ;
19
+ use std:: collections:: hash_map:: Entry ;
19
20
use ty:: { self , TyCtxt } ;
20
21
use util:: common:: { ProfileQueriesMsg , profq_msg} ;
21
22
@@ -665,17 +666,13 @@ impl DepGraph {
665
666
let ( dep_node_index, did_allocation) = {
666
667
let mut current = data. current . borrow_mut ( ) ;
667
668
668
- if let Some ( & dep_node_index) = current. node_to_node_index . get ( & dep_node) {
669
- // Someone else allocated it before us
670
- ( dep_node_index, false )
671
- } else {
672
- // Copy the fingerprint from the previous graph,
673
- // so we don't have to recompute it
674
- let fingerprint = data. previous . fingerprint_by_index ( prev_dep_node_index) ;
675
- // We allocating an entry for the node in the current dependency graph and
676
- // adding all the appropriate edges imported from the previous graph
677
- ( current. alloc_node ( * dep_node, current_deps, fingerprint) , true )
678
- }
669
+ // Copy the fingerprint from the previous graph,
670
+ // so we don't have to recompute it
671
+ let fingerprint = data. previous . fingerprint_by_index ( prev_dep_node_index) ;
672
+
673
+ // We allocating an entry for the node in the current dependency graph and
674
+ // adding all the appropriate edges imported from the previous graph
675
+ current. intern_node ( * dep_node, current_deps, fingerprint)
679
676
} ;
680
677
681
678
// ... emitting any stored diagnostic ...
@@ -968,11 +965,7 @@ impl CurrentDepGraph {
968
965
hash : fingerprint,
969
966
} ;
970
967
971
- if let Some ( & index) = self . node_to_node_index . get ( & target_dep_node) {
972
- index
973
- } else {
974
- self . alloc_node ( target_dep_node, reads, Fingerprint :: ZERO )
975
- }
968
+ self . intern_node ( target_dep_node, reads, Fingerprint :: ZERO ) . 0
976
969
} else {
977
970
bug ! ( "pop_anon_task() - Expected anonymous task to be popped" )
978
971
}
@@ -1033,21 +1026,37 @@ impl CurrentDepGraph {
1033
1026
} )
1034
1027
}
1035
1028
1036
- fn alloc_node ( & mut self ,
1037
- dep_node : DepNode ,
1038
- edges : SmallVec < [ DepNodeIndex ; 8 ] > ,
1039
- fingerprint : Fingerprint )
1040
- -> DepNodeIndex {
1041
- debug_assert_eq ! ( self . node_to_node_index . len ( ) , self . data . len ( ) ) ;
1029
+ fn alloc_node (
1030
+ & mut self ,
1031
+ dep_node : DepNode ,
1032
+ edges : SmallVec < [ DepNodeIndex ; 8 ] > ,
1033
+ fingerprint : Fingerprint
1034
+ ) -> DepNodeIndex {
1042
1035
debug_assert ! ( !self . node_to_node_index. contains_key( & dep_node) ) ;
1043
- let dep_node_index = DepNodeIndex :: new ( self . data . len ( ) ) ;
1044
- self . data . push ( DepNodeData {
1045
- node : dep_node,
1046
- edges,
1047
- fingerprint
1048
- } ) ;
1049
- self . node_to_node_index . insert ( dep_node, dep_node_index) ;
1050
- dep_node_index
1036
+ self . intern_node ( dep_node, edges, fingerprint) . 0
1037
+ }
1038
+
1039
+ fn intern_node (
1040
+ & mut self ,
1041
+ dep_node : DepNode ,
1042
+ edges : SmallVec < [ DepNodeIndex ; 8 ] > ,
1043
+ fingerprint : Fingerprint
1044
+ ) -> ( DepNodeIndex , bool ) {
1045
+ debug_assert_eq ! ( self . node_to_node_index. len( ) , self . data. len( ) ) ;
1046
+
1047
+ match self . node_to_node_index . entry ( dep_node) {
1048
+ Entry :: Occupied ( entry) => ( * entry. get ( ) , false ) ,
1049
+ Entry :: Vacant ( entry) => {
1050
+ let dep_node_index = DepNodeIndex :: new ( self . data . len ( ) ) ;
1051
+ self . data . push ( DepNodeData {
1052
+ node : dep_node,
1053
+ edges,
1054
+ fingerprint
1055
+ } ) ;
1056
+ entry. insert ( dep_node_index) ;
1057
+ ( dep_node_index, true )
1058
+ }
1059
+ }
1051
1060
}
1052
1061
}
1053
1062
0 commit comments