diff options
| author | bors <bors@rust-lang.org> | 2018-09-23 07:38:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-09-23 07:38:17 +0000 |
| commit | 317ae05a7e4ee5324cc006eda877eb8f2eb57898 (patch) | |
| tree | 8ee1ec1f1f10f20299f44f7b648dd49748959624 /src/librustc_codegen_llvm/back | |
| parent | 7714c430ae1f771001fc0a1b083752485baba56e (diff) | |
| parent | ca197323b9554c9fa1c74f1d3b6370669b709c07 (diff) | |
| download | rust-317ae05a7e4ee5324cc006eda877eb8f2eb57898.tar.gz rust-317ae05a7e4ee5324cc006eda877eb8f2eb57898.zip | |
Auto merge of #54325 - michaelwoerister:incr-thinlto-tests, r=alexcrichton
incr.comp.: Allow for more fine-grained testing of CGU reuse and use it to test incremental ThinLTO. This adds some tests specifically targeted at incremental ThinLTO, plus the infrastructure for tracking the kind of cache hit/miss we had for a given CGU. @alexcrichton, let me know if you can think of any more tests to add. ThinLTO works rather reliably for small functions, so we should be able to test it in a robust way. I think after this lands it might time for a "Help us test incremental ThinLTO" post on irlo. r? @alexcrichton
Diffstat (limited to 'src/librustc_codegen_llvm/back')
| -rw-r--r-- | src/librustc_codegen_llvm/back/lto.rs | 3 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/back/write.rs | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs index 364b469738f..3ac22f4eaef 100644 --- a/src/librustc_codegen_llvm/back/lto.rs +++ b/src/librustc_codegen_llvm/back/lto.rs @@ -18,6 +18,7 @@ use llvm::{True, False}; use llvm; use memmap; use rustc::dep_graph::WorkProduct; +use rustc::dep_graph::cgu_reuse_tracker::CguReuse; use rustc::hir::def_id::LOCAL_CRATE; use rustc::middle::exported_symbols::SymbolExportLevel; use rustc::session::config::{self, Lto}; @@ -538,6 +539,8 @@ fn thin_lto(cgcx: &CodegenContext, let work_product = green_modules[module_name].clone(); copy_jobs.push(work_product); info!(" - {}: re-used", module_name); + cgcx.cgu_reuse_tracker.set_actual_reuse(module_name, + CguReuse::PostLto); continue } } diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs index 7b78d4fb4ff..447b505e79c 100644 --- a/src/librustc_codegen_llvm/back/write.rs +++ b/src/librustc_codegen_llvm/back/write.rs @@ -21,6 +21,7 @@ use memmap; use rustc_incremental::{copy_cgu_workproducts_to_incr_comp_cache_dir, in_incr_comp_dir, in_incr_comp_dir_sess}; use rustc::dep_graph::{WorkProduct, WorkProductId, WorkProductFileKind}; +use rustc::dep_graph::cgu_reuse_tracker::CguReuseTracker; use rustc::middle::cstore::EncodedMetadata; use rustc::session::config::{self, OutputFilenames, OutputType, Passes, Sanitizer, Lto}; use rustc::session::Session; @@ -377,6 +378,8 @@ pub struct CodegenContext { // The incremental compilation session directory, or None if we are not // compiling incrementally pub incr_comp_session_dir: Option<PathBuf>, + // Used to update CGU re-use information during the thinlto phase. + pub cgu_reuse_tracker: CguReuseTracker, // Channel back to the main control thread to send messages to coordinator_send: Sender<Box<dyn Any + Send>>, // A reference to the TimeGraph so we can register timings. None means that @@ -1607,6 +1610,7 @@ fn start_executing_work(tcx: TyCtxt, remark: sess.opts.cg.remark.clone(), worker: 0, incr_comp_session_dir: sess.incr_comp_session_dir_opt().map(|r| r.clone()), + cgu_reuse_tracker: sess.cgu_reuse_tracker.clone(), coordinator_send, diag_emitter: shared_emitter.clone(), time_graph, @@ -2390,6 +2394,8 @@ impl OngoingCodegen { } }; + sess.cgu_reuse_tracker.check_expected_reuse(sess); + sess.abort_if_errors(); if let Some(time_graph) = self.time_graph { |
