Avoid code generation for ThinVec<Diagnostic>'s destructor in the query system
This commit is contained in:
parent
6ae4cfbbb0
commit
862011e1ca
4 changed files with 10 additions and 8 deletions
|
@ -5353,9 +5353,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thin-vec"
|
name = "thin-vec"
|
||||||
version = "0.2.12"
|
version = "0.2.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "aac81b6fd6beb5884b0cf3321b8117e6e5d47ecb6fc89f414cfdcca8b2fe2dd8"
|
checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
|
|
|
@ -891,7 +891,7 @@ impl<D: Deps> DepGraphData<D> {
|
||||||
insertion for {dep_node:?}"
|
insertion for {dep_node:?}"
|
||||||
);
|
);
|
||||||
|
|
||||||
if !side_effects.is_empty() {
|
if side_effects.maybe_any() {
|
||||||
qcx.dep_context().dep_graph().with_query_deserialization(|| {
|
qcx.dep_context().dep_graph().with_query_deserialization(|| {
|
||||||
self.emit_side_effects(qcx, dep_node_index, side_effects)
|
self.emit_side_effects(qcx, dep_node_index, side_effects)
|
||||||
});
|
});
|
||||||
|
|
|
@ -93,10 +93,13 @@ pub struct QuerySideEffects {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl QuerySideEffects {
|
impl QuerySideEffects {
|
||||||
|
/// Returns true if there might be side effects.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn maybe_any(&self) -> bool {
|
||||||
let QuerySideEffects { diagnostics } = self;
|
let QuerySideEffects { diagnostics } = self;
|
||||||
diagnostics.is_empty()
|
// Use `has_capacity` so that the destructor for `self.diagnostics` can be skipped
|
||||||
|
// if `maybe_any` is known to be false.
|
||||||
|
diagnostics.has_capacity()
|
||||||
}
|
}
|
||||||
pub fn append(&mut self, other: QuerySideEffects) {
|
pub fn append(&mut self, other: QuerySideEffects) {
|
||||||
let QuerySideEffects { diagnostics } = self;
|
let QuerySideEffects { diagnostics } = self;
|
||||||
|
|
|
@ -538,10 +538,9 @@ where
|
||||||
|
|
||||||
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
|
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
|
||||||
|
|
||||||
let diagnostics = diagnostics.into_inner();
|
let side_effects = QuerySideEffects { diagnostics: diagnostics.into_inner() };
|
||||||
let side_effects = QuerySideEffects { diagnostics };
|
|
||||||
|
|
||||||
if std::intrinsics::unlikely(!side_effects.is_empty()) {
|
if std::intrinsics::unlikely(side_effects.maybe_any()) {
|
||||||
if query.anon() {
|
if query.anon() {
|
||||||
qcx.store_side_effects_for_anon_node(dep_node_index, side_effects);
|
qcx.store_side_effects_for_anon_node(dep_node_index, side_effects);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue