Skip to content

Commit 3c7385b

Browse files
committed
Auto merge of rust-lang#138995 - oli-obk:split-resolver, r=<try>
[perf experiment] Split the resolver tables into per-owner tables r? `@ghost` just doing some experiments to see if splitting `hir_crate` is feasible by checking if splitting the resolver's output into per-owner queries is feasible (rust-lang#95004) Basically necessary for rust-lang#138705 as that can't be landed perf-wise while the `hir_crate` query is still a thing
2 parents e643f59 + 00e2701 commit 3c7385b

File tree

15 files changed

+433
-212
lines changed

15 files changed

+433
-212
lines changed

Diff for: compiler/rustc_ast_lowering/src/asm.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::errors::{
2020
};
2121
use crate::{
2222
AllowReturnTypeNotation, ImplTraitContext, ImplTraitPosition, ParamMode,
23-
ResolverAstLoweringExt, fluent_generated as fluent,
23+
fluent_generated as fluent,
2424
};
2525

2626
impl<'a, 'hir> LoweringContext<'a, 'hir> {

Diff for: compiler/rustc_ast_lowering/src/delegation.rs

+12-11
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ use rustc_ast::*;
4646
use rustc_errors::ErrorGuaranteed;
4747
use rustc_hir::def_id::DefId;
4848
use rustc_middle::span_bug;
49-
use rustc_middle::ty::{Asyncness, ResolverAstLowering};
49+
use rustc_middle::ty::Asyncness;
5050
use rustc_span::{Ident, Span};
5151
use {rustc_ast as ast, rustc_hir as hir};
5252

5353
use super::{GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode};
54-
use crate::{AllowReturnTypeNotation, ImplTraitPosition, ResolverAstLoweringExt};
54+
use crate::{AllowReturnTypeNotation, ImplTraitPosition, PerOwnerResolver};
5555

5656
pub(crate) struct DelegationResults<'hir> {
5757
pub body_id: hir::BodyId,
@@ -82,6 +82,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
8282
DefKind::AssocFn => match def_id.as_local() {
8383
Some(local_def_id) => self
8484
.resolver
85+
.general
8586
.delegation_fn_sigs
8687
.get(&local_def_id)
8788
.is_some_and(|sig| sig.has_self),
@@ -150,7 +151,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
150151
if let Some(local_sig_id) = sig_id.as_local() {
151152
// Map may be filled incorrectly due to recursive delegation.
152153
// Error will be emitted later during HIR ty lowering.
153-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
154+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
154155
Some(sig) => (sig.param_count, sig.c_variadic),
155156
None => (0, false),
156157
}
@@ -198,7 +199,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
198199
span: Span,
199200
) -> hir::FnSig<'hir> {
200201
let header = if let Some(local_sig_id) = sig_id.as_local() {
201-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
202+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
202203
Some(sig) => {
203204
let parent = self.tcx.parent(sig_id);
204205
// HACK: we override the default safety instead of generating attributes from the ether.
@@ -280,7 +281,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
280281
&& idx == 0
281282
{
282283
let mut self_resolver = SelfResolver {
283-
resolver: this.resolver,
284+
resolver: &mut this.resolver,
284285
path_id: delegation.id,
285286
self_param_id: pat_node_id,
286287
};
@@ -426,25 +427,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
426427
}
427428
}
428429

429-
struct SelfResolver<'a> {
430-
resolver: &'a mut ResolverAstLowering,
430+
struct SelfResolver<'a, 'b> {
431+
resolver: &'b mut PerOwnerResolver<'a>,
431432
path_id: NodeId,
432433
self_param_id: NodeId,
433434
}
434435

435-
impl<'a> SelfResolver<'a> {
436+
impl SelfResolver<'_, '_> {
436437
fn try_replace_id(&mut self, id: NodeId) {
437-
if let Some(res) = self.resolver.partial_res_map.get(&id)
438+
if let Some(res) = self.resolver.general.partial_res_map.get(&id)
438439
&& let Some(Res::Local(sig_id)) = res.full_res()
439440
&& sig_id == self.path_id
440441
{
441442
let new_res = PartialRes::new(Res::Local(self.self_param_id));
442-
self.resolver.partial_res_map.insert(id, new_res);
443+
self.resolver.general.partial_res_map.insert(id, new_res);
443444
}
444445
}
445446
}
446447

447-
impl<'ast, 'a> Visitor<'ast> for SelfResolver<'a> {
448+
impl<'ast> Visitor<'ast> for SelfResolver<'_, '_> {
448449
fn visit_path(&mut self, path: &'ast Path, id: NodeId) {
449450
self.try_replace_id(id);
450451
visit::walk_path(self, path);

Diff for: compiler/rustc_ast_lowering/src/expr.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use super::errors::{
2424
UnderscoreExprLhsAssign,
2525
};
2626
use super::{
27-
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode, ResolverAstLoweringExt,
27+
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode,
2828
};
2929
use crate::errors::{InvalidLegacyConstGenericArg, UseConstGenericArg, YieldInClosure};
3030
use crate::{AllowReturnTypeNotation, FnDeclKind, ImplTraitPosition, fluent_generated};
@@ -488,9 +488,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
488488
let mut generic_args = ThinVec::new();
489489
for (idx, arg) in args.iter().cloned().enumerate() {
490490
if legacy_args_idx.contains(&idx) {
491-
let parent_def_id = self.current_hir_id_owner.def_id;
492491
let node_id = self.next_node_id();
493-
self.create_def(parent_def_id, node_id, None, DefKind::AnonConst, f.span);
492+
self.create_def(node_id, None, DefKind::AnonConst, f.span);
494493
let mut visitor = WillCreateDefIdsVisitor {};
495494
let const_value = if let ControlFlow::Break(span) = visitor.visit_expr(&arg) {
496495
AstP(Expr {

Diff for: compiler/rustc_ast_lowering/src/item.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use super::errors::{
2020
use super::stability::{enabled_names, gate_unstable_abi};
2121
use super::{
2222
AstOwner, FnDeclKind, ImplTraitContext, ImplTraitPosition, LoweringContext, ParamMode,
23-
ResolverAstLoweringExt,
2423
};
2524

2625
pub(super) struct ItemLowerer<'a, 'hir> {
@@ -88,7 +87,10 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
8887

8988
#[instrument(level = "debug", skip(self, c))]
9089
fn lower_crate(&mut self, c: &Crate) {
91-
debug_assert_eq!(self.resolver.node_id_to_def_id[&CRATE_NODE_ID], CRATE_DEF_ID);
90+
debug_assert_eq!(
91+
self.resolver.owners[&CRATE_NODE_ID].node_id_to_def_id[&CRATE_NODE_ID],
92+
CRATE_DEF_ID
93+
);
9294
self.with_lctx(CRATE_NODE_ID, |lctx| {
9395
let module = lctx.lower_mod(&c.items, &c.spans);
9496
// FIXME(jdonszelman): is dummy span ever a problem here?
@@ -102,6 +104,7 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
102104
self.with_lctx(item.id, |lctx| hir::OwnerNode::Item(lctx.lower_item(item)))
103105
}
104106

107+
#[instrument(level = "debug", skip(self))]
105108
fn lower_assoc_item(&mut self, item: &AssocItem, ctxt: AssocCtxt) {
106109
self.with_lctx(item.id, |lctx| lctx.lower_assoc_item(item, ctxt))
107110
}

0 commit comments

Comments
 (0)