self.resolve_type_vars_if_possible(t).to_string()
}
- pub fn shallow_resolve(&self, typ: Ty<'tcx>) -> Ty<'tcx> {
+ // We have this force-inlined variant of shallow_resolve() for the one
+ // callsite that is extremely hot. All other callsites use the normal
+ // variant.
+ #[inline(always)]
+ pub fn inlined_shallow_resolve(&self, typ: Ty<'tcx>) -> Ty<'tcx> {
match typ.sty {
ty::TyInfer(ty::TyVar(v)) => {
// Not entirely obvious: if `typ` is a type variable,
}
}
+ pub fn shallow_resolve(&self, typ: Ty<'tcx>) -> Ty<'tcx> {
+ self.inlined_shallow_resolve(typ)
+ }
+
pub fn resolve_type_vars_if_possible<T>(&self, value: &T) -> T
where T: TypeFoldable<'tcx>
{
// doing more work yet
if !pending_obligation.stalled_on.is_empty() {
if pending_obligation.stalled_on.iter().all(|&ty| {
- let resolved_ty = self.selcx.infcx().shallow_resolve(&ty);
+ // Use the force-inlined variant of shallow_resolve() because this code is hot.
+ let resolved_ty = self.selcx.infcx().inlined_shallow_resolve(&ty);
resolved_ty == ty // nothing changed here
}) {
debug!("process_predicate: pending obligation {:?} still stalled on {:?}",