Skip to content

Commit 3388060

Browse files
committed
Auto merge of rust-lang#137156 - Zalathar:proj-perf, r=<try>
[EXPERIMENTAL] Perf experiments for user-type projection and visiting primary bindings r? ghost `@rustbot` experimental
2 parents f43e549 + a8292c6 commit 3388060

31 files changed

+1049
-431
lines changed

compiler/rustc_middle/src/mir/mod.rs

+2-81
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::ty::codec::{TyDecoder, TyEncoder};
3434
use crate::ty::print::{FmtPrinter, Printer, pretty_print_const, with_no_trimmed_paths};
3535
use crate::ty::visit::TypeVisitableExt;
3636
use crate::ty::{
37-
self, AdtDef, GenericArg, GenericArgsRef, Instance, InstanceKind, List, Ty, TyCtxt, TypingEnv,
37+
self, GenericArg, GenericArgsRef, Instance, InstanceKind, List, Ty, TyCtxt, TypingEnv,
3838
UserTypeAnnotationIndex,
3939
};
4040

@@ -1472,53 +1472,10 @@ pub struct UserTypeProjections {
14721472
pub contents: Vec<UserTypeProjection>,
14731473
}
14741474

1475-
impl<'tcx> UserTypeProjections {
1476-
pub fn none() -> Self {
1477-
UserTypeProjections { contents: vec![] }
1478-
}
1479-
1480-
pub fn is_empty(&self) -> bool {
1481-
self.contents.is_empty()
1482-
}
1483-
1475+
impl UserTypeProjections {
14841476
pub fn projections(&self) -> impl Iterator<Item = &UserTypeProjection> + ExactSizeIterator {
14851477
self.contents.iter()
14861478
}
1487-
1488-
pub fn push_user_type(mut self, base_user_type: UserTypeAnnotationIndex) -> Self {
1489-
self.contents.push(UserTypeProjection { base: base_user_type, projs: vec![] });
1490-
self
1491-
}
1492-
1493-
fn map_projections(mut self, f: impl FnMut(UserTypeProjection) -> UserTypeProjection) -> Self {
1494-
self.contents = self.contents.into_iter().map(f).collect();
1495-
self
1496-
}
1497-
1498-
pub fn index(self) -> Self {
1499-
self.map_projections(|pat_ty_proj| pat_ty_proj.index())
1500-
}
1501-
1502-
pub fn subslice(self, from: u64, to: u64) -> Self {
1503-
self.map_projections(|pat_ty_proj| pat_ty_proj.subslice(from, to))
1504-
}
1505-
1506-
pub fn deref(self) -> Self {
1507-
self.map_projections(|pat_ty_proj| pat_ty_proj.deref())
1508-
}
1509-
1510-
pub fn leaf(self, field: FieldIdx) -> Self {
1511-
self.map_projections(|pat_ty_proj| pat_ty_proj.leaf(field))
1512-
}
1513-
1514-
pub fn variant(
1515-
self,
1516-
adt_def: AdtDef<'tcx>,
1517-
variant_index: VariantIdx,
1518-
field_index: FieldIdx,
1519-
) -> Self {
1520-
self.map_projections(|pat_ty_proj| pat_ty_proj.variant(adt_def, variant_index, field_index))
1521-
}
15221479
}
15231480

15241481
/// Encodes the effect of a user-supplied type annotation on the
@@ -1543,42 +1500,6 @@ pub struct UserTypeProjection {
15431500
pub projs: Vec<ProjectionKind>,
15441501
}
15451502

1546-
impl UserTypeProjection {
1547-
pub(crate) fn index(mut self) -> Self {
1548-
self.projs.push(ProjectionElem::Index(()));
1549-
self
1550-
}
1551-
1552-
pub(crate) fn subslice(mut self, from: u64, to: u64) -> Self {
1553-
self.projs.push(ProjectionElem::Subslice { from, to, from_end: true });
1554-
self
1555-
}
1556-
1557-
pub(crate) fn deref(mut self) -> Self {
1558-
self.projs.push(ProjectionElem::Deref);
1559-
self
1560-
}
1561-
1562-
pub(crate) fn leaf(mut self, field: FieldIdx) -> Self {
1563-
self.projs.push(ProjectionElem::Field(field, ()));
1564-
self
1565-
}
1566-
1567-
pub(crate) fn variant(
1568-
mut self,
1569-
adt_def: AdtDef<'_>,
1570-
variant_index: VariantIdx,
1571-
field_index: FieldIdx,
1572-
) -> Self {
1573-
self.projs.push(ProjectionElem::Downcast(
1574-
Some(adt_def.variant(variant_index).name),
1575-
variant_index,
1576-
));
1577-
self.projs.push(ProjectionElem::Field(field_index, ()));
1578-
self
1579-
}
1580-
}
1581-
15821503
rustc_index::newtype_index! {
15831504
#[derive(HashStable)]
15841505
#[encodable]

0 commit comments

Comments
 (0)