diff options
Diffstat (limited to 'dex2oat/driver/compiler_driver.cc')
-rw-r--r-- | dex2oat/driver/compiler_driver.cc | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/dex2oat/driver/compiler_driver.cc b/dex2oat/driver/compiler_driver.cc index 7707ab6699..6792a595a9 100644 --- a/dex2oat/driver/compiler_driver.cc +++ b/dex2oat/driver/compiler_driver.cc @@ -887,56 +887,55 @@ void CompilerDriver::PreCompile(jobject class_loader, if (compiler_options_->AssumeClassesAreVerified()) { VLOG(compiler) << "Verify none mode specified, skipping verification."; SetVerified(class_loader, dex_files, timings); - } else if (compiler_options_->IsVerificationEnabled()) { - Verify(class_loader, dex_files, timings, verification_results); - VLOG(compiler) << "Verify: " << GetMemoryUsageString(false); - - if (GetCompilerOptions().IsForceDeterminism() && - (GetCompilerOptions().IsBootImage() || GetCompilerOptions().IsBootImageExtension())) { - // Resolve strings from const-string. Do this now to have a deterministic image. - ResolveConstStrings(dex_files, /*only_startup_strings=*/ false, timings); - VLOG(compiler) << "Resolve const-strings: " << GetMemoryUsageString(false); - } else if (GetCompilerOptions().ResolveStartupConstStrings()) { - ResolveConstStrings(dex_files, /*only_startup_strings=*/ true, timings); - } - - if (had_hard_verifier_failure_ && GetCompilerOptions().AbortOnHardVerifierFailure()) { - // Avoid dumping threads. Even if we shut down the thread pools, there will still be three - // instances of this thread's stack. - LOG(FATAL_WITHOUT_ABORT) << "Had a hard failure verifying all classes, and was asked to abort " - << "in such situations. Please check the log."; - _exit(1); - } else if (number_of_soft_verifier_failures_ > 0 && - GetCompilerOptions().AbortOnSoftVerifierFailure()) { - LOG(FATAL_WITHOUT_ABORT) << "Had " << number_of_soft_verifier_failures_ << " soft failure(s) " - << "verifying all classes, and was asked to abort in such situations. " - << "Please check the log."; - _exit(1); - } - } - - if (GetCompilerOptions().IsGeneratingImage()) { - // We can only initialize classes when their verification bit is set. - if (compiler_options_->AssumeClassesAreVerified() || - compiler_options_->IsVerificationEnabled()) { - if (kIsDebugBuild) { - EnsureVerifiedOrVerifyAtRuntime(class_loader, dex_files); - } - InitializeClasses(class_loader, dex_files, timings); - VLOG(compiler) << "InitializeClasses: " << GetMemoryUsageString(false); - } + } + + if (!compiler_options_->IsVerificationEnabled()) { + return; + } - UpdateImageClasses(timings, image_classes); - VLOG(compiler) << "UpdateImageClasses: " << GetMemoryUsageString(false); + Verify(class_loader, dex_files, timings, verification_results); + VLOG(compiler) << "Verify: " << GetMemoryUsageString(false); - if (kBitstringSubtypeCheckEnabled && - GetCompilerOptions().IsForceDeterminism() && GetCompilerOptions().IsBootImage()) { - // Initialize type check bit string used by check-cast and instanceof. - // Do this now to have a deterministic image. - // Note: This is done after UpdateImageClasses() at it relies on the image - // classes to be final. - InitializeTypeCheckBitstrings(this, dex_files, timings); + if (GetCompilerOptions().IsForceDeterminism() && + (GetCompilerOptions().IsBootImage() || GetCompilerOptions().IsBootImageExtension())) { + // Resolve strings from const-string. Do this now to have a deterministic image. + ResolveConstStrings(dex_files, /*only_startup_strings=*/ false, timings); + VLOG(compiler) << "Resolve const-strings: " << GetMemoryUsageString(false); + } else if (GetCompilerOptions().ResolveStartupConstStrings()) { + ResolveConstStrings(dex_files, /*only_startup_strings=*/ true, timings); + } + + if (had_hard_verifier_failure_ && GetCompilerOptions().AbortOnHardVerifierFailure()) { + // Avoid dumping threads. Even if we shut down the thread pools, there will still be three + // instances of this thread's stack. + LOG(FATAL_WITHOUT_ABORT) << "Had a hard failure verifying all classes, and was asked to abort " + << "in such situations. Please check the log."; + _exit(1); + } else if (number_of_soft_verifier_failures_ > 0 && + GetCompilerOptions().AbortOnSoftVerifierFailure()) { + LOG(FATAL_WITHOUT_ABORT) << "Had " << number_of_soft_verifier_failures_ << " soft failure(s) " + << "verifying all classes, and was asked to abort in such situations. " + << "Please check the log."; + _exit(1); + } + + if (compiler_options_->IsAnyCompilationEnabled()) { + if (kIsDebugBuild) { + EnsureVerifiedOrVerifyAtRuntime(class_loader, dex_files); } + InitializeClasses(class_loader, dex_files, timings); + VLOG(compiler) << "InitializeClasses: " << GetMemoryUsageString(false); + } + + UpdateImageClasses(timings, image_classes); + VLOG(compiler) << "UpdateImageClasses: " << GetMemoryUsageString(false); + + if (kBitstringSubtypeCheckEnabled && + GetCompilerOptions().IsForceDeterminism() && GetCompilerOptions().IsBootImage()) { + // Initialize type check bit string used by check-cast and instanceof. + // Do this now to have a deterministic image. + // Note: This is done after UpdateImageClasses() at it relies on the image classes to be final. + InitializeTypeCheckBitstrings(this, dex_files, timings); } } |