diff options
| author | Michael Woerister <michaelwoerister@posteo.net> | 2017-04-03 19:39:12 +0200 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo.net> | 2017-04-07 14:37:48 +0200 |
| commit | bb6387295a85da70546ed3ce7fa0d702b9cb9d6c (patch) | |
| tree | 1bfe6b43121735f50bbc90e78a1a3685d276a971 /src | |
| parent | edc1ac3016d0e8383e174312db7c3b7a885af0c3 (diff) | |
| download | rust-bb6387295a85da70546ed3ce7fa0d702b9cb9d6c.tar.gz rust-bb6387295a85da70546ed3ce7fa0d702b9cb9d6c.zip | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_incremental/calculate_svh/mod.rs | 9 | ||||
| -rw-r--r-- | src/librustc_incremental/lib.rs | 1 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/librustc_incremental/calculate_svh/mod.rs b/src/librustc_incremental/calculate_svh/mod.rs index c80a5a16277..c67866971e1 100644 --- a/src/librustc_incremental/calculate_svh/mod.rs +++ b/src/librustc_incremental/calculate_svh/mod.rs @@ -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); } diff --git a/src/librustc_incremental/lib.rs b/src/librustc_incremental/lib.rs index d10df17f858..aa7eb36581f 100644 --- a/src/librustc_incremental/lib.rs +++ b/src/librustc_incremental/lib.rs @@ -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; |
