Optimize Substs::super_fold_with.
This speeds up several rustc-benchmarks by 1--4%.
This commit is contained in:
parent
1d3dfa5301
commit
1e4241ab31
1 changed files with 9 additions and 2 deletions
|
|
@ -304,8 +304,15 @@ impl<'a, 'gcx, 'tcx> Substs<'tcx> {
|
|||
|
||||
impl<'tcx> TypeFoldable<'tcx> for &'tcx Substs<'tcx> {
|
||||
fn super_fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F) -> Self {
|
||||
let params = self.iter().map(|k| k.fold_with(folder)).collect();
|
||||
folder.tcx().mk_substs(params)
|
||||
let params: Vec<_> = self.iter().map(|k| k.fold_with(folder)).collect();
|
||||
|
||||
// If folding doesn't change the substs, it's faster to avoid calling
|
||||
// `mk_substs` and instead reuse the existing substs.
|
||||
if params[..] == self[..] {
|
||||
self
|
||||
} else {
|
||||
folder.tcx().mk_substs(params)
|
||||
}
|
||||
}
|
||||
|
||||
fn fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F) -> Self {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue