if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") {
cmd.arg("-C").arg(format!("codegen-units={}", s));
}
+ if stage != "0" && env::var("RUSTC_THINLTO").is_ok() {
+ cmd.arg("-Ccodegen-units=16").arg("-Zthinlto");
+ }
// Emit save-analysis info.
if env::var("RUSTC_SAVE_ANALYSIS") == Ok("api".to_string()) {
.env("RUSTC", self.out.join("bootstrap/debug/rustc"))
.env("RUSTC_REAL", self.rustc(compiler))
.env("RUSTC_STAGE", stage.to_string())
- .env("RUSTC_CODEGEN_UNITS",
- self.config.rust_codegen_units.to_string())
.env("RUSTC_DEBUG_ASSERTIONS",
self.config.rust_debug_assertions.to_string())
.env("RUSTC_SYSROOT", self.sysroot(compiler))
})
.env("TEST_MIRI", self.config.test_miri.to_string());
+ if let Some(n) = self.config.rust_codegen_units {
+ cargo.env("RUSTC_CODEGEN_UNITS", n.to_string());
+ }
+
if let Some(host_linker) = self.build.linker(compiler.host) {
cargo.env("RUSTC_HOST_LINKER", host_linker);
}
// FIXME: cargo bench does not accept `--release`
if self.config.rust_optimize && cmd != "bench" {
cargo.arg("--release");
+
+ if mode != Mode::Libstd &&
+ self.config.rust_codegen_units.is_none() &&
+ self.build.is_rust_llvm(compiler.host)
+
+ {
+ cargo.env("RUSTC_THINLTO", "1");
+ }
}
if self.config.locked_deps {
cargo.arg("--locked");
// rust codegen options
pub rust_optimize: bool,
- pub rust_codegen_units: u32,
+ pub rust_codegen_units: Option<u32>,
pub rust_debug_assertions: bool,
pub rust_debuginfo: bool,
pub rust_debuginfo_lines: bool,
config.submodules = true;
config.docs = true;
config.rust_rpath = true;
- config.rust_codegen_units = 1;
config.channel = "dev".to_string();
config.codegen_tests = true;
config.ignore_git = false;
config.musl_root = rust.musl_root.clone().map(PathBuf::from);
match rust.codegen_units {
- Some(0) => config.rust_codegen_units = num_cpus::get() as u32,
- Some(n) => config.rust_codegen_units = n,
+ Some(0) => config.rust_codegen_units = Some(num_cpus::get() as u32),
+ Some(n) => config.rust_codegen_units = Some(n),
None => {}
}
}
/// assert_eq!(map.get(&2), None);
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
+ #[inline]
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
where K: Borrow<Q>,
Q: Hash + Eq
{
type Key = K;
+ #[inline]
fn get(&self, key: &Q) -> Option<&K> {
self.search(key).into_occupied_bucket().map(|bucket| bucket.into_refs().0)
}
self.search_mut(key).into_occupied_bucket().map(|bucket| pop_internal(bucket).0)
}
+ #[inline]
fn replace(&mut self, key: K) -> Option<K> {
self.reserve(1);