Skip to content

Commit ef4becd

Browse files
committed
Split try_execute_query.
1 parent 307aaca commit ef4becd

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

compiler/rustc_query_system/src/query/plumbing.rs

+31-16
Original file line numberDiff line numberDiff line change
@@ -411,18 +411,22 @@ where
411411
C::Key: Clone + DepNodeParams<CTX::DepContext>,
412412
CTX: QueryContext,
413413
{
414-
let job = match JobOwner::<'_, CTX::DepKind, C::Key>::try_start(
414+
match JobOwner::<'_, CTX::DepKind, C::Key>::try_start(
415415
&tcx,
416416
state,
417417
span,
418418
key.clone(),
419419
lookup,
420420
query.dep_kind,
421421
) {
422-
TryGetJob::NotYetStarted(job) => job,
422+
TryGetJob::NotYetStarted(job) => {
423+
let (result, dep_node_index) = execute_job(tcx, key, dep_node, query, job.id, compute);
424+
let result = job.complete(cache, result, dep_node_index);
425+
(result, Some(dep_node_index))
426+
}
423427
TryGetJob::Cycle(error) => {
424428
let result = mk_cycle(tcx, error, query.handle_cycle_error, &cache.cache);
425-
return (result, None);
429+
(result, None)
426430
}
427431
#[cfg(parallel_compiler)]
428432
TryGetJob::JobCompleted(query_blocked_prof_timer) => {
@@ -440,27 +444,40 @@ where
440444
}
441445
query_blocked_prof_timer.finish_with_query_invocation_id(index.into());
442446

443-
return (v, Some(index));
447+
(v, Some(index))
444448
}
445-
};
449+
}
450+
}
446451

452+
fn execute_job<CTX, K, V>(
453+
tcx: CTX,
454+
key: K,
455+
dep_node: Option<DepNode<CTX::DepKind>>,
456+
query: &QueryVtable<CTX, K, V>,
457+
job_id: QueryJobId<CTX::DepKind>,
458+
compute: fn(CTX::DepContext, K) -> V,
459+
) -> (V, DepNodeIndex)
460+
where
461+
K: Clone + DepNodeParams<CTX::DepContext>,
462+
V: Debug,
463+
CTX: QueryContext,
464+
{
447465
let dep_graph = tcx.dep_context().dep_graph();
448466

449467
// Fast path for when incr. comp. is off.
450468
if !dep_graph.is_fully_enabled() {
451469
let prof_timer = tcx.dep_context().profiler().query_provider();
452-
let result = tcx.start_query(job.id, None, || compute(*tcx.dep_context(), key));
470+
let result = tcx.start_query(job_id, None, || compute(*tcx.dep_context(), key));
453471
let dep_node_index = dep_graph.next_virtual_depnode_index();
454472
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
455-
let result = job.complete(cache, result, dep_node_index);
456-
return (result, None);
473+
return (result, dep_node_index);
457474
}
458475

459-
let (result, dep_node_index) = if query.anon {
476+
if query.anon {
460477
let prof_timer = tcx.dep_context().profiler().query_provider();
461478

462479
let ((result, dep_node_index), diagnostics) = with_diagnostics(|diagnostics| {
463-
tcx.start_query(job.id, diagnostics, || {
480+
tcx.start_query(job_id, diagnostics, || {
464481
dep_graph.with_anon_task(*tcx.dep_context(), query.dep_kind, || {
465482
compute(*tcx.dep_context(), key)
466483
})
@@ -479,24 +496,22 @@ where
479496
} else if query.eval_always {
480497
// `to_dep_node` is expensive for some `DepKind`s.
481498
let dep_node = dep_node.unwrap_or_else(|| query.to_dep_node(*tcx.dep_context(), &key));
482-
force_query_with_job(tcx, key, job.id, dep_node, query, compute)
499+
force_query_with_job(tcx, key, job_id, dep_node, query, compute)
483500
} else {
484501
// `to_dep_node` is expensive for some `DepKind`s.
485502
let dep_node = dep_node.unwrap_or_else(|| query.to_dep_node(*tcx.dep_context(), &key));
486503
// The diagnostics for this query will be
487504
// promoted to the current session during
488505
// `try_mark_green()`, so we can ignore them here.
489-
let loaded = tcx.start_query(job.id, None, || {
506+
let loaded = tcx.start_query(job_id, None, || {
490507
try_load_from_disk_and_cache_in_memory(tcx, &key, &dep_node, query, compute)
491508
});
492509
if let Some((result, dep_node_index)) = loaded {
493510
(result, dep_node_index)
494511
} else {
495-
force_query_with_job(tcx, key, job.id, dep_node, query, compute)
512+
force_query_with_job(tcx, key, job_id, dep_node, query, compute)
496513
}
497-
};
498-
let result = job.complete(cache, result, dep_node_index);
499-
(result, Some(dep_node_index))
514+
}
500515
}
501516

502517
fn try_load_from_disk_and_cache_in_memory<CTX, K, V>(

0 commit comments

Comments
 (0)