Auto merge of #140856 - oli-obk:merge-queries2, r=nnethercote
Merge mir query analysis invocations r? `@ghost` same thing as https://github.com/rust-lang/rust/pull/140854 just a different set of queries Doing this in general has some bad cache coherence issues because the query caches are laid out in Vec<QueryResult> lists per query where each index refers to a DefId in the same order as we're iterating. Iterating two or more lists at the same time does have cache issues, so I want to poke a bit at it to see if we can't merge just a few of them at a time.
This commit is contained in:
commit
16244bc37a
5 changed files with 16 additions and 24 deletions
|
|
@ -214,11 +214,9 @@ fn visit_implementation_of_dispatch_from_dyn(checker: &Checker<'_>) -> Result<()
|
|||
let span = tcx.def_span(impl_did);
|
||||
let trait_name = "DispatchFromDyn";
|
||||
|
||||
let dispatch_from_dyn_trait = tcx.require_lang_item(LangItem::DispatchFromDyn, Some(span));
|
||||
|
||||
let source = trait_ref.self_ty();
|
||||
let target = {
|
||||
assert_eq!(trait_ref.def_id, dispatch_from_dyn_trait);
|
||||
assert!(tcx.is_lang_item(trait_ref.def_id, LangItem::DispatchFromDyn));
|
||||
|
||||
trait_ref.args.type_at(1)
|
||||
};
|
||||
|
|
@ -339,7 +337,7 @@ fn visit_implementation_of_dispatch_from_dyn(checker: &Checker<'_>) -> Result<()
|
|||
tcx,
|
||||
cause.clone(),
|
||||
param_env,
|
||||
ty::TraitRef::new(tcx, dispatch_from_dyn_trait, [ty_a, ty_b]),
|
||||
ty::TraitRef::new(tcx, trait_ref.def_id, [ty_a, ty_b]),
|
||||
));
|
||||
let errors = ocx.select_all_or_error();
|
||||
if !errors.is_empty() {
|
||||
|
|
|
|||
|
|
@ -194,17 +194,6 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
|
|||
let _: R = tcx.ensure_ok().crate_inherent_impls_overlap_check(());
|
||||
});
|
||||
|
||||
if tcx.features().rustc_attrs() {
|
||||
tcx.sess.time("dumping_rustc_attr_data", || {
|
||||
outlives::dump::inferred_outlives(tcx);
|
||||
variance::dump::variances(tcx);
|
||||
collect::dump::opaque_hidden_types(tcx);
|
||||
collect::dump::predicates_and_item_bounds(tcx);
|
||||
collect::dump::def_parents(tcx);
|
||||
collect::dump::vtables(tcx);
|
||||
});
|
||||
}
|
||||
|
||||
// Make sure we evaluate all static and (non-associated) const items, even if unused.
|
||||
// If any of these fail to evaluate, we do not want this crate to pass compilation.
|
||||
tcx.par_hir_body_owners(|item_def_id| {
|
||||
|
|
@ -228,6 +217,17 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
|
|||
}
|
||||
});
|
||||
|
||||
if tcx.features().rustc_attrs() {
|
||||
tcx.sess.time("dumping_rustc_attr_data", || {
|
||||
outlives::dump::inferred_outlives(tcx);
|
||||
variance::dump::variances(tcx);
|
||||
collect::dump::opaque_hidden_types(tcx);
|
||||
collect::dump::predicates_and_item_bounds(tcx);
|
||||
collect::dump::def_parents(tcx);
|
||||
collect::dump::vtables(tcx);
|
||||
});
|
||||
}
|
||||
|
||||
tcx.ensure_ok().check_unused_traits(());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1080,15 +1080,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
|
||||
// Check that this is a projection from the `Future` trait.
|
||||
let trait_def_id = predicate.projection_term.trait_def_id(self.tcx);
|
||||
let future_trait = self.tcx.require_lang_item(LangItem::Future, Some(cause_span));
|
||||
if trait_def_id != future_trait {
|
||||
if !self.tcx.is_lang_item(trait_def_id, LangItem::Future) {
|
||||
debug!("deduce_future_output_from_projection: not a future");
|
||||
return None;
|
||||
}
|
||||
|
||||
// The `Future` trait has only one associated item, `Output`,
|
||||
// so check that this is what we see.
|
||||
let output_assoc_item = self.tcx.associated_item_def_ids(future_trait)[0];
|
||||
let output_assoc_item = self.tcx.associated_item_def_ids(trait_def_id)[0];
|
||||
if output_assoc_item != predicate.projection_term.def_id {
|
||||
span_bug!(
|
||||
cause_span,
|
||||
|
|
|
|||
|
|
@ -1001,10 +1001,6 @@ fn run_required_analyses(tcx: TyCtxt<'_>) {
|
|||
tcx.ensure_ok().check_unsafety(def_id);
|
||||
tcx.ensure_ok().mir_borrowck(def_id)
|
||||
}
|
||||
});
|
||||
});
|
||||
sess.time("MIR_effect_checking", || {
|
||||
tcx.par_hir_body_owners(|def_id| {
|
||||
tcx.ensure_ok().has_ffi_unwind_calls(def_id);
|
||||
|
||||
// If we need to codegen, ensure that we emit all errors from
|
||||
|
|
|
|||
|
|
@ -1260,8 +1260,7 @@ impl<'tcx> Ty<'tcx> {
|
|||
return true;
|
||||
};
|
||||
alloc.expect_ty().ty_adt_def().is_some_and(|alloc_adt| {
|
||||
let global_alloc = tcx.require_lang_item(LangItem::GlobalAlloc, None);
|
||||
alloc_adt.did() == global_alloc
|
||||
tcx.is_lang_item(alloc_adt.did(), LangItem::GlobalAlloc)
|
||||
})
|
||||
}
|
||||
_ => false,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue