From 9e050ab1a061d9660eb0c1daa01a823ad75b0f05 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 14 Jul 2021 14:59:25 +0100 Subject: Remove the need of VerifiedMethod in the compiler. The compiler only needs to know if a method is compilable or not. So just record a set of uncompilable methods (in some cases, we cannot have an ArtMethod, but the method can still be compiled). Test: test.py Bug: 28313047 Change-Id: Ic4235bc8160ec91daa5ebf6504741089b43e99cb --- compiler/driver/compiler_options.cc | 32 -------------------------------- 1 file changed, 32 deletions(-) (limited to 'compiler/driver/compiler_options.cc') diff --git a/compiler/driver/compiler_options.cc b/compiler/driver/compiler_options.cc index a5805f953b..ad5a009808 100644 --- a/compiler/driver/compiler_options.cc +++ b/compiler/driver/compiler_options.cc @@ -31,7 +31,6 @@ #include "compiler_options_map-inl.h" #include "dex/dex_file-inl.h" #include "dex/verification_results.h" -#include "dex/verified_method.h" #include "runtime.h" #include "scoped_thread_state_change-inl.h" #include "simple_compiler_options_map.h" @@ -156,35 +155,4 @@ const VerificationResults* CompilerOptions::GetVerificationResults() const { return verification_results_; } -const VerifiedMethod* CompilerOptions::GetVerifiedMethod(const DexFile* dex_file, - uint32_t method_idx) const { - MethodReference ref(dex_file, method_idx); - return verification_results_->GetVerifiedMethod(ref); -} - -bool CompilerOptions::IsMethodVerifiedWithoutFailures(uint32_t method_idx, - uint16_t class_def_idx, - const DexFile& dex_file) const { - const VerifiedMethod* verified_method = GetVerifiedMethod(&dex_file, method_idx); - if (verified_method != nullptr) { - return !verified_method->HasVerificationFailures(); - } - - // If we can't find verification metadata, check if this is a system class (we trust that system - // classes have their methods verified). If it's not, be conservative and assume the method - // has not been verified successfully. - - // TODO: When compiling the boot image it should be safe to assume that everything is verified, - // even if methods are not found in the verification cache. - const char* descriptor = dex_file.GetClassDescriptor(dex_file.GetClassDef(class_def_idx)); - ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); - Thread* self = Thread::Current(); - ScopedObjectAccess soa(self); - bool is_system_class = class_linker->FindSystemClass(self, descriptor) != nullptr; - if (!is_system_class) { - self->ClearException(); - } - return is_system_class; -} - } // namespace art -- cgit v1.2.3-59-g8ed1b