From 0760a81257fa427646c309500d603194009265ef Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Wed, 26 Aug 2015 17:12:51 -0700 Subject: ART: Propagate verifier failure types to the compilers Add a bit-set encoding of seen failure types to the verifier and make it available. Store this in VerifiedMethod, so that compilers can inspect it and make choices based on failures. Rewrite the current punting of runtime-throw errors to be at the compiler-driver level. Bug: 23502994 Change-Id: I1cfc7cbdf2aec1f14ba18f0169e432ba4ae16883 --- compiler/driver/compiler_driver.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'compiler/driver/compiler_driver.cc') diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index fa25a17481..d2fc4ea228 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -590,14 +590,18 @@ static void CompileMethod(Thread* self, } else if ((access_flags & kAccAbstract) != 0) { // Abstract methods don't have code. } else { - bool has_verified_method = driver->GetVerificationResults() - ->GetVerifiedMethod(method_ref) != nullptr; + const VerifiedMethod* verified_method = + driver->GetVerificationResults()->GetVerifiedMethod(method_ref); bool compile = compilation_enabled && // Basic checks, e.g., not . driver->GetVerificationResults() ->IsCandidateForCompilation(method_ref, access_flags) && // Did not fail to create VerifiedMethod metadata. - has_verified_method && + verified_method != nullptr && + // Do not have failures that should punt to the interpreter. + !verified_method->HasRuntimeThrow() && + (verified_method->GetEncounteredVerificationFailures() & + verifier::VERIFY_ERROR_FORCE_INTERPRETER) == 0 && // Is eligable for compilation by methods-to-compile filter. driver->IsMethodToCompile(method_ref); if (compile) { @@ -620,7 +624,7 @@ static void CompileMethod(Thread* self, method_idx, class_loader, dex_file, - has_verified_method + (verified_method != nullptr) ? dex_to_dex_compilation_level : optimizer::DexToDexCompilationLevel::kRequired); } -- cgit v1.2.3-59-g8ed1b