diff options
| author | bors <bors@rust-lang.org> | 2025-04-30 23:57:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-04-30 23:57:22 +0000 |
| commit | 0c33fe2c3d3eecadd17a84b110bb067288a64f1c (patch) | |
| tree | 902822b48623953361aa74bf42e6ea71d623f1e7 /compiler/rustc_ast_lowering/src | |
| parent | b45dd71d1824f176fba88f6c40467030a16afa2c (diff) | |
| parent | ef9403371f2d4759cd7b0d0a276e63aae2ce68fe (diff) | |
| download | rust-0c33fe2c3d3eecadd17a84b110bb067288a64f1c.tar.gz rust-0c33fe2c3d3eecadd17a84b110bb067288a64f1c.zip | |
Auto merge of #121909 - Zoxc:drop-ast-task, r=petrochenkov
Drop AST on a separate thread and prefetch `hir_crate` This drop AST on a separate thread and prefetches `hir_crate`. A `spawn` function is added to the `parallel` module which spawn some work on the Rayon thread pool.
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 1e14b4d6723..8b1c63cd21d 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -49,6 +49,7 @@ use rustc_attr_parsing::{AttributeParser, OmitDoc}; use rustc_data_structures::fingerprint::Fingerprint; use rustc_data_structures::sorted_map::SortedMap; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; +use rustc_data_structures::sync::spawn; use rustc_data_structures::tagged_ptr::TaggedRef; use rustc_errors::{DiagArgFromDisplay, DiagCtxtHandle, StashKey}; use rustc_hir::def::{DefKind, LifetimeRes, Namespace, PartialRes, PerNS, Res}; @@ -454,9 +455,14 @@ pub fn lower_to_hir(tcx: TyCtxt<'_>, (): ()) -> hir::Crate<'_> { .lower_node(def_id); } - // Drop AST to free memory drop(ast_index); - sess.time("drop_ast", || drop(krate)); + + // Drop AST to free memory. It can be expensive so try to drop it on a separate thread. + let prof = sess.prof.clone(); + spawn(move || { + let _timer = prof.verbose_generic_activity("drop_ast"); + drop(krate); + }); // Don't hash unless necessary, because it's expensive. let opt_hir_hash = |
