Skip to content

Commit

Permalink
Remove DefId from ConstraintCategory::Predicate
Browse files Browse the repository at this point in the history
This shirnks the size of `ConstraintCategory`, hopefully
fixing a performance regression.
  • Loading branch information
Aaron1011 committed Sep 27, 2021
1 parent 93ab12e commit 41ad383
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 9 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/diagnostics/region_errors.rs
Expand Up @@ -40,7 +40,7 @@ impl ConstraintDescription for ConstraintCategory {
ConstraintCategory::OpaqueType => "opaque type ",
ConstraintCategory::ClosureUpvar(_) => "closure capture ",
ConstraintCategory::Usage => "this usage ",
ConstraintCategory::Predicate(_, _)
ConstraintCategory::Predicate(_)
| ConstraintCategory::Boring
| ConstraintCategory::BoringNoLocation
| ConstraintCategory::Internal => "",
Expand Down
16 changes: 11 additions & 5 deletions compiler/rustc_borrowck/src/region_infer/mod.rs
Expand Up @@ -5,7 +5,7 @@ use rustc_data_structures::binary_search_util;
use rustc_data_structures::frozen::Frozen;
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::graph::scc::Sccs;
use rustc_hir::def_id::DefId;
use rustc_hir::def_id::{DefId, CRATE_DEF_ID};
use rustc_hir::CRATE_HIR_ID;
use rustc_index::vec::IndexVec;
use rustc_infer::infer::canonical::QueryOutlivesConstraint;
Expand Down Expand Up @@ -2000,8 +2000,14 @@ impl<'tcx> RegionInferenceContext<'tcx> {
let cause_code = path
.iter()
.find_map(|constraint| {
if let ConstraintCategory::Predicate(def_id, predicate_span) = constraint.category {
Some(ObligationCauseCode::BindingObligation(def_id, predicate_span))
if let ConstraintCategory::Predicate(predicate_span) = constraint.category {
// We currentl'y doesn't store the `DefId` in the `ConstraintCategory`
// for perforamnce reasons. The error reporting code used by NLL only
// uses the span, so this doesn't cause any problems at the moment.
Some(ObligationCauseCode::BindingObligation(
CRATE_DEF_ID.to_def_id(),
predicate_span,
))
} else {
None
}
Expand Down Expand Up @@ -2106,7 +2112,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
| ConstraintCategory::Boring
| ConstraintCategory::BoringNoLocation
| ConstraintCategory::Internal
| ConstraintCategory::Predicate(_, _) => false,
| ConstraintCategory::Predicate(_) => false,
ConstraintCategory::TypeAnnotation
| ConstraintCategory::Return(_)
| ConstraintCategory::Yield => true,
Expand All @@ -2118,7 +2124,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
| ConstraintCategory::Boring
| ConstraintCategory::BoringNoLocation
| ConstraintCategory::Internal
| ConstraintCategory::Predicate(_, _) => false,
| ConstraintCategory::Predicate(_) => false,
_ => true,
}
}
Expand Down
6 changes: 4 additions & 2 deletions compiler/rustc_borrowck/src/type_check/canonical.rs
Expand Up @@ -101,7 +101,9 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {

pub(super) fn normalize_and_prove_instantiated_predicates(
&mut self,
def_id: DefId,
// Keep this parameter for now, in case we start using
// it in `ConstraintCategory` at some point.
_def_id: DefId,
instantiated_predicates: ty::InstantiatedPredicates<'tcx>,
locations: Locations,
) {
Expand All @@ -111,7 +113,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
.zip(instantiated_predicates.spans.into_iter())
{
let predicate = self.normalize(predicate, locations);
self.prove_predicate(predicate, locations, ConstraintCategory::Predicate(def_id, span));
self.prove_predicate(predicate, locations, ConstraintCategory::Predicate(span));
}
}

Expand Down
5 changes: 4 additions & 1 deletion compiler/rustc_middle/src/mir/query.rs
Expand Up @@ -309,6 +309,9 @@ pub struct ClosureOutlivesRequirement<'tcx> {
pub category: ConstraintCategory,
}

// Make sure this enum doesn't unintentionally grow
rustc_data_structures::static_assert_size!(ConstraintCategory, 12);

/// Outlives-constraints can be categorized to determine whether and why they
/// are interesting (for error reporting). Order of variants indicates sort
/// order of the category, thereby influencing diagnostic output.
Expand Down Expand Up @@ -341,7 +344,7 @@ pub enum ConstraintCategory {
/// A constraint from a user-written predicate
/// with the provided span, written on the item
/// with the given `DefId`
Predicate(DefId, Span),
Predicate(Span),

/// A "boring" constraint (caused by the given location) is one that
/// the user probably doesn't want to see described in diagnostics,
Expand Down

0 comments on commit 41ad383

Please sign in to comment.