1
Fork 0

Use get_many_mut to reduce the cost of setup ping check cfg values

This commit is contained in:
Urgau 2022-06-02 15:39:16 +02:00
parent a4cec9742b
commit 5f042811a2
2 changed files with 90 additions and 34 deletions

View file

@ -1102,8 +1102,11 @@ impl CrateCheckConfig {
.extend(atomic_values);
// Target specific values
for target in
TARGETS.iter().map(|target| Target::expect_builtin(&TargetTriple::from_triple(target)))
#[cfg(bootstrap)]
{
for target in TARGETS
.iter()
.map(|target| Target::expect_builtin(&TargetTriple::from_triple(target)))
{
self.values_valid
.entry(sym::target_os)
@ -1140,6 +1143,58 @@ impl CrateCheckConfig {
}
}
// Target specific values
#[cfg(not(bootstrap))]
{
const VALUES: [&Symbol; 8] = [
&sym::target_os,
&sym::target_family,
&sym::target_arch,
&sym::target_endian,
&sym::target_env,
&sym::target_abi,
&sym::target_vendor,
&sym::target_pointer_width,
];
// Initialize (if not already initialized)
for &e in VALUES {
self.values_valid.entry(e).or_default();
}
// Get all values map at once otherwise it would be costly.
// (8 values * 220 targets ~= 1760 times, at the time of writing this comment).
let [
values_target_os,
values_target_family,
values_target_arch,
values_target_endian,
values_target_env,
values_target_abi,
values_target_vendor,
values_target_pointer_width,
] = self
.values_valid
.get_many_mut(VALUES)
.expect("unable to get all the check-cfg values buckets");
for target in TARGETS
.iter()
.map(|target| Target::expect_builtin(&TargetTriple::from_triple(target)))
{
values_target_os.insert(Symbol::intern(&target.options.os));
values_target_family
.extend(target.options.families.iter().map(|family| Symbol::intern(family)));
values_target_arch.insert(Symbol::intern(&target.arch));
values_target_endian.insert(Symbol::intern(&target.options.endian.as_str()));
values_target_env.insert(Symbol::intern(&target.options.env));
values_target_abi.insert(Symbol::intern(&target.options.abi));
values_target_vendor.insert(Symbol::intern(&target.options.vendor));
values_target_pointer_width.insert(sym::integer(target.pointer_width));
}
}
}
pub fn fill_well_known(&mut self) {
self.fill_well_known_names();
self.fill_well_known_values();

View file

@ -6,6 +6,7 @@
#![feature(once_cell)]
#![feature(option_get_or_insert_default)]
#![feature(rustc_attrs)]
#![cfg_attr(not(bootstrap), feature(map_many_mut))]
#![recursion_limit = "256"]
#![allow(rustc::potential_query_instability)]