diff options
author | 2018-03-26 21:14:46 +0000 | |
---|---|---|
committer | 2018-03-26 21:14:46 +0000 | |
commit | 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e (patch) | |
tree | e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a /compiler/optimizing/sharpening.cc | |
parent | 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d (diff) |
Revert^3 "Compiler changes for bitstring based type checks."
This reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.
Reason for revert: Fails sporadically.
Bug: 26687569
Bug: 64692057
Bug: 76420366
Change-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909
Diffstat (limited to 'compiler/optimizing/sharpening.cc')
-rw-r--r-- | compiler/optimizing/sharpening.cc | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/compiler/optimizing/sharpening.cc b/compiler/optimizing/sharpening.cc index 70b45763af..7dffb2a378 100644 --- a/compiler/optimizing/sharpening.cc +++ b/compiler/optimizing/sharpening.cc @@ -240,75 +240,6 @@ HLoadClass::LoadKind HSharpening::ComputeLoadClassKind( return load_kind; } -static inline bool CanUseTypeCheckBitstring(ObjPtr<mirror::Class> klass, - CodeGenerator* codegen, - CompilerDriver* compiler_driver) - REQUIRES_SHARED(Locks::mutator_lock_) { - DCHECK(!klass->IsProxyClass()); - DCHECK(!klass->IsArrayClass()); - - if (Runtime::Current()->UseJitCompilation()) { - // If we're JITting, try to assign a type check bitstring (fall through). - } else if (codegen->GetCompilerOptions().IsBootImage()) { - const char* descriptor = klass->GetDexFile().StringByTypeIdx(klass->GetDexTypeIndex()); - if (!compiler_driver->IsImageClass(descriptor)) { - return false; - } - // If the target is a boot image class, try to assign a type check bitstring (fall through). - // (If --force-determinism, this was already done; repeating is OK and yields the same result.) - } else { - // TODO: Use the bitstring also for AOT app compilation if the target class has a bitstring - // already assigned in the boot image. - return false; - } - - // Try to assign a type check bitstring. - MutexLock subtype_check_lock(Thread::Current(), *Locks::subtype_check_lock_); - if ((false) && // FIXME: Inliner does not respect compiler_driver->IsClassToCompile() - // and we're hitting an unassigned bitstring in dex2oat_image_test. b/26687569 - kIsDebugBuild && - codegen->GetCompilerOptions().IsBootImage() && - codegen->GetCompilerOptions().IsForceDeterminism()) { - SubtypeCheckInfo::State old_state = SubtypeCheck<ObjPtr<mirror::Class>>::GetState(klass); - CHECK(old_state == SubtypeCheckInfo::kAssigned || old_state == SubtypeCheckInfo::kOverflowed) - << klass->PrettyDescriptor() << "/" << old_state - << " in " << codegen->GetGraph()->PrettyMethod(); - } - SubtypeCheckInfo::State state = SubtypeCheck<ObjPtr<mirror::Class>>::EnsureAssigned(klass); - return state == SubtypeCheckInfo::kAssigned; -} - -TypeCheckKind HSharpening::ComputeTypeCheckKind(ObjPtr<mirror::Class> klass, - CodeGenerator* codegen, - CompilerDriver* compiler_driver, - bool needs_access_check) { - if (klass == nullptr) { - return TypeCheckKind::kUnresolvedCheck; - } else if (klass->IsInterface()) { - return TypeCheckKind::kInterfaceCheck; - } else if (klass->IsArrayClass()) { - if (klass->GetComponentType()->IsObjectClass()) { - return TypeCheckKind::kArrayObjectCheck; - } else if (klass->CannotBeAssignedFromOtherTypes()) { - return TypeCheckKind::kExactCheck; - } else { - return TypeCheckKind::kArrayCheck; - } - } else if (klass->IsFinal()) { // TODO: Consider using bitstring for final classes. - return TypeCheckKind::kExactCheck; - } else if (kBitstringSubtypeCheckEnabled && - !needs_access_check && - CanUseTypeCheckBitstring(klass, codegen, compiler_driver)) { - // TODO: We should not need the `!needs_access_check` check but getting rid of that - // requires rewriting some optimizations in instruction simplifier. - return TypeCheckKind::kBitstringCheck; - } else if (klass->IsAbstract()) { - return TypeCheckKind::kAbstractClassCheck; - } else { - return TypeCheckKind::kClassHierarchyCheck; - } -} - void HSharpening::ProcessLoadString( HLoadString* load_string, CodeGenerator* codegen, |