diff options
-rw-r--r-- | compiler/compiled_method.cc | 32 | ||||
-rw-r--r-- | compiler/compiled_method.h | 15 | ||||
-rw-r--r-- | compiler/dex/dex_to_dex_compiler.cc | 5 | ||||
-rw-r--r-- | compiler/driver/compiled_method_storage_test.cc | 19 | ||||
-rw-r--r-- | compiler/driver/compiler_driver.cc | 2 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 4 | ||||
-rw-r--r-- | dex2oat/linker/arm/relative_patcher_thumb2_test.cc | 5 | ||||
-rw-r--r-- | dex2oat/linker/arm64/relative_patcher_arm64_test.cc | 5 | ||||
-rw-r--r-- | dex2oat/linker/relative_patcher_test.h | 45 |
9 files changed, 66 insertions, 66 deletions
diff --git a/compiler/compiled_method.cc b/compiler/compiled_method.cc index 29f004cf87..ef9d919c75 100644 --- a/compiler/compiled_method.cc +++ b/compiler/compiled_method.cc @@ -17,21 +17,20 @@ #include "compiled_method.h" #include "driver/compiled_method_storage.h" -#include "driver/compiler_driver.h" #include "utils/swap_space.h" namespace art { -CompiledCode::CompiledCode(CompilerDriver* compiler_driver, +CompiledCode::CompiledCode(CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code) - : compiler_driver_(compiler_driver), - quick_code_(compiler_driver_->GetCompiledMethodStorage()->DeduplicateCode(quick_code)), + : storage_(storage), + quick_code_(storage->DeduplicateCode(quick_code)), packed_fields_(InstructionSetField::Encode(instruction_set)) { } CompiledCode::~CompiledCode() { - compiler_driver_->GetCompiledMethodStorage()->ReleaseCode(quick_code_); + GetStorage()->ReleaseCode(quick_code_); } bool CompiledCode::operator==(const CompiledCode& rhs) const { @@ -99,29 +98,29 @@ const void* CompiledCode::CodePointer(const void* code_pointer, InstructionSet i } } -CompiledMethod::CompiledMethod(CompilerDriver* driver, +CompiledMethod::CompiledMethod(CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code, const ArrayRef<const uint8_t>& vmap_table, const ArrayRef<const uint8_t>& cfi_info, const ArrayRef<const linker::LinkerPatch>& patches) - : CompiledCode(driver, instruction_set, quick_code), - vmap_table_(driver->GetCompiledMethodStorage()->DeduplicateVMapTable(vmap_table)), - cfi_info_(driver->GetCompiledMethodStorage()->DeduplicateCFIInfo(cfi_info)), - patches_(driver->GetCompiledMethodStorage()->DeduplicateLinkerPatches(patches)) { + : CompiledCode(storage, instruction_set, quick_code), + vmap_table_(storage->DeduplicateVMapTable(vmap_table)), + cfi_info_(storage->DeduplicateCFIInfo(cfi_info)), + patches_(storage->DeduplicateLinkerPatches(patches)) { } CompiledMethod* CompiledMethod::SwapAllocCompiledMethod( - CompilerDriver* driver, + CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code, const ArrayRef<const uint8_t>& vmap_table, const ArrayRef<const uint8_t>& cfi_info, const ArrayRef<const linker::LinkerPatch>& patches) { - SwapAllocator<CompiledMethod> alloc(driver->GetCompiledMethodStorage()->GetSwapSpaceAllocator()); + SwapAllocator<CompiledMethod> alloc(storage->GetSwapSpaceAllocator()); CompiledMethod* ret = alloc.allocate(1); alloc.construct(ret, - driver, + storage, instruction_set, quick_code, vmap_table, @@ -129,14 +128,15 @@ CompiledMethod* CompiledMethod::SwapAllocCompiledMethod( return ret; } -void CompiledMethod::ReleaseSwapAllocatedCompiledMethod(CompilerDriver* driver, CompiledMethod* m) { - SwapAllocator<CompiledMethod> alloc(driver->GetCompiledMethodStorage()->GetSwapSpaceAllocator()); +void CompiledMethod::ReleaseSwapAllocatedCompiledMethod(CompiledMethodStorage* storage, + CompiledMethod* m) { + SwapAllocator<CompiledMethod> alloc(storage->GetSwapSpaceAllocator()); alloc.destroy(m); alloc.deallocate(m, 1); } CompiledMethod::~CompiledMethod() { - CompiledMethodStorage* storage = GetCompilerDriver()->GetCompiledMethodStorage(); + CompiledMethodStorage* storage = GetStorage(); storage->ReleaseLinkerPatches(patches_); storage->ReleaseCFIInfo(cfi_info_); storage->ReleaseVMapTable(vmap_table_); diff --git a/compiler/compiled_method.h b/compiler/compiled_method.h index 864ce585cf..75790c9f08 100644 --- a/compiler/compiled_method.h +++ b/compiler/compiled_method.h @@ -28,7 +28,6 @@ namespace art { template <typename T> class ArrayRef; -class CompilerDriver; class CompiledMethodStorage; template<typename T> class LengthPrefixedArray; @@ -39,7 +38,7 @@ class LinkerPatch; class CompiledCode { public: // For Quick to supply an code blob - CompiledCode(CompilerDriver* compiler_driver, + CompiledCode(CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code); @@ -78,8 +77,8 @@ class CompiledCode { template <typename T> static ArrayRef<const T> GetArray(const LengthPrefixedArray<T>* array); - CompilerDriver* GetCompilerDriver() { - return compiler_driver_; + CompiledMethodStorage* GetStorage() { + return storage_; } template <typename BitFieldType> @@ -96,7 +95,7 @@ class CompiledCode { private: using InstructionSetField = BitField<InstructionSet, 0u, kInstructionSetFieldSize>; - CompilerDriver* const compiler_driver_; + CompiledMethodStorage* const storage_; // Used to store the compiled code. const LengthPrefixedArray<uint8_t>* const quick_code_; @@ -109,7 +108,7 @@ class CompiledMethod final : public CompiledCode { // Constructs a CompiledMethod. // Note: Consider using the static allocation methods below that will allocate the CompiledMethod // in the swap space. - CompiledMethod(CompilerDriver* driver, + CompiledMethod(CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code, const ArrayRef<const uint8_t>& vmap_table, @@ -119,14 +118,14 @@ class CompiledMethod final : public CompiledCode { virtual ~CompiledMethod(); static CompiledMethod* SwapAllocCompiledMethod( - CompilerDriver* driver, + CompiledMethodStorage* storage, InstructionSet instruction_set, const ArrayRef<const uint8_t>& quick_code, const ArrayRef<const uint8_t>& vmap_table, const ArrayRef<const uint8_t>& cfi_info, const ArrayRef<const linker::LinkerPatch>& patches); - static void ReleaseSwapAllocatedCompiledMethod(CompilerDriver* driver, CompiledMethod* m); + static void ReleaseSwapAllocatedCompiledMethod(CompiledMethodStorage* storage, CompiledMethod* m); bool IsIntrinsic() const { return GetPackedField<IsIntrinsicField>(); diff --git a/compiler/dex/dex_to_dex_compiler.cc b/compiler/dex/dex_to_dex_compiler.cc index fe99eaa51a..04ad10c41e 100644 --- a/compiler/dex/dex_to_dex_compiler.cc +++ b/compiler/dex/dex_to_dex_compiler.cc @@ -614,7 +614,7 @@ CompiledMethod* DexToDexCompiler::CompileMethod( instruction_set = InstructionSet::kArm; } CompiledMethod* ret = CompiledMethod::SwapAllocCompiledMethod( - driver_, + driver_->GetCompiledMethodStorage(), instruction_set, ArrayRef<const uint8_t>(), // no code ArrayRef<const uint8_t>(quicken_data), // vmap_table @@ -665,7 +665,8 @@ void DexToDexCompiler::UnquickenConflictingMethods() { // There is up to one compiled method for each method ref. Releasing it leaves the // deduped data intact, this means its safe to do even when other threads might be // compiling. - CompiledMethod::ReleaseSwapAllocatedCompiledMethod(driver_, method); + CompiledMethod::ReleaseSwapAllocatedCompiledMethod(driver_->GetCompiledMethodStorage(), + method); } } } diff --git a/compiler/driver/compiled_method_storage_test.cc b/compiler/driver/compiled_method_storage_test.cc index 8b35bd3cb1..9fac2bc98b 100644 --- a/compiler/driver/compiled_method_storage_test.cc +++ b/compiler/driver/compiled_method_storage_test.cc @@ -19,24 +19,13 @@ #include <gtest/gtest.h> #include "compiled_method-inl.h" -#include "compiler_driver.h" -#include "compiler_options.h" -#include "dex/verification_results.h" namespace art { TEST(CompiledMethodStorage, Deduplicate) { - CompilerOptions compiler_options; - VerificationResults verification_results(&compiler_options); - CompilerDriver driver(&compiler_options, - &verification_results, - Compiler::kOptimizing, - /* image_classes */ nullptr, - /* thread_count */ 1u, - /* swap_fd */ -1); - CompiledMethodStorage* storage = driver.GetCompiledMethodStorage(); + CompiledMethodStorage storage(/* swap_fd */ -1); - ASSERT_TRUE(storage->DedupeEnabled()); // The default. + ASSERT_TRUE(storage.DedupeEnabled()); // The default. const uint8_t raw_code1[] = { 1u, 2u, 3u }; const uint8_t raw_code2[] = { 4u, 3u, 2u, 1u }; @@ -76,7 +65,7 @@ TEST(CompiledMethodStorage, Deduplicate) { for (auto&& f : cfi_info) { for (auto&& p : patches) { compiled_methods.push_back(CompiledMethod::SwapAllocCompiledMethod( - &driver, InstructionSet::kNone, c, v, f, p)); + &storage, InstructionSet::kNone, c, v, f, p)); } } } @@ -105,7 +94,7 @@ TEST(CompiledMethodStorage, Deduplicate) { } } for (CompiledMethod* method : compiled_methods) { - CompiledMethod::ReleaseSwapAllocatedCompiledMethod(&driver, method); + CompiledMethod::ReleaseSwapAllocatedCompiledMethod(&storage, method); } } diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 0d0a7f2b6a..77b0cea311 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -276,7 +276,7 @@ CompilerDriver::~CompilerDriver() { compiled_methods_.Visit([this](const DexFileReference& ref ATTRIBUTE_UNUSED, CompiledMethod* method) { if (method != nullptr) { - CompiledMethod::ReleaseSwapAllocatedCompiledMethod(this, method); + CompiledMethod::ReleaseSwapAllocatedCompiledMethod(GetCompiledMethodStorage(), method); } }); compiler_->UnInit(); diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index fe6abd4999..1db20fcfeb 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -765,7 +765,7 @@ CompiledMethod* OptimizingCompiler::Emit(ArenaAllocator* allocator, ScopedArenaVector<uint8_t> stack_map = codegen->BuildStackMaps(code_item_for_osr_check); CompiledMethod* compiled_method = CompiledMethod::SwapAllocCompiledMethod( - GetCompilerDriver(), + GetCompilerDriver()->GetCompiledMethodStorage(), codegen->GetInstructionSet(), code_allocator->GetMemory(), ArrayRef<const uint8_t>(stack_map), @@ -1222,7 +1222,7 @@ CompiledMethod* OptimizingCompiler::JniCompile(uint32_t access_flags, ScopedArenaVector<uint8_t> stack_map = CreateJniStackMap(&stack_map_allocator, jni_compiled_method); return CompiledMethod::SwapAllocCompiledMethod( - GetCompilerDriver(), + GetCompilerDriver()->GetCompiledMethodStorage(), jni_compiled_method.GetInstructionSet(), jni_compiled_method.GetCode(), ArrayRef<const uint8_t>(stack_map), diff --git a/dex2oat/linker/arm/relative_patcher_thumb2_test.cc b/dex2oat/linker/arm/relative_patcher_thumb2_test.cc index b93e091ae6..d8cbbaf61a 100644 --- a/dex2oat/linker/arm/relative_patcher_thumb2_test.cc +++ b/dex2oat/linker/arm/relative_patcher_thumb2_test.cc @@ -18,6 +18,7 @@ #include "arch/arm/instruction_set_features_arm.h" #include "base/casts.h" +#include "driver/compiler_options.h" #include "linker/relative_patcher_test.h" #include "lock_word.h" #include "mirror/array-inl.h" @@ -196,8 +197,8 @@ class Thumb2RelativePatcherTest : public RelativePatcherTest { /*out*/ std::string* debug_name = nullptr) { OptimizingUnitTestHelper helper; HGraph* graph = helper.CreateGraph(); - std::string error_msg; - arm::CodeGeneratorARMVIXL codegen(graph, *compiler_options_); + CompilerOptions compiler_options; + arm::CodeGeneratorARMVIXL codegen(graph, compiler_options); ArenaVector<uint8_t> code(helper.GetAllocator()->Adapter()); codegen.EmitThunkCode(patch, &code, debug_name); return std::vector<uint8_t>(code.begin(), code.end()); diff --git a/dex2oat/linker/arm64/relative_patcher_arm64_test.cc b/dex2oat/linker/arm64/relative_patcher_arm64_test.cc index 0fc4610909..f242ae286b 100644 --- a/dex2oat/linker/arm64/relative_patcher_arm64_test.cc +++ b/dex2oat/linker/arm64/relative_patcher_arm64_test.cc @@ -18,6 +18,7 @@ #include "arch/arm64/instruction_set_features_arm64.h" #include "base/casts.h" +#include "driver/compiler_options.h" #include "linker/relative_patcher_test.h" #include "lock_word.h" #include "mirror/array-inl.h" @@ -175,8 +176,8 @@ class Arm64RelativePatcherTest : public RelativePatcherTest { /*out*/ std::string* debug_name = nullptr) { OptimizingUnitTestHelper helper; HGraph* graph = helper.CreateGraph(); - std::string error_msg; - arm64::CodeGeneratorARM64 codegen(graph, *compiler_options_); + CompilerOptions compiler_options; + arm64::CodeGeneratorARM64 codegen(graph, compiler_options); ArenaVector<uint8_t> code(helper.GetAllocator()->Adapter()); codegen.EmitThunkCode(patch, &code, debug_name); return std::vector<uint8_t>(code.begin(), code.end()); diff --git a/dex2oat/linker/relative_patcher_test.h b/dex2oat/linker/relative_patcher_test.h index 56ff0ef3ca..4329ee1697 100644 --- a/dex2oat/linker/relative_patcher_test.h +++ b/dex2oat/linker/relative_patcher_test.h @@ -17,19 +17,17 @@ #ifndef ART_DEX2OAT_LINKER_RELATIVE_PATCHER_TEST_H_ #define ART_DEX2OAT_LINKER_RELATIVE_PATCHER_TEST_H_ +#include <gtest/gtest.h> + #include "arch/instruction_set.h" #include "arch/instruction_set_features.h" #include "base/array_ref.h" #include "base/globals.h" #include "base/macros.h" -#include "common_compiler_test.h" #include "compiled_method-inl.h" -#include "dex/verification_results.h" #include "dex/method_reference.h" #include "dex/string_reference.h" -#include "driver/compiler_driver.h" -#include "driver/compiler_options.h" -#include "gtest/gtest.h" +#include "driver/compiled_method_storage.h" #include "linker/relative_patcher.h" #include "linker/vector_output_stream.h" #include "oat.h" @@ -39,10 +37,12 @@ namespace art { namespace linker { // Base class providing infrastructure for architecture-specific tests. -class RelativePatcherTest : public CommonCompilerTest { +class RelativePatcherTest : public testing::Test { protected: RelativePatcherTest(InstructionSet instruction_set, const std::string& variant) - : variant_(variant), + : storage_(/*swap_fd=*/ -1), + instruction_set_(instruction_set), + instruction_set_features_(nullptr), method_offset_map_(), patcher_(nullptr), bss_begin_(0u), @@ -51,23 +51,29 @@ class RelativePatcherTest : public CommonCompilerTest { patched_code_(), output_(), out_(nullptr) { - // Override CommonCompilerTest's defaults. - instruction_set_ = instruction_set; - number_of_threads_ = 1u; + std::string error_msg; + instruction_set_features_ = + InstructionSetFeatures::FromVariant(instruction_set, variant, &error_msg); + CHECK(instruction_set_features_ != nullptr) << error_msg; + patched_code_.reserve(16 * KB); } void SetUp() override { - OverrideInstructionSetFeatures(instruction_set_, variant_); - CommonCompilerTest::SetUp(); - Reset(); } void TearDown() override { + thunk_provider_.Reset(); compiled_methods_.clear(); patcher_.reset(); - CommonCompilerTest::TearDown(); + bss_begin_ = 0u; + string_index_to_offset_map_.clear(); + compiled_method_refs_.clear(); + compiled_methods_.clear(); + patched_code_.clear(); + output_.clear(); + out_.reset(); } // Reset the helper to start another test. Creating and tearing down the Runtime is expensive, @@ -75,8 +81,8 @@ class RelativePatcherTest : public CommonCompilerTest { void Reset() { thunk_provider_.Reset(); method_offset_map_.map.clear(); - patcher_ = RelativePatcher::Create(compiler_options_->GetInstructionSet(), - compiler_options_->GetInstructionSetFeatures(), + patcher_ = RelativePatcher::Create(instruction_set_, + instruction_set_features_.get(), &thunk_provider_, &method_offset_map_); bss_begin_ = 0u; @@ -99,7 +105,7 @@ class RelativePatcherTest : public CommonCompilerTest { const ArrayRef<const LinkerPatch>& patches = ArrayRef<const LinkerPatch>()) { compiled_method_refs_.push_back(method_ref); compiled_methods_.emplace_back(new CompiledMethod( - compiler_driver_.get(), + &storage_, instruction_set_, code, /* vmap_table */ ArrayRef<const uint8_t>(), @@ -351,7 +357,10 @@ class RelativePatcherTest : public CommonCompilerTest { static const uint32_t kTrampolineSize = 4u; static const uint32_t kTrampolineOffset = 0u; - std::string variant_; + CompiledMethodStorage storage_; + InstructionSet instruction_set_; + std::unique_ptr<const InstructionSetFeatures> instruction_set_features_; + ThunkProvider thunk_provider_; MethodOffsetMap method_offset_map_; std::unique_ptr<RelativePatcher> patcher_; |