diff options
author | 2018-01-25 13:33:07 +0000 | |
---|---|---|
committer | 2018-01-25 15:05:16 +0000 | |
commit | bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb (patch) | |
tree | e281a8dde61e396ed5f20c31d41086b1b1b18389 /compiler/optimizing/sharpening.cc | |
parent | 83af48e9f4cdfcf3f0069c63561bab4c176bd2f1 (diff) |
Revert "Compiler changes for bitstring based type checks."
Bug: 64692057
Bug: 71853552
Bug: 26687569
This reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.
Change-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be
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 dffef17587..1e49411c72 100644 --- a/compiler/optimizing/sharpening.cc +++ b/compiler/optimizing/sharpening.cc @@ -236,75 +236,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 (kUseBitstringTypeCheck && - !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, |