diff options
author | 2024-04-12 07:15:38 +0000 | |
---|---|---|
committer | 2024-07-02 13:36:08 +0000 | |
commit | 55f1fed0c404146429d38c41b9dd1647db238ba5 (patch) | |
tree | 882436a95c9b9932b7717710c8ce778fa30785c9 /compiler/optimizing/sharpening.cc | |
parent | 6a44606e6b27eb04e911cab0adec627014e678ff (diff) |
Revert^4 "x86_64: Add JIT support for LoadMethodType."
This reverts commit b63adc919ba9a53f4fbad476356c702845821149.
Bringing back map from ArtMethod to code pointers.
Bug: 297147201
Test: CtsPerfettoTestCases
Test: ./art/test/testrunner/testrunner.py --host --64 --jit -b
Test: ./art/test/testrunner/testrunner.py --host --64 --jit --cms -b
Test: ./art/test/testrunner/testrunner.py --host --64 -b
Test: ./art/test.py --host -b
Change-Id: I6a1c50598ec878393edf8ef895274da79d4ab42d
Diffstat (limited to 'compiler/optimizing/sharpening.cc')
-rw-r--r-- | compiler/optimizing/sharpening.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/compiler/optimizing/sharpening.cc b/compiler/optimizing/sharpening.cc index cb94491b8e..1b6a9fb601 100644 --- a/compiler/optimizing/sharpening.cc +++ b/compiler/optimizing/sharpening.cc @@ -471,4 +471,45 @@ void HSharpening::ProcessLoadString( load_string->SetLoadKind(load_kind); } +void HSharpening::ProcessLoadMethodType( + HLoadMethodType* load_method_type, + CodeGenerator* codegen, + const DexCompilationUnit& dex_compilation_unit, + VariableSizedHandleScope* handles) { + const CompilerOptions& compiler_options = codegen->GetCompilerOptions(); + + HLoadMethodType::LoadKind desired_load_kind = static_cast<HLoadMethodType::LoadKind>(-1); + + if (compiler_options.IsJitCompiler()) { + DCHECK(!compiler_options.GetCompilePic()); + Runtime* runtime = Runtime::Current(); + ClassLinker* class_linker = runtime->GetClassLinker(); + ScopedObjectAccess soa(Thread::Current()); + ObjPtr<mirror::MethodType> method_type = + class_linker->ResolveMethodType(Thread::Current(), + load_method_type->GetProtoIndex(), + dex_compilation_unit.GetDexCache(), + dex_compilation_unit.GetClassLoader()); + + if (method_type != nullptr) { + load_method_type->SetMethodType(handles->NewHandle(method_type)); + desired_load_kind = HLoadMethodType::LoadKind::kJitTableAddress; + } else { + DCHECK_EQ(load_method_type->GetLoadKind(), HLoadMethodType::LoadKind::kRuntimeCall); + desired_load_kind = HLoadMethodType::LoadKind::kRuntimeCall; + Thread::Current()->ClearException(); + } + } else { + if (compiler_options.GetCompilePic()) { + desired_load_kind = HLoadMethodType::LoadKind::kBssEntry; + } else { + // Test configuration, do not sharpen. + desired_load_kind = HLoadMethodType::LoadKind::kRuntimeCall; + } + } + + DCHECK_NE(desired_load_kind, static_cast<HLoadMethodType::LoadKind>(-1)); + load_method_type->SetLoadKind(desired_load_kind); +} + } // namespace art |