Remove some depgraph edges on the HIR by invoking the intrinsic query instead of checking the attribute

This commit is contained in:
Oli Scherer 2024-02-22 14:47:35 +00:00
parent b3dcbc2931
commit bf5fc6e5d7
4 changed files with 5 additions and 6 deletions

View File

@ -16,7 +16,6 @@
use rustc_middle::ty::{GenericArgKind, GenericArgsRef};
use rustc_middle::util::Providers;
use rustc_session::config::{CrateType, OomStrategy};
use rustc_span::sym;
use rustc_target::spec::{SanitizerSet, TlsModel};
pub fn threshold(tcx: TyCtxt<'_>) -> SymbolExportLevel {
@ -82,7 +81,7 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
return library.kind.is_statically_included().then_some(def_id);
}
if tcx.has_attr(def_id, sym::rustc_intrinsic_must_be_overridden) {
if tcx.intrinsic(def_id).is_some_and(|i| i.must_be_overridden) {
return None;
}

View File

@ -23,7 +23,7 @@ fn cross_crate_inlinable(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool {
return false;
}
if tcx.has_attr(def_id, sym::rustc_intrinsic_must_be_overridden) {
if tcx.intrinsic(def_id).is_some_and(|i| i.must_be_overridden) {
return false;
}

View File

@ -632,9 +632,9 @@ fn optimized_mir(tcx: TyCtxt<'_>, did: LocalDefId) -> &Body<'_> {
}
fn inner_optimized_mir(tcx: TyCtxt<'_>, did: LocalDefId) -> Body<'_> {
if let Some(attr) = tcx.get_attr(did, sym::rustc_intrinsic_must_be_overridden) {
if tcx.intrinsic(did).is_some_and(|i| i.must_be_overridden) {
span_bug!(
attr.span,
tcx.def_span(did),
"this intrinsic must be overridden by the codegen backend, it has no meaningful body",
)
}

View File

@ -1019,7 +1019,7 @@ fn should_codegen_locally<'tcx>(tcx: TyCtxt<'tcx>, instance: &Instance<'tcx>) ->
return false;
}
if tcx.has_attr(def_id, sym::rustc_intrinsic_must_be_overridden) {
if tcx.intrinsic(def_id).is_some_and(|i| i.must_be_overridden) {
// These are implemented by backends directly and have no meaningful body.
return false;
}