Skip to content

Commit 991d466

Browse files
committed
rustc: Compress bytecode files in rlibs
These are only ever used with LTO, so there's no need for reading them to be speedy.
1 parent 6532d2f commit 991d466

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/librustc/back/link.rs

+10
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use std::run;
3434
use std::str;
3535
use std::io;
3636
use std::io::fs;
37+
use flate;
3738
use serialize::hex::ToHex;
3839
use extra::tempfile::TempDir;
3940
use syntax::abi;
@@ -942,6 +943,15 @@ fn link_rlib(sess: Session,
942943
// For LTO purposes, the bytecode of this library is also inserted
943944
// into the archive.
944945
let bc = obj_filename.with_extension("bc");
946+
match fs::File::open(&bc).read_to_end().and_then(|data| {
947+
fs::File::create(&bc).write(flate::deflate_bytes(data))
948+
}) {
949+
Ok(()) => {}
950+
Err(e) => {
951+
sess.err(format!("failed to compress bytecode: {}", e));
952+
sess.abort_if_errors()
953+
}
954+
}
945955
a.add_file(&bc, false);
946956
if !sess.opts.cg.save_temps &&
947957
!sess.opts.output_types.contains(&OutputTypeBitcode) {

src/librustc/back/lto.rs

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use metadata::cstore;
1616
use util::common::time;
1717

1818
use std::libc;
19+
use flate;
1920

2021
pub fn run(sess: session::Session, llmod: ModuleRef,
2122
tm: TargetMachineRef, reachable: &[~str]) {
@@ -55,6 +56,8 @@ pub fn run(sess: session::Session, llmod: ModuleRef,
5556
let bc = time(sess.time_passes(), format!("read {}.bc", name), (), |_|
5657
archive.read(format!("{}.bc", name)));
5758
let bc = bc.expect("missing bytecode in archive!");
59+
let bc = time(sess.time_passes(), format!("inflate {}.bc", name), (), |_|
60+
flate::inflate_bytes(bc));
5861
let ptr = bc.as_ptr();
5962
debug!("linking {}", name);
6063
time(sess.time_passes(), format!("ll link {}", name), (), |()| unsafe {

0 commit comments

Comments
 (0)