diff options
| author | 2022-02-02 16:00:52 +0000 | |
|---|---|---|
| committer | 2022-03-07 11:27:54 +0000 | |
| commit | b740438513307629491c575dbf895bbbf215f77c (patch) | |
| tree | bb79e448197020c4d9126f550e69b0eb51afe49a /compiler/optimizing | |
| parent | 76aa34bc7902f17aea1ccc664ca9d170c7b914e3 (diff) | |
Revert^2 "Add bss support for inlining BCP DexFiles for single image"
This reverts commit 239c449f10853374a9a7a2bd1d8413354054573e.
Reason for revert: Fix in android-review.googlesource.com/c/1968661/1..3
Additionally, we are adding the runtime support for updating the .bss
slots on android-review.googlesource.com/c/1968661/3..4. Since BCP the
DexFiles will not have a corresponding OatDexFile, we can do a
best-effort try to fetch the outer method's OatFile to update the bss
slots at runtime.
Bug: 154012332
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Test: Compile and open top 10 APKs with csuite locally
Change-Id: Ifb2b152cee363c4674fc9273690c73f0406282ba
Diffstat (limited to 'compiler/optimizing')
| -rw-r--r-- | compiler/optimizing/code_generator_arm64.cc | 4 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_arm_vixl.cc | 4 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 8 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 8 | ||||
| -rw-r--r-- | compiler/optimizing/inliner.cc | 11 |
5 files changed, 24 insertions, 11 deletions
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc index fc1c07dcbb..76d2a6d3f2 100644 --- a/compiler/optimizing/code_generator_arm64.cc +++ b/compiler/optimizing/code_generator_arm64.cc @@ -283,7 +283,9 @@ class LoadClassSlowPathARM64 : public SlowPathCodeARM64 { InvokeRuntimeCallingConvention calling_convention; if (must_resolve_type) { DCHECK(IsSameDexFile(cls_->GetDexFile(), arm64_codegen->GetGraph()->GetDexFile()) || - arm64_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile())); + arm64_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile()) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + &cls_->GetDexFile())); dex::TypeIndex type_index = cls_->GetTypeIndex(); __ Mov(calling_convention.GetRegisterAt(0).W(), type_index.index_); if (cls_->NeedsAccessCheck()) { diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc index f65890bcb8..1c243b635e 100644 --- a/compiler/optimizing/code_generator_arm_vixl.cc +++ b/compiler/optimizing/code_generator_arm_vixl.cc @@ -531,7 +531,9 @@ class LoadClassSlowPathARMVIXL : public SlowPathCodeARMVIXL { InvokeRuntimeCallingConventionARMVIXL calling_convention; if (must_resolve_type) { DCHECK(IsSameDexFile(cls_->GetDexFile(), arm_codegen->GetGraph()->GetDexFile()) || - arm_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile())); + arm_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile()) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + &cls_->GetDexFile())); dex::TypeIndex type_index = cls_->GetTypeIndex(); __ Mov(calling_convention.GetRegisterAt(0), type_index.index_); if (cls_->NeedsAccessCheck()) { diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc index 0efd51cedf..4025684bda 100644 --- a/compiler/optimizing/code_generator_x86.cc +++ b/compiler/optimizing/code_generator_x86.cc @@ -290,7 +290,9 @@ class LoadClassSlowPathX86 : public SlowPathCode { InvokeRuntimeCallingConvention calling_convention; if (must_resolve_type) { DCHECK(IsSameDexFile(cls_->GetDexFile(), x86_codegen->GetGraph()->GetDexFile()) || - x86_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile())); + x86_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile()) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + &cls_->GetDexFile())); dex::TypeIndex type_index = cls_->GetTypeIndex(); __ movl(calling_convention.GetRegisterAt(0), Immediate(type_index.index_)); if (cls_->NeedsAccessCheck()) { @@ -5474,7 +5476,9 @@ void CodeGeneratorX86::RecordMethodBssEntryPatch(HInvoke* invoke) { ? invoke->AsInvokeInterface()->GetSpecialInputIndex() : invoke->AsInvokeStaticOrDirect()->GetSpecialInputIndex(); DCHECK(IsSameDexFile(GetGraph()->GetDexFile(), *invoke->GetMethodReference().dex_file) || - GetCompilerOptions().WithinOatFile(invoke->GetMethodReference().dex_file)); + GetCompilerOptions().WithinOatFile(invoke->GetMethodReference().dex_file) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + invoke->GetMethodReference().dex_file)); HX86ComputeBaseMethodAddress* method_address = invoke->InputAt(index)->AsX86ComputeBaseMethodAddress(); // Add the patch entry and bind its label at the end of the instruction. diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index ff4ab59760..8c1a533fd3 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -274,7 +274,9 @@ class LoadClassSlowPathX86_64 : public SlowPathCode { // Custom calling convention: RAX serves as both input and output. if (must_resolve_type) { DCHECK(IsSameDexFile(cls_->GetDexFile(), x86_64_codegen->GetGraph()->GetDexFile()) || - x86_64_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile())); + x86_64_codegen->GetCompilerOptions().WithinOatFile(&cls_->GetDexFile()) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + &cls_->GetDexFile())); dex::TypeIndex type_index = cls_->GetTypeIndex(); __ movl(CpuRegister(RAX), Immediate(type_index.index_)); if (cls_->NeedsAccessCheck()) { @@ -1241,7 +1243,9 @@ void CodeGeneratorX86_64::RecordBootImageMethodPatch(HInvoke* invoke) { void CodeGeneratorX86_64::RecordMethodBssEntryPatch(HInvoke* invoke) { DCHECK(IsSameDexFile(GetGraph()->GetDexFile(), *invoke->GetMethodReference().dex_file) || - GetCompilerOptions().WithinOatFile(invoke->GetMethodReference().dex_file)); + GetCompilerOptions().WithinOatFile(invoke->GetMethodReference().dex_file) || + ContainsElement(Runtime::Current()->GetClassLinker()->GetBootClassPath(), + invoke->GetMethodReference().dex_file)); method_bss_entry_patches_.emplace_back(invoke->GetMethodReference().dex_file, invoke->GetMethodReference().index); __ Bind(&method_bss_entry_patches_.back().label); diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index 1df313d7fc..c6301c589e 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -1740,11 +1740,12 @@ static bool CanEncodeInlinedMethodInStackMap(const DexFile& outer_dex_file, // Inline across dexfiles if the callee's DexFile is: // 1) in the bootclasspath, or if (callee->GetDeclaringClass()->GetClassLoader() == nullptr) { - // There are cases in which the BCP DexFiles are within the OatFile as far as the compiler - // options are concerned, but they have their own OatWriter (and therefore not in the same - // OatFile). Then, we request the BSS check for all BCP DexFiles. - // TODO(solanes): Add .bss support for BCP. - *out_needs_bss_check = true; + // In multi-image, each BCP DexFile has their own OatWriter. Since they don't cooperate with + // each other, we request the BSS check for them. + // TODO(solanes): Add .bss support for BCP multi-image. + const bool is_multi_image = codegen->GetCompilerOptions().IsBootImage() || + codegen->GetCompilerOptions().IsBootImageExtension(); + *out_needs_bss_check = is_multi_image; return true; } |