Uninline some debugging code and use unlikely! macro
This commit is contained in:
parent
6d34ec18c7
commit
2426f7c39d
@ -1926,6 +1926,7 @@ pub mod tls {
|
||||
/// to `value` during the call to `f`. It is restored to its previous value after.
|
||||
/// This is used to set the pointer to the new ImplicitCtxt.
|
||||
#[cfg(parallel_queries)]
|
||||
#[inline]
|
||||
fn set_tlv<F: FnOnce() -> R, R>(value: usize, f: F) -> R {
|
||||
rayon_core::tlv::with(value, f)
|
||||
}
|
||||
@ -1933,6 +1934,7 @@ pub mod tls {
|
||||
/// Gets Rayon's thread local variable which is preserved for Rayon jobs.
|
||||
/// This is used to get the pointer to the current ImplicitCtxt.
|
||||
#[cfg(parallel_queries)]
|
||||
#[inline]
|
||||
fn get_tlv() -> usize {
|
||||
rayon_core::tlv::get()
|
||||
}
|
||||
@ -1945,6 +1947,7 @@ pub mod tls {
|
||||
/// It is restored to its previous value after.
|
||||
/// This is used to set the pointer to the new ImplicitCtxt.
|
||||
#[cfg(not(parallel_queries))]
|
||||
#[inline]
|
||||
fn set_tlv<F: FnOnce() -> R, R>(value: usize, f: F) -> R {
|
||||
let old = get_tlv();
|
||||
let _reset = OnDrop(move || TLV.with(|tlv| tlv.set(old)));
|
||||
|
@ -499,31 +499,11 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
|
||||
|
||||
// If -Zincremental-verify-ich is specified, re-hash results from
|
||||
// the cache and make sure that they have the expected fingerprint.
|
||||
if self.sess.opts.debugging_opts.incremental_verify_ich {
|
||||
use rustc_data_structures::stable_hasher::{StableHasher, HashStable};
|
||||
use ich::Fingerprint;
|
||||
|
||||
assert!(Some(self.dep_graph.fingerprint_of(dep_node_index)) ==
|
||||
self.dep_graph.prev_fingerprint_of(dep_node),
|
||||
"Fingerprint for green query instance not loaded \
|
||||
from cache: {:?}", dep_node);
|
||||
|
||||
debug!("BEGIN verify_ich({:?})", dep_node);
|
||||
let mut hcx = self.create_stable_hashing_context();
|
||||
let mut hasher = StableHasher::new();
|
||||
|
||||
result.hash_stable(&mut hcx, &mut hasher);
|
||||
|
||||
let new_hash: Fingerprint = hasher.finish();
|
||||
debug!("END verify_ich({:?})", dep_node);
|
||||
|
||||
let old_hash = self.dep_graph.fingerprint_of(dep_node_index);
|
||||
|
||||
assert!(new_hash == old_hash, "Found unstable fingerprints \
|
||||
for {:?}", dep_node);
|
||||
if unlikely!(self.sess.opts.debugging_opts.incremental_verify_ich) {
|
||||
self.incremental_verify_ich::<Q>(&result, dep_node, dep_node_index);
|
||||
}
|
||||
|
||||
if self.sess.opts.debugging_opts.query_dep_graph {
|
||||
if unlikely!(self.sess.opts.debugging_opts.query_dep_graph) {
|
||||
self.dep_graph.mark_loaded_from_cache(dep_node_index, true);
|
||||
}
|
||||
|
||||
@ -532,6 +512,37 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
#[cold]
|
||||
fn incremental_verify_ich<Q: QueryDescription<'gcx>>(
|
||||
self,
|
||||
result: &Q::Value,
|
||||
dep_node: &DepNode,
|
||||
dep_node_index: DepNodeIndex,
|
||||
) {
|
||||
use rustc_data_structures::stable_hasher::{StableHasher, HashStable};
|
||||
use ich::Fingerprint;
|
||||
|
||||
assert!(Some(self.dep_graph.fingerprint_of(dep_node_index)) ==
|
||||
self.dep_graph.prev_fingerprint_of(dep_node),
|
||||
"Fingerprint for green query instance not loaded \
|
||||
from cache: {:?}", dep_node);
|
||||
|
||||
debug!("BEGIN verify_ich({:?})", dep_node);
|
||||
let mut hcx = self.create_stable_hashing_context();
|
||||
let mut hasher = StableHasher::new();
|
||||
|
||||
result.hash_stable(&mut hcx, &mut hasher);
|
||||
|
||||
let new_hash: Fingerprint = hasher.finish();
|
||||
debug!("END verify_ich({:?})", dep_node);
|
||||
|
||||
let old_hash = self.dep_graph.fingerprint_of(dep_node_index);
|
||||
|
||||
assert!(new_hash == old_hash, "Found unstable fingerprints \
|
||||
for {:?}", dep_node);
|
||||
}
|
||||
|
||||
fn force_query_with_job<Q: QueryDescription<'gcx>>(
|
||||
self,
|
||||
key: Q::Key,
|
||||
@ -574,7 +585,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
|
||||
|
||||
let ((result, dep_node_index), diagnostics) = res;
|
||||
|
||||
if self.sess.opts.debugging_opts.query_dep_graph {
|
||||
if unlikely!(self.sess.opts.debugging_opts.query_dep_graph) {
|
||||
self.dep_graph.mark_loaded_from_cache(dep_node_index, false);
|
||||
}
|
||||
|
||||
|
@ -113,12 +113,14 @@ pub struct OnDrop<F: Fn()>(pub F);
|
||||
impl<F: Fn()> OnDrop<F> {
|
||||
/// Forgets the function which prevents it from running.
|
||||
/// Ensure that the function owns no memory, otherwise it will be leaked.
|
||||
#[inline]
|
||||
pub fn disable(self) {
|
||||
std::mem::forget(self);
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: Fn()> Drop for OnDrop<F> {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
(self.0)();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user