diff options
| author | bors <bors@rust-lang.org> | 2020-08-09 20:08:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-08-09 20:08:50 +0000 |
| commit | 18f3be7704a4ec7976fcd1272c728974243d29bd (patch) | |
| tree | 8d1f3d2e296e7b27e17ab74ca450c32132683002 /src/librustc_codegen_llvm | |
| parent | 39e593ab14c53fda63c3f2756716c5ad3cbb6465 (diff) | |
| parent | ca0b89aa040acf5df95d39579cbd7ff03c73baf1 (diff) | |
| download | rust-18f3be7704a4ec7976fcd1272c728974243d29bd.tar.gz rust-18f3be7704a4ec7976fcd1272c728974243d29bd.zip | |
Auto merge of #75278 - cuviper:indexmap, r=Mark-Simulacrum
Upgrade indexmap and use it more First this upgrades `indexmap` to 1.5.1, which is now based on `hashbrown::raw::RawTable`. This means it shares a lot of the same performance characteristics for insert, lookup, etc., while keeping items in insertion order. Then across various rustc crates, this replaces a lot of `Vec`+`HashMap` pairs with a single `IndexMap` or `IndexSet`. Closes #60608. r? @eddyb
Diffstat (limited to 'src/librustc_codegen_llvm')
| -rw-r--r-- | src/librustc_codegen_llvm/coverageinfo/mapgen.rs | 19 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/coverageinfo/mod.rs | 7 |
2 files changed, 10 insertions, 16 deletions
diff --git a/src/librustc_codegen_llvm/coverageinfo/mapgen.rs b/src/librustc_codegen_llvm/coverageinfo/mapgen.rs index 9d2383abeed..b50b3b6d975 100644 --- a/src/librustc_codegen_llvm/coverageinfo/mapgen.rs +++ b/src/librustc_codegen_llvm/coverageinfo/mapgen.rs @@ -6,7 +6,7 @@ use llvm::coverageinfo::CounterMappingRegion; use log::debug; use rustc_codegen_ssa::coverageinfo::map::{Counter, CounterExpression, Region}; use rustc_codegen_ssa::traits::{BaseTypeMethods, ConstMethods}; -use rustc_data_structures::fx::FxHashMap; +use rustc_data_structures::fx::FxIndexSet; use rustc_llvm::RustString; use std::ffi::CString; @@ -76,13 +76,12 @@ pub fn finalize<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>) { } struct CoverageMapGenerator { - filenames: Vec<CString>, - filename_to_index: FxHashMap<CString, u32>, + filenames: FxIndexSet<CString>, } impl CoverageMapGenerator { fn new() -> Self { - Self { filenames: Vec::new(), filename_to_index: FxHashMap::default() } + Self { filenames: FxIndexSet::default() } } /// Using the `expressions` and `counter_regions` collected for the current function, generate @@ -122,16 +121,8 @@ impl CoverageMapGenerator { let c_filename = CString::new(file_name).expect("null error converting filename to C string"); debug!(" file_id: {} = '{:?}'", current_file_id, c_filename); - let filenames_index = match self.filename_to_index.get(&c_filename) { - Some(index) => *index, - None => { - let index = self.filenames.len() as u32; - self.filenames.push(c_filename.clone()); - self.filename_to_index.insert(c_filename.clone(), index); - index - } - }; - virtual_file_mapping.push(filenames_index); + let (filenames_index, _) = self.filenames.insert_full(c_filename); + virtual_file_mapping.push(filenames_index as u32); } mapping_regions.push(CounterMappingRegion::code_region( counter, diff --git a/src/librustc_codegen_llvm/coverageinfo/mod.rs b/src/librustc_codegen_llvm/coverageinfo/mod.rs index 7b864e499d1..90831f0bcfb 100644 --- a/src/librustc_codegen_llvm/coverageinfo/mod.rs +++ b/src/librustc_codegen_llvm/coverageinfo/mod.rs @@ -97,8 +97,11 @@ impl CoverageInfoBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> { } } -pub(crate) fn write_filenames_section_to_buffer(filenames: &Vec<CString>, buffer: &RustString) { - let c_str_vec = filenames.iter().map(|cstring| cstring.as_ptr()).collect::<Vec<_>>(); +pub(crate) fn write_filenames_section_to_buffer<'a>( + filenames: impl IntoIterator<Item = &'a CString>, + buffer: &RustString, +) { + let c_str_vec = filenames.into_iter().map(|cstring| cstring.as_ptr()).collect::<Vec<_>>(); unsafe { llvm::LLVMRustCoverageWriteFilenamesSectionToBuffer( c_str_vec.as_ptr(), |
