Skip to content

Commit

Permalink
Optimize slightly by avoiding to call Niche::reserve when not needed
Browse files Browse the repository at this point in the history
  • Loading branch information
ogoffart committed Mar 25, 2020
1 parent 4d77d01 commit 81006f6
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions src/librustc/ty/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -907,14 +907,25 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
let count = (niche_variants.end().as_u32()
- niche_variants.start().as_u32()
+ 1) as u128;
if let Some((field_index, niche, (niche_start, niche_scalar))) = variants[i]
.iter()
.enumerate()
.filter_map(|(i, &field)| {
let niche = field.largest_niche.as_ref()?;
Some((i, niche, niche.reserve(self, count)?))
let mut niche_size = 0;
if let Some((field_index, niche, niche_start, niche_scalar)) =
variants[i].iter().enumerate().fold(None, |acc, (j, &field)| {
let niche = match &field.largest_niche {
Some(niche) => niche,
_ => return acc,
};
let ns = niche.available(dl);
if ns <= niche_size {
return acc;
}
match niche.reserve(self, count) {
Some(pair) => {
niche_size = ns;
Some((j, niche, pair.0, pair.1))
}
None => acc,
}
})
.max_by_key(|(_, niche, _)| niche.available(dl))
{
let mut align = dl.aggregate_align;
let st = variants
Expand Down

0 comments on commit 81006f6

Please sign in to comment.