1
Fork 0

Make an optimal cold path for query_cache_hit

This commit is contained in:
John Kåre Alsaker 2023-02-01 04:49:09 +01:00
parent e60ccfc6a9
commit 9539737008
4 changed files with 28 additions and 32 deletions

View file

@ -47,7 +47,7 @@ impl DepNodeIndex {
}
impl From<DepNodeIndex> for QueryInvocationId {
#[inline]
#[inline(always)]
fn from(dep_node_index: DepNodeIndex) -> Self {
QueryInvocationId(dep_node_index.as_u32())
}

View file

@ -346,9 +346,7 @@ where
{
match cache.lookup(&key) {
Some((value, index)) => {
if std::intrinsics::unlikely(tcx.profiler().enabled()) {
tcx.profiler().query_cache_hit(index.into());
}
tcx.profiler().query_cache_hit(index.into());
tcx.dep_graph().read_index(index);
Some(value)
}
@ -408,9 +406,7 @@ where
panic!("value must be in cache after waiting")
};
if std::intrinsics::unlikely(qcx.dep_context().profiler().enabled()) {
qcx.dep_context().profiler().query_cache_hit(index.into());
}
qcx.dep_context().profiler().query_cache_hit(index.into());
query_blocked_prof_timer.finish_with_query_invocation_id(index.into());
(v, Some(index))
@ -722,9 +718,7 @@ where
}
Some((_, dep_node_index)) => {
dep_graph.read_index(dep_node_index);
if std::intrinsics::unlikely(qcx.dep_context().profiler().enabled()) {
qcx.dep_context().profiler().query_cache_hit(dep_node_index.into());
}
qcx.dep_context().profiler().query_cache_hit(dep_node_index.into());
(false, None)
}
}
@ -778,9 +772,7 @@ where
// Ensure that only one of them runs the query.
let cache = Q::query_cache(qcx);
if let Some((_, index)) = cache.lookup(&key) {
if std::intrinsics::unlikely(qcx.dep_context().profiler().enabled()) {
qcx.dep_context().profiler().query_cache_hit(index.into());
}
qcx.dep_context().profiler().query_cache_hit(index.into());
return;
}