@@ -685,30 +685,6 @@ where
685
685
( result, dep_node_index)
686
686
}
687
687
688
- #[ inline( never) ]
689
- fn get_query_impl < CTX , C > (
690
- tcx : CTX ,
691
- state : & QueryState < CTX :: DepKind , C :: Key > ,
692
- cache : & QueryCacheStore < C > ,
693
- span : Span ,
694
- key : C :: Key ,
695
- lookup : QueryLookup ,
696
- query : & QueryVtable < CTX , C :: Key , C :: Value > ,
697
- compute : fn ( CTX :: DepContext , C :: Key ) -> C :: Value ,
698
- ) -> C :: Stored
699
- where
700
- CTX : QueryContext ,
701
- C : QueryCache ,
702
- C :: Key : DepNodeParams < CTX :: DepContext > ,
703
- {
704
- let ( result, dep_node_index) =
705
- try_execute_query ( tcx, state, cache, span, key, lookup, None , query, compute) ;
706
- if let Some ( dep_node_index) = dep_node_index {
707
- tcx. dep_context ( ) . dep_graph ( ) . read_index ( dep_node_index)
708
- }
709
- result
710
- }
711
-
712
688
/// Ensure that either this query has all green inputs or been executed.
713
689
/// Executing `query::ensure(D)` is considered a read of the dep-node `D`.
714
690
/// Returns true if the query should still run.
@@ -718,13 +694,17 @@ where
718
694
///
719
695
/// Note: The optimization is only available during incr. comp.
720
696
#[ inline( never) ]
721
- fn ensure_must_run < CTX , K , V > ( tcx : CTX , key : & K , query : & QueryVtable < CTX , K , V > ) -> bool
697
+ fn ensure_must_run < CTX , K , V > (
698
+ tcx : CTX ,
699
+ key : & K ,
700
+ query : & QueryVtable < CTX , K , V > ,
701
+ ) -> ( bool , Option < DepNode < CTX :: DepKind > > )
722
702
where
723
703
K : crate :: dep_graph:: DepNodeParams < CTX :: DepContext > ,
724
704
CTX : QueryContext ,
725
705
{
726
706
if query. eval_always {
727
- return true ;
707
+ return ( true , None ) ;
728
708
}
729
709
730
710
// Ensuring an anonymous query makes no sense
@@ -741,12 +721,12 @@ where
741
721
// DepNodeIndex. We must invoke the query itself. The performance cost
742
722
// this introduces should be negligible as we'll immediately hit the
743
723
// in-memory cache, or another query down the line will.
744
- true
724
+ ( true , Some ( dep_node ) )
745
725
}
746
726
Some ( ( _, dep_node_index) ) => {
747
727
dep_graph. read_index ( dep_node_index) ;
748
728
tcx. dep_context ( ) . profiler ( ) . query_cache_hit ( dep_node_index. into ( ) ) ;
749
- false
729
+ ( false , None )
750
730
}
751
731
}
752
732
}
@@ -808,25 +788,33 @@ where
808
788
CTX : QueryContext ,
809
789
{
810
790
let query = & Q :: VTABLE ;
811
- if let QueryMode :: Ensure = mode {
812
- if !ensure_must_run ( tcx, & key, query) {
791
+ let dep_node = if let QueryMode :: Ensure = mode {
792
+ let ( must_run, dep_node) = ensure_must_run ( tcx, & key, query) ;
793
+ if !must_run {
813
794
return None ;
814
795
}
815
- }
796
+ dep_node
797
+ } else {
798
+ None
799
+ } ;
816
800
817
801
debug ! ( "ty::query::get_query<{}>(key={:?}, span={:?})" , Q :: NAME , key, span) ;
818
802
let compute = Q :: compute_fn ( tcx, & key) ;
819
- let value = get_query_impl (
803
+ let ( result , dep_node_index ) = try_execute_query (
820
804
tcx,
821
805
Q :: query_state ( tcx) ,
822
806
Q :: query_cache ( tcx) ,
823
807
span,
824
808
key,
825
809
lookup,
810
+ dep_node,
826
811
query,
827
812
compute,
828
813
) ;
829
- Some ( value)
814
+ if let Some ( dep_node_index) = dep_node_index {
815
+ tcx. dep_context ( ) . dep_graph ( ) . read_index ( dep_node_index)
816
+ }
817
+ Some ( result)
830
818
}
831
819
832
820
pub fn force_query < Q , CTX > ( tcx : CTX , dep_node : & DepNode < CTX :: DepKind > ) -> bool
0 commit comments