Auto merge of #79084 - simonvandel:instcombine-perf, r=oli-obk

Small perf changes for InstCombine
This commit is contained in:
bors 2020-12-29 06:21:18 +00:00
commit e2a2592885

View File

@ -29,8 +29,10 @@ fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
optimization_finder.optimizations
};
// Then carry out those optimizations.
MutVisitor::visit_body(&mut InstCombineVisitor { optimizations, tcx }, body);
if !optimizations.is_empty() {
// Then carry out those optimizations.
MutVisitor::visit_body(&mut InstCombineVisitor { optimizations, tcx }, body);
}
}
}
@ -95,7 +97,7 @@ fn visit_rvalue(&mut self, rvalue: &mut Rvalue<'tcx>, location: Location) {
}
}
self.super_rvalue(rvalue, location)
// We do not call super_rvalue as we are not interested in any other parts of the tree
}
}
@ -299,7 +301,7 @@ fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location) {
self.find_unneeded_equality_comparison(rvalue, location);
self.super_rvalue(rvalue, location)
// We do not call super_rvalue as we are not interested in any other parts of the tree
}
}
@ -310,3 +312,21 @@ struct OptimizationList<'tcx> {
unneeded_equality_comparison: FxHashMap<Location, Operand<'tcx>>,
unneeded_deref: FxHashMap<Location, Place<'tcx>>,
}
impl<'tcx> OptimizationList<'tcx> {
fn is_empty(&self) -> bool {
match self {
OptimizationList {
and_stars,
arrays_lengths,
unneeded_equality_comparison,
unneeded_deref,
} => {
and_stars.is_empty()
&& arrays_lengths.is_empty()
&& unneeded_equality_comparison.is_empty()
&& unneeded_deref.is_empty()
}
}
}
}