1
Fork 0

Rollup merge of #108405 - Nilstrieb:lazy-crate-name-optimization-fuel, r=WaffleLapkin

Lazily compute crate name for consider_optimizing

The extra query is unnecessary in the common case of not having fuel.
This commit is contained in:
Dylan DPC 2023-03-04 15:24:37 +05:30 committed by GitHub
commit 832dab3798
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 5 deletions

View file

@ -794,8 +794,7 @@ impl<'tcx> TyCtxt<'tcx> {
} }
pub fn consider_optimizing<T: Fn() -> String>(self, msg: T) -> bool { pub fn consider_optimizing<T: Fn() -> String>(self, msg: T) -> bool {
let cname = self.crate_name(LOCAL_CRATE); self.sess.consider_optimizing(|| self.crate_name(LOCAL_CRATE), msg)
self.sess.consider_optimizing(cname.as_str(), msg)
} }
/// Obtain all lang items of this crate and all dependencies (recursively) /// Obtain all lang items of this crate and all dependencies (recursively)

View file

@ -882,10 +882,14 @@ impl Session {
/// We want to know if we're allowed to do an optimization for crate foo from -z fuel=foo=n. /// We want to know if we're allowed to do an optimization for crate foo from -z fuel=foo=n.
/// This expends fuel if applicable, and records fuel if applicable. /// This expends fuel if applicable, and records fuel if applicable.
pub fn consider_optimizing<T: Fn() -> String>(&self, crate_name: &str, msg: T) -> bool { pub fn consider_optimizing(
&self,
get_crate_name: impl Fn() -> Symbol,
msg: impl Fn() -> String,
) -> bool {
let mut ret = true; let mut ret = true;
if let Some((ref c, _)) = self.opts.unstable_opts.fuel { if let Some((ref c, _)) = self.opts.unstable_opts.fuel {
if c == crate_name { if c == get_crate_name().as_str() {
assert_eq!(self.threads(), 1); assert_eq!(self.threads(), 1);
let mut fuel = self.optimization_fuel.lock(); let mut fuel = self.optimization_fuel.lock();
ret = fuel.remaining != 0; ret = fuel.remaining != 0;
@ -903,7 +907,7 @@ impl Session {
} }
} }
if let Some(ref c) = self.opts.unstable_opts.print_fuel { if let Some(ref c) = self.opts.unstable_opts.print_fuel {
if c == crate_name { if c == get_crate_name().as_str() {
assert_eq!(self.threads(), 1); assert_eq!(self.threads(), 1);
self.print_fuel.fetch_add(1, SeqCst); self.print_fuel.fetch_add(1, SeqCst);
} }