Auto merge of #101307 - jyn514:simplify-storage, r=cjgillot
Simplify caching and storage for queries I highly recommend reviewing commit-by-commit; each individual commit is quite small but it can be hard to see looking at the overall diff that the behavior is the same. Each commit depends on the previous. r? `@cjgillot`
This commit is contained in:
commit
a5b58addae
7 changed files with 107 additions and 153 deletions
|
@ -47,14 +47,14 @@ rustc_queries! {
|
|||
/// To avoid this fate, do not call `tcx.hir().krate()`; instead,
|
||||
/// prefer wrappers like `tcx.visit_all_items_in_krate()`.
|
||||
query hir_crate(key: ()) -> Crate<'tcx> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "get the crate HIR" }
|
||||
}
|
||||
|
||||
/// All items in the crate.
|
||||
query hir_crate_items(_: ()) -> rustc_middle::hir::ModuleItems {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "get HIR crate items" }
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ rustc_queries! {
|
|||
/// This can be conveniently accessed by `tcx.hir().visit_item_likes_in_module`.
|
||||
/// Avoid calling this query directly.
|
||||
query hir_module_items(key: LocalDefId) -> rustc_middle::hir::ModuleItems {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "HIR module items in `{}`", tcx.def_path_str(key.to_def_id()) }
|
||||
cache_on_disk_if { true }
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ rustc_queries! {
|
|||
/// associated generics.
|
||||
query generics_of(key: DefId) -> ty::Generics {
|
||||
desc { |tcx| "computing generics of `{}`", tcx.def_path_str(key) }
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
cache_on_disk_if { key.is_local() }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -268,13 +268,13 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query native_libraries(_: CrateNum) -> Vec<NativeLib> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "looking up the native libraries of a linked crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
||||
query lint_levels(_: ()) -> LintLevelMap {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "computing the lint levels for items in this crate" }
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ rustc_queries! {
|
|||
/// Create a THIR tree for debugging.
|
||||
query thir_tree(key: ty::WithOptConstParam<LocalDefId>) -> String {
|
||||
no_hash
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "constructing THIR tree for `{}`", tcx.def_path_str(key.did.to_def_id()) }
|
||||
}
|
||||
|
||||
|
@ -315,7 +315,7 @@ rustc_queries! {
|
|||
/// them. This includes all the body owners, but also things like struct
|
||||
/// constructors.
|
||||
query mir_keys(_: ()) -> rustc_data_structures::fx::FxIndexSet<LocalDefId> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "getting a list of all mir_keys" }
|
||||
}
|
||||
|
||||
|
@ -422,7 +422,7 @@ rustc_queries! {
|
|||
query symbols_for_closure_captures(
|
||||
key: (LocalDefId, LocalDefId)
|
||||
) -> Vec<rustc_span::Symbol> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc {
|
||||
|tcx| "symbols for captures of closure `{}` in `{}`",
|
||||
tcx.def_path_str(key.1.to_def_id()),
|
||||
|
@ -442,7 +442,7 @@ rustc_queries! {
|
|||
/// MIR pass (assuming the -Cinstrument-coverage option is enabled).
|
||||
query coverageinfo(key: ty::InstanceDef<'tcx>) -> mir::CoverageInfo {
|
||||
desc { |tcx| "retrieving coverage info from MIR for `{}`", tcx.def_path_str(key.def_id()) }
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
}
|
||||
|
||||
/// Returns the `CodeRegions` for a function that has instrumented coverage, in case the
|
||||
|
@ -452,7 +452,7 @@ rustc_queries! {
|
|||
|tcx| "retrieving the covered `CodeRegion`s, if instrumented, for `{}`",
|
||||
tcx.def_path_str(key)
|
||||
}
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
cache_on_disk_if { key.is_local() }
|
||||
}
|
||||
|
||||
|
@ -490,7 +490,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query wasm_import_module_map(_: CrateNum) -> FxHashMap<DefId, String> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "wasm import module map" }
|
||||
}
|
||||
|
||||
|
@ -566,7 +566,7 @@ rustc_queries! {
|
|||
|
||||
query trait_def(key: DefId) -> ty::TraitDef {
|
||||
desc { |tcx| "computing trait definition for `{}`", tcx.def_path_str(key) }
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
cache_on_disk_if { key.is_local() }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -644,7 +644,7 @@ rustc_queries! {
|
|||
|
||||
/// Gets a map with the variance of every item; use `item_variance` instead.
|
||||
query crate_variances(_: ()) -> ty::CrateVariancesMap<'tcx> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "computing the variances for items in this crate" }
|
||||
}
|
||||
|
||||
|
@ -657,7 +657,7 @@ rustc_queries! {
|
|||
|
||||
/// Maps from thee `DefId` of a type to its (inferred) outlives.
|
||||
query inferred_outlives_crate(_: ()) -> ty::CratePredicatesMap<'tcx> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "computing the inferred outlives predicates for items in this crate" }
|
||||
}
|
||||
|
||||
|
@ -671,14 +671,14 @@ rustc_queries! {
|
|||
/// Maps from a trait item to the trait item "descriptor".
|
||||
query associated_item(key: DefId) -> ty::AssocItem {
|
||||
desc { |tcx| "computing associated item data for `{}`", tcx.def_path_str(key) }
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
cache_on_disk_if { key.is_local() }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
||||
/// Collects the associated items defined on a trait or impl.
|
||||
query associated_items(key: DefId) -> ty::AssocItems<'tcx> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "collecting associated items of {}", tcx.def_path_str(key) }
|
||||
}
|
||||
|
||||
|
@ -704,7 +704,7 @@ rustc_queries! {
|
|||
/// The map returned for `tcx.impl_item_implementor_ids(impl_id)` would be
|
||||
///`{ trait_f: impl_f, trait_g: impl_g }`
|
||||
query impl_item_implementor_ids(impl_id: DefId) -> FxHashMap<DefId, DefId> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "comparing impl items against trait for {}", tcx.def_path_str(impl_id) }
|
||||
}
|
||||
|
||||
|
@ -837,7 +837,7 @@ rustc_queries! {
|
|||
FxHashSet<LocalDefId>,
|
||||
FxHashMap<LocalDefId, Vec<(DefId, DefId)>>
|
||||
) {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "find live symbols in crate" }
|
||||
}
|
||||
|
||||
|
@ -883,13 +883,6 @@ rustc_queries! {
|
|||
query diagnostic_only_typeck(key: LocalDefId) -> &'tcx ty::TypeckResults<'tcx> {
|
||||
desc { |tcx| "type-checking `{}`", tcx.def_path_str(key.to_def_id()) }
|
||||
cache_on_disk_if { true }
|
||||
load_cached(tcx, id) {
|
||||
let typeck_results: Option<ty::TypeckResults<'tcx>> = tcx
|
||||
.on_disk_cache().as_ref()
|
||||
.and_then(|c| c.try_load_query_result(*tcx, id));
|
||||
|
||||
typeck_results.map(|x| &*tcx.arena.alloc(x))
|
||||
}
|
||||
}
|
||||
|
||||
query used_trait_imports(key: LocalDefId) -> &'tcx FxHashSet<LocalDefId> {
|
||||
|
@ -921,7 +914,7 @@ rustc_queries! {
|
|||
/// Gets a complete map from all types to their inherent impls.
|
||||
/// Not meant to be used directly outside of coherence.
|
||||
query crate_inherent_impls(k: ()) -> CrateInherentImpls {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "all inherent impls defined in crate" }
|
||||
}
|
||||
|
||||
|
@ -1054,7 +1047,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query reachable_set(_: ()) -> FxHashSet<LocalDefId> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "reachability" }
|
||||
}
|
||||
|
||||
|
@ -1066,7 +1059,7 @@ rustc_queries! {
|
|||
|
||||
/// Generates a MIR body for the shim.
|
||||
query mir_shims(key: ty::InstanceDef<'tcx>) -> mir::Body<'tcx> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "generating MIR shim for `{}`", tcx.def_path_str(key.def_id()) }
|
||||
}
|
||||
|
||||
|
@ -1140,7 +1133,7 @@ rustc_queries! {
|
|||
|
||||
query codegen_fn_attrs(def_id: DefId) -> CodegenFnAttrs {
|
||||
desc { |tcx| "computing codegen attributes of `{}`", tcx.def_path_str(def_id) }
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
cache_on_disk_if { def_id.is_local() }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1157,7 +1150,7 @@ rustc_queries! {
|
|||
/// Gets the rendered value of the specified constant or associated constant.
|
||||
/// Used by rustdoc.
|
||||
query rendered_const(def_id: DefId) -> String {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "rendering constant initializer of `{}`", tcx.def_path_str(def_id) }
|
||||
cache_on_disk_if { def_id.is_local() }
|
||||
separate_provide_extern
|
||||
|
@ -1216,12 +1209,12 @@ rustc_queries! {
|
|||
|
||||
/// Given a trait `trait_id`, return all known `impl` blocks.
|
||||
query trait_impls_of(trait_id: DefId) -> ty::trait_def::TraitImpls {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "trait impls of `{}`", tcx.def_path_str(trait_id) }
|
||||
}
|
||||
|
||||
query specialization_graph_of(trait_id: DefId) -> specialization_graph::Graph {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "building specialization graph of trait `{}`", tcx.def_path_str(trait_id) }
|
||||
cache_on_disk_if { true }
|
||||
}
|
||||
|
@ -1348,7 +1341,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query dependency_formats(_: ()) -> Lrc<crate::middle::dependency_format::Dependencies> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "get the linkage format of all dependencies" }
|
||||
}
|
||||
|
||||
|
@ -1441,7 +1434,7 @@ rustc_queries! {
|
|||
// like the compiler-generated `main` function and so on.
|
||||
query reachable_non_generics(_: CrateNum)
|
||||
-> DefIdMap<SymbolExportInfo> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "looking up the exported symbols of a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1464,7 +1457,7 @@ rustc_queries! {
|
|||
/// `upstream_monomorphizations_for`, `upstream_drop_glue_for`, or, even
|
||||
/// better, `Instance::upstream_monomorphization()`.
|
||||
query upstream_monomorphizations(_: ()) -> DefIdMap<FxHashMap<SubstsRef<'tcx>, CrateNum>> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "collecting available upstream monomorphizations" }
|
||||
}
|
||||
|
||||
|
@ -1478,7 +1471,7 @@ rustc_queries! {
|
|||
query upstream_monomorphizations_for(def_id: DefId)
|
||||
-> Option<&'tcx FxHashMap<SubstsRef<'tcx>, CrateNum>>
|
||||
{
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx|
|
||||
"collecting available upstream monomorphizations for `{}`",
|
||||
tcx.def_path_str(def_id),
|
||||
|
@ -1506,7 +1499,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query foreign_modules(_: CrateNum) -> FxHashMap<DefId, ForeignModule> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "looking up the foreign modules of a linked crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1532,13 +1525,13 @@ rustc_queries! {
|
|||
separate_provide_extern
|
||||
}
|
||||
query extra_filename(_: CrateNum) -> String {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "looking up the extra filename for a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
query crate_extern_paths(_: CrateNum) -> Vec<PathBuf> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "looking up the paths for extern crates" }
|
||||
separate_provide_extern
|
||||
|
@ -1580,14 +1573,14 @@ rustc_queries! {
|
|||
/// the same lifetimes and is responsible for diagnostics.
|
||||
/// See `rustc_resolve::late::lifetimes for details.
|
||||
query resolve_lifetimes_trait_definition(_: LocalDefId) -> ResolveLifetimes {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "resolving lifetimes for a trait definition" }
|
||||
}
|
||||
/// Does lifetime resolution on items. Importantly, we can't resolve
|
||||
/// lifetimes directly on things like trait methods, because of trait params.
|
||||
/// See `rustc_resolve::late::lifetimes for details.
|
||||
query resolve_lifetimes(_: LocalDefId) -> ResolveLifetimes {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "resolving lifetimes" }
|
||||
}
|
||||
query named_region_map(_: LocalDefId) ->
|
||||
|
@ -1657,7 +1650,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query lib_features(_: ()) -> LibFeatures {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "calculating the lib features map" }
|
||||
}
|
||||
query defined_lib_features(_: CrateNum) -> &'tcx [(Symbol, Option<Symbol>)] {
|
||||
|
@ -1665,7 +1658,7 @@ rustc_queries! {
|
|||
separate_provide_extern
|
||||
}
|
||||
query stability_implications(_: CrateNum) -> FxHashMap<Symbol, Symbol> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "calculating the implications between `#[unstable]` features defined in a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1676,14 +1669,14 @@ rustc_queries! {
|
|||
}
|
||||
/// Returns the lang items defined in another crate by loading it from metadata.
|
||||
query get_lang_items(_: ()) -> LanguageItems {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "calculating the lang items map" }
|
||||
}
|
||||
|
||||
/// Returns all diagnostic items defined in all crates.
|
||||
query all_diagnostic_items(_: ()) -> rustc_hir::diagnostic_items::DiagnosticItems {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "calculating the diagnostic items map" }
|
||||
}
|
||||
|
@ -1696,7 +1689,7 @@ rustc_queries! {
|
|||
|
||||
/// Returns the diagnostic items defined in a crate.
|
||||
query diagnostic_items(_: CrateNum) -> rustc_hir::diagnostic_items::DiagnosticItems {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "calculating the diagnostic items map in a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1706,11 +1699,11 @@ rustc_queries! {
|
|||
separate_provide_extern
|
||||
}
|
||||
query visible_parent_map(_: ()) -> DefIdMap<DefId> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "calculating the visible parent map" }
|
||||
}
|
||||
query trimmed_def_paths(_: ()) -> FxHashMap<DefId, Symbol> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "calculating trimmed def paths" }
|
||||
}
|
||||
query missing_extern_crate_item(_: CrateNum) -> bool {
|
||||
|
@ -1719,14 +1712,14 @@ rustc_queries! {
|
|||
separate_provide_extern
|
||||
}
|
||||
query used_crate_source(_: CrateNum) -> Lrc<CrateSource> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "looking at the source for a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
/// Returns the debugger visualizers defined for this crate.
|
||||
query debugger_visualizers(_: CrateNum) -> Vec<rustc_span::DebuggerVisualizerFile> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { "looking up the debugger visualizers for this crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
@ -1760,7 +1753,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query stability_index(_: ()) -> stability::Index {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "calculating the stability index for the local crate" }
|
||||
}
|
||||
|
@ -2001,7 +1994,7 @@ rustc_queries! {
|
|||
}
|
||||
|
||||
query supported_target_features(_: CrateNum) -> FxHashMap<String, Option<Symbol>> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "looking up supported target features" }
|
||||
}
|
||||
|
@ -2071,7 +2064,7 @@ rustc_queries! {
|
|||
/// all of the cases that the normal `ty::Ty`-based wfcheck does. This is fine,
|
||||
/// because the `ty::Ty`-based wfcheck is always run.
|
||||
query diagnostic_hir_wf_check(key: (ty::Predicate<'tcx>, traits::WellFormedLoc)) -> Option<traits::ObligationCause<'tcx>> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
no_hash
|
||||
desc { "performing HIR wf-checking for predicate {:?} at item {:?}", key.0, key.1 }
|
||||
|
@ -2081,13 +2074,13 @@ rustc_queries! {
|
|||
/// The list of backend features computed from CLI flags (`-Ctarget-cpu`, `-Ctarget-feature`,
|
||||
/// `--target` and similar).
|
||||
query global_backend_features(_: ()) -> Vec<String> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
eval_always
|
||||
desc { "computing the backend features for CLI flags" }
|
||||
}
|
||||
|
||||
query generator_diagnostic_data(key: DefId) -> Option<GeneratorDiagnosticData<'tcx>> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
arena_cache
|
||||
desc { |tcx| "looking up generator diagnostic data of `{}`", tcx.def_path_str(key) }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue