Skip to content

Commit f354d72

Browse files
authored
Rollup merge of #37267 - nnethercote:opt-write_metadata, r=eddyb
Optimize `write_metadata`. `write_metadata` currently generates metadata unnecessarily in some cases, and also compresses it unnecessarily in some cases. This commit fixes that. It speeds up three of the rustc-benchmarks by 1--4%. r? @eddyb, who deserves much of the credit because he (a) identified the problem from the profile data I provided in #37086, and (b) explained to me how to fix it. Thank you, @eddyb!
2 parents 9888313 + 016f69f commit f354d72

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/librustc_trans/base.rs

+26-6
Original file line numberDiff line numberDiff line change
@@ -1250,12 +1250,27 @@ fn write_metadata(cx: &SharedCrateContext,
12501250
reachable_ids: &NodeSet) -> Vec<u8> {
12511251
use flate;
12521252

1253-
let any_library = cx.sess()
1254-
.crate_types
1255-
.borrow()
1256-
.iter()
1257-
.any(|ty| *ty != config::CrateTypeExecutable);
1258-
if !any_library {
1253+
#[derive(PartialEq, Eq, PartialOrd, Ord)]
1254+
enum MetadataKind {
1255+
None,
1256+
Uncompressed,
1257+
Compressed
1258+
}
1259+
1260+
let kind = cx.sess().crate_types.borrow().iter().map(|ty| {
1261+
match *ty {
1262+
config::CrateTypeExecutable |
1263+
config::CrateTypeStaticlib |
1264+
config::CrateTypeCdylib => MetadataKind::None,
1265+
1266+
config::CrateTypeRlib => MetadataKind::Uncompressed,
1267+
1268+
config::CrateTypeDylib |
1269+
config::CrateTypeProcMacro => MetadataKind::Compressed,
1270+
}
1271+
}).max().unwrap();
1272+
1273+
if kind == MetadataKind::None {
12591274
return Vec::new();
12601275
}
12611276

@@ -1265,6 +1280,11 @@ fn write_metadata(cx: &SharedCrateContext,
12651280
cx.link_meta(),
12661281
reachable_ids,
12671282
cx.mir_map());
1283+
if kind == MetadataKind::Uncompressed {
1284+
return metadata;
1285+
}
1286+
1287+
assert!(kind == MetadataKind::Compressed);
12681288
let mut compressed = cstore.metadata_encoding_version().to_vec();
12691289
compressed.extend_from_slice(&flate::deflate_bytes(&metadata));
12701290

0 commit comments

Comments
 (0)