Revert "Hoist more early returns as early as possible."

This reverts commit r25943.

It may have broken a test that was missing a FileCheck.

Swift SVN r25947
This commit is contained in:
Mark Lacey
2015-03-10 19:59:24 +00:00
parent 1b4dbf717a
commit e3adbc654b

View File

@@ -347,25 +347,17 @@ static bool insertInlineCaches(ApplyInst *AI, ClassHierarchyAnalysis *CHA) {
// actual dynamic type.
auto SubTypeValue = ClassInstance.stripUpCasts();
SILType SubType = SubTypeValue.getType();
// Bail if any generic types parameters of the class instance type are
// unbound.
// We cannot devirtualize unbound generic calls yet.
if (isClassWithUnboundGenericParameters(SubType, AI->getModule()))
return false;
ClassDecl *CD = SubType.getClassOrBoundGenericClass();
// Check if it is legal to insert inline caches.
if (!CD)
return false;
if (auto *VMTI = dyn_cast<ValueMetatypeInst>(SubTypeValue)) {
CanType InstTy = VMTI->getType().castTo<MetatypeType>().getInstanceType();
CD = InstTy.getClassOrBoundGenericClass();
assert(CD && "Non-class type for instance type of class metatype?!");
}
// Check if it is legal to insert inline caches.
if (!CD)
return false;
if (ClassInstance != SubTypeValue) {
// The implementation of a method to be invoked may actually
// be defined by one of the superclasses.
@@ -380,6 +372,12 @@ static bool insertInlineCaches(ApplyInst *AI, ClassHierarchyAnalysis *CHA) {
}
}
// Bail if any generic types parameters of the class instance type are
// unbound.
// We cannot devirtualize unbound generic calls yet.
if (isClassWithUnboundGenericParameters(SubType, AI->getModule()))
return false;
if (!CHA->hasKnownDirectSubclasses(CD)) {
// If there is only one possible alternative for this method,
// try to devirtualize it completely.