Rollup merge of #55346 - nnethercote:shrink-StatementKind, r=nagisa
Shrink `Statement`. This commit reduces the size of `Statement` from 80 bytes to 56 bytes on 64-bit platforms, by boxing the `AscribeUserType` variant of `StatementKind`. This change reduces instruction counts on most benchmarks by 1--3%.
This commit is contained in:
commit
9c55a4a813
@ -1674,6 +1674,10 @@ impl<'tcx> Statement<'tcx> {
|
||||
/// Changes a statement to a nop. This is both faster than deleting instructions and avoids
|
||||
/// invalidating statement indices in `Location`s.
|
||||
pub fn make_nop(&mut self) {
|
||||
// `Statement` contributes significantly to peak memory usage. Make
|
||||
// sure it doesn't get bigger.
|
||||
static_assert!(STATEMENT_IS_AT_MOST_56_BYTES: mem::size_of::<Statement<'_>>() <= 56);
|
||||
|
||||
self.kind = StatementKind::Nop
|
||||
}
|
||||
|
||||
@ -1737,7 +1741,7 @@ pub enum StatementKind<'tcx> {
|
||||
/// - `Contravariant` -- requires that `T_y :> T`
|
||||
/// - `Invariant` -- requires that `T_y == T`
|
||||
/// - `Bivariant` -- no effect
|
||||
AscribeUserType(Place<'tcx>, ty::Variance, UserTypeAnnotation<'tcx>),
|
||||
AscribeUserType(Place<'tcx>, ty::Variance, Box<UserTypeAnnotation<'tcx>>),
|
||||
|
||||
/// No-op. Useful for deleting instructions without affecting statement indices.
|
||||
Nop,
|
||||
|
@ -1225,7 +1225,7 @@ fn check_stmt(&mut self, mir: &Mir<'tcx>, stmt: &Statement<'tcx>, location: Loca
|
||||
);
|
||||
};
|
||||
}
|
||||
StatementKind::AscribeUserType(ref place, variance, c_ty) => {
|
||||
StatementKind::AscribeUserType(ref place, variance, box c_ty) => {
|
||||
let place_ty = place.ty(mir, tcx).to_ty(tcx);
|
||||
if let Err(terr) = self.relate_type_and_user_type(
|
||||
place_ty,
|
||||
|
@ -147,7 +147,7 @@ fn expr_as_place(
|
||||
kind: StatementKind::AscribeUserType(
|
||||
place.clone(),
|
||||
Variance::Invariant,
|
||||
user_ty,
|
||||
box user_ty,
|
||||
),
|
||||
},
|
||||
);
|
||||
@ -167,7 +167,7 @@ fn expr_as_place(
|
||||
kind: StatementKind::AscribeUserType(
|
||||
Place::Local(temp.clone()),
|
||||
Variance::Invariant,
|
||||
user_ty,
|
||||
box user_ty,
|
||||
),
|
||||
},
|
||||
);
|
||||
|
@ -316,7 +316,7 @@ pub fn expr_into_pattern(
|
||||
kind: StatementKind::AscribeUserType(
|
||||
place.clone(),
|
||||
ty::Variance::Invariant,
|
||||
ascription_user_ty,
|
||||
box ascription_user_ty,
|
||||
),
|
||||
},
|
||||
);
|
||||
@ -1323,7 +1323,7 @@ fn ascribe_types<'pat>(
|
||||
kind: StatementKind::AscribeUserType(
|
||||
ascription.source.clone(),
|
||||
ty::Variance::Covariant,
|
||||
ascription.user_ty,
|
||||
box ascription.user_ty,
|
||||
),
|
||||
},
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user