Skip to content

Commit cd41765

Browse files
committed
codegen_llvm: improve allocations
1 parent 61f4773 commit cd41765

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

src/librustc_codegen_llvm/allocator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub(crate) unsafe fn codegen(tcx: TyCtxt, mods: &ModuleLlvm, kind: AllocatorKind
3333
let void = llvm::LLVMVoidTypeInContext(llcx);
3434

3535
for method in ALLOCATOR_METHODS {
36-
let mut args = Vec::new();
36+
let mut args = Vec::with_capacity(method.inputs.len());
3737
for ty in method.inputs.iter() {
3838
match *ty {
3939
AllocatorTy::Layout => {

src/librustc_codegen_llvm/attributes.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,12 +280,14 @@ pub fn provide_extern(providers: &mut Providers) {
280280
// `NativeLibrary` internally contains information about
281281
// `#[link(wasm_import_module = "...")]` for example.
282282
let native_libs = tcx.native_libraries(cnum);
283-
let mut def_id_to_native_lib = FxHashMap();
284-
for lib in native_libs.iter() {
283+
284+
let def_id_to_native_lib = native_libs.iter().filter_map(|lib|
285285
if let Some(id) = lib.foreign_module {
286-
def_id_to_native_lib.insert(id, lib);
286+
Some((id, lib))
287+
} else {
288+
None
287289
}
288-
}
290+
).collect::<FxHashMap<_, _>>();
289291

290292
let mut ret = FxHashMap();
291293
for lib in tcx.foreign_modules(cnum).iter() {
@@ -296,10 +298,10 @@ pub fn provide_extern(providers: &mut Providers) {
296298
Some(s) => s,
297299
None => continue,
298300
};
299-
for id in lib.foreign_items.iter() {
301+
ret.extend(lib.foreign_items.iter().map(|id| {
300302
assert_eq!(id.krate, cnum);
301-
ret.insert(*id, module.to_string());
302-
}
303+
(*id, module.to_string())
304+
}));
303305
}
304306

305307
Lrc::new(ret)

src/librustc_codegen_llvm/base.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,7 +1122,15 @@ impl CrateInfo {
11221122
info.load_wasm_imports(tcx, LOCAL_CRATE);
11231123
}
11241124

1125-
for &cnum in tcx.crates().iter() {
1125+
let crates = tcx.crates();
1126+
1127+
let n_crates = crates.len();
1128+
info.native_libraries.reserve(n_crates);
1129+
info.crate_name.reserve(n_crates);
1130+
info.used_crate_source.reserve(n_crates);
1131+
info.missing_lang_items.reserve(n_crates);
1132+
1133+
for &cnum in crates.iter() {
11261134
info.native_libraries.insert(cnum, tcx.native_libraries(cnum));
11271135
info.crate_name.insert(cnum, tcx.crate_name(cnum).to_string());
11281136
info.used_crate_source.insert(cnum, tcx.used_crate_source(cnum));
@@ -1164,11 +1172,12 @@ impl CrateInfo {
11641172
}
11651173

11661174
fn load_wasm_imports(&mut self, tcx: TyCtxt, cnum: CrateNum) {
1167-
for (&id, module) in tcx.wasm_import_module_map(cnum).iter() {
1175+
self.wasm_imports.extend(tcx.wasm_import_module_map(cnum).iter().map(|(&id, module)| {
11681176
let instance = Instance::mono(tcx, id);
11691177
let import_name = tcx.symbol_name(instance);
1170-
self.wasm_imports.insert(import_name.to_string(), module.clone());
1171-
}
1178+
1179+
(import_name.to_string(), module.clone())
1180+
}));
11721181
}
11731182
}
11741183

src/librustc_codegen_llvm/llvm_util.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ fn require_inited() {
5252
}
5353

5454
unsafe fn configure_llvm(sess: &Session) {
55-
let mut llvm_c_strs = Vec::new();
56-
let mut llvm_args = Vec::new();
55+
let n_args = sess.opts.cg.llvm_args.len();
56+
let mut llvm_c_strs = Vec::with_capacity(n_args + 1);
57+
let mut llvm_args = Vec::with_capacity(n_args + 1);
5758

5859
{
5960
let mut add = |arg: &str| {

0 commit comments

Comments
 (0)