SVH: Don't hash the HIR twice when once is enough.
The SVH (Strict Version Hash) of a crate is currently computed by hashing the ICHes (Incremental Computation Hashes) of the crate's HIR. This is fine, expect that for incr. comp. we compute two ICH values for each HIR item, one for the complete item and one that just includes the item's interface. The two hashes are are needed for dependency tracking but if we are compiling non-incrementally and just need the ICH values for the SVH, one of them is enough, giving us the opportunity to save some work in this case.
This commit is contained in:
parent
edc1ac3016
commit
bb6387295a
@ -99,6 +99,13 @@ impl<'a, 'tcx: 'a> ComputeItemHashesVisitor<'a, 'tcx> {
|
||||
item_like: T)
|
||||
where T: HashStable<StableHashingContext<'a, 'tcx>>
|
||||
{
|
||||
if !hash_bodies && !self.hcx.tcx().sess.opts.build_dep_graph() {
|
||||
// If we just need the hashes in order to compute the SVH, we don't
|
||||
// need have two hashes per item. Just the one containing also the
|
||||
// item's body is sufficient.
|
||||
return
|
||||
}
|
||||
|
||||
let mut hasher = IchHasher::new();
|
||||
self.hcx.while_hashing_hir_bodies(hash_bodies, |hcx| {
|
||||
item_like.hash_stable(hcx, &mut hasher);
|
||||
@ -143,7 +150,7 @@ impl<'a, 'tcx: 'a> ComputeItemHashesVisitor<'a, 'tcx> {
|
||||
(item_dep_node, item_hash)
|
||||
})
|
||||
.collect();
|
||||
item_hashes.sort(); // avoid artificial dependencies on item ordering
|
||||
item_hashes.sort_unstable(); // avoid artificial dependencies on item ordering
|
||||
item_hashes.hash(&mut crate_state);
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#![feature(staged_api)]
|
||||
#![feature(rand)]
|
||||
#![feature(conservative_impl_trait)]
|
||||
#![feature(sort_unstable)]
|
||||
#![cfg_attr(stage0, feature(pub_restricted))]
|
||||
|
||||
extern crate graphviz;
|
||||
|
Loading…
x
Reference in New Issue
Block a user