Skip to content

Commit 012f3ee

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 ab5b1be + a78e1a6 commit 012f3ee

File tree

15 files changed

+524
-283
lines changed

15 files changed

+524
-283
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,
@@ -81,6 +81,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
8181
DefKind::AssocFn => match def_id.as_local() {
8282
Some(local_def_id) => self
8383
.resolver
84+
.general
8485
.delegation_fn_sigs
8586
.get(&local_def_id)
8687
.is_some_and(|sig| sig.has_self),
@@ -149,7 +150,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
149150
if let Some(local_sig_id) = sig_id.as_local() {
150151
// Map may be filled incorrectly due to recursive delegation.
151152
// Error will be emitted later during HIR ty lowering.
152-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
153+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
153154
Some(sig) => (sig.param_count, sig.c_variadic),
154155
None => (0, false),
155156
}
@@ -197,7 +198,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
197198
span: Span,
198199
) -> hir::FnSig<'hir> {
199200
let header = if let Some(local_sig_id) = sig_id.as_local() {
200-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
201+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
201202
Some(sig) => {
202203
let parent = self.tcx.parent(sig_id);
203204
// HACK: we override the default safety instead of generating attributes from the ether.
@@ -279,7 +280,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
279280
&& idx == 0
280281
{
281282
let mut self_resolver = SelfResolver {
282-
resolver: this.resolver,
283+
resolver: &mut this.resolver,
283284
path_id: delegation.id,
284285
self_param_id: pat_node_id,
285286
};
@@ -424,25 +425,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
424425
}
425426
}
426427

427-
struct SelfResolver<'a> {
428-
resolver: &'a mut ResolverAstLowering,
428+
struct SelfResolver<'a, 'b> {
429+
resolver: &'b mut PerOwnerResolver<'a>,
429430
path_id: NodeId,
430431
self_param_id: NodeId,
431432
}
432433

433-
impl<'a> SelfResolver<'a> {
434+
impl SelfResolver<'_, '_> {
434435
fn try_replace_id(&mut self, id: NodeId) {
435-
if let Some(res) = self.resolver.partial_res_map.get(&id)
436+
if let Some(res) = self.resolver.general.partial_res_map.get(&id)
436437
&& let Some(Res::Local(sig_id)) = res.full_res()
437438
&& sig_id == self.path_id
438439
{
439440
let new_res = PartialRes::new(Res::Local(self.self_param_id));
440-
self.resolver.partial_res_map.insert(id, new_res);
441+
self.resolver.general.partial_res_map.insert(id, new_res);
441442
}
442443
}
443444
}
444445

445-
impl<'ast, 'a> Visitor<'ast> for SelfResolver<'a> {
446+
impl<'ast> Visitor<'ast> for SelfResolver<'_, '_> {
446447
fn visit_path(&mut self, path: &'ast Path, id: NodeId) {
447448
self.try_replace_id(id);
448449
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};
@@ -482,9 +482,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
482482
let mut generic_args = ThinVec::new();
483483
for (idx, arg) in args.iter().cloned().enumerate() {
484484
if legacy_args_idx.contains(&idx) {
485-
let parent_def_id = self.current_hir_id_owner.def_id;
486485
let node_id = self.next_node_id();
487-
self.create_def(parent_def_id, node_id, None, DefKind::AnonConst, f.span);
486+
self.create_def(node_id, None, DefKind::AnonConst, f.span);
488487
let mut visitor = WillCreateDefIdsVisitor {};
489488
let const_value = if let ControlFlow::Break(span) = visitor.visit_expr(&arg) {
490489
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)