summaryrefslogtreecommitdiff
path: root/dex2oat/driver/compiler_driver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dex2oat/driver/compiler_driver.cc')
-rw-r--r--dex2oat/driver/compiler_driver.cc93
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);
}
}