diff options
author | Vladimir Marko <vmarko@google.com> | 2020-05-12 13:58:51 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2020-05-13 08:00:22 +0000 |
commit | 02ca05a5a6e3f5028c6c2987a81be481d07bc617 (patch) | |
tree | a364c4a46c573fdfddf607b0e78e5fd3f455c17f /compiler/optimizing/optimizing_compiler.cc | |
parent | 5868adaefe72cc8bcdcd8325c40f712375a506d1 (diff) |
Move HandleCache to HGraph.
This avoids passing the `VariableSizedHandleScope*` argument
around and eliminates HGraph::inexact_object_rti_ and its
initialization. The latter shall allow running Optimizing
gtests that do not require type information without creating
a Runtime in future. (To be implemented in a separate CL.)
Test: m test-art-host-gtest
Test: testrunner.py --host --optmizing
Test: aosp_taimen-userdebug boots.
Change-Id: I36fe9bc556c6d610d644c8c14cc74c9985a14d64
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 50 |
1 files changed, 16 insertions, 34 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index bf9afa27eb..1a2d40bcfd 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -307,7 +307,6 @@ class OptimizingCompiler final : public Compiler { CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, PassObserver* pass_observer, - VariableSizedHandleScope* handles, const OptimizationDef definitions[], size_t length) const { // Convert definitions to optimization passes. @@ -318,8 +317,7 @@ class OptimizingCompiler final : public Compiler { graph, compilation_stats_.get(), codegen, - dex_compilation_unit, - handles); + dex_compilation_unit); DCHECK_EQ(length, optimizations.size()); // Run the optimization passes one by one. Any "depends_on" pass refers back to // the most recent occurrence of that pass, skipped or executed. @@ -350,17 +348,15 @@ class OptimizingCompiler final : public Compiler { CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, PassObserver* pass_observer, - VariableSizedHandleScope* handles, const OptimizationDef (&definitions)[length]) const { return RunOptimizations( - graph, codegen, dex_compilation_unit, pass_observer, handles, definitions, length); + graph, codegen, dex_compilation_unit, pass_observer, definitions, length); } void RunOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const; + PassObserver* pass_observer) const; private: // Create a 'CompiledMethod' for an optimized graph. @@ -396,14 +392,12 @@ class OptimizingCompiler final : public Compiler { bool RunArchOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const; + PassObserver* pass_observer) const; bool RunBaselineOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const; + PassObserver* pass_observer) const; std::vector<uint8_t> GenerateJitDebugInfo(const debug::MethodDebugInfo& method_debug_info); @@ -456,8 +450,7 @@ static bool IsInstructionSetSupported(InstructionSet instruction_set) { bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const { + PassObserver* pass_observer) const { switch (codegen->GetCompilerOptions().GetInstructionSet()) { #ifdef ART_ENABLE_CODEGEN_x86 case InstructionSet::kX86: { @@ -468,7 +461,6 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, x86_optimizations); } #endif @@ -477,7 +469,6 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph, UNUSED(codegen); UNUSED(dex_compilation_unit); UNUSED(pass_observer); - UNUSED(handles); return false; } } @@ -485,8 +476,7 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph, bool OptimizingCompiler::RunArchOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const { + PassObserver* pass_observer) const { switch (codegen->GetCompilerOptions().GetInstructionSet()) { #if defined(ART_ENABLE_CODEGEN_arm) case InstructionSet::kThumb2: @@ -501,7 +491,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, arm_optimizations); } #endif @@ -517,7 +506,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, arm64_optimizations); } #endif @@ -534,7 +522,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, x86_optimizations); } #endif @@ -550,7 +537,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, x86_64_optimizations); } #endif @@ -595,8 +581,7 @@ static std::string ConvertPassNameToOptimizationName(const std::string& pass_nam void OptimizingCompiler::RunOptimizations(HGraph* graph, CodeGenerator* codegen, const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - VariableSizedHandleScope* handles) const { + PassObserver* pass_observer) const { const std::vector<std::string>* pass_names = GetCompilerOptions().GetPassesToRun(); if (pass_names != nullptr) { // If passes were defined on command-line, build the optimization @@ -612,7 +597,6 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, optimizations.data(), length); return; @@ -682,10 +666,9 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph, codegen, dex_compilation_unit, pass_observer, - handles, optimizations); - RunArchOptimizations(graph, codegen, dex_compilation_unit, pass_observer, handles); + RunArchOptimizations(graph, codegen, dex_compilation_unit, pass_observer); } static ArenaVector<linker::LinkerPatch> EmitAndSortLinkerPatches(CodeGenerator* codegen) { @@ -798,6 +781,7 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator, HGraph* graph = new (allocator) HGraph( allocator, arena_stack, + handles, dex_file, method_idx, compiler_options.GetInstructionSet(), @@ -837,8 +821,7 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator, &dex_compilation_unit, codegen.get(), compilation_stats_.get(), - interpreter_metadata, - handles); + interpreter_metadata); GraphAnalysisResult result = builder.BuildGraph(); if (result != kAnalysisSuccess) { switch (result) { @@ -881,9 +864,9 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator, } if (baseline) { - RunBaselineOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles); + RunBaselineOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer); } else { - RunOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles); + RunOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer); } RegisterAllocator::Strategy regalloc_strategy = @@ -926,6 +909,7 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic( HGraph* graph = new (allocator) HGraph( allocator, arena_stack, + handles, dex_file, method_idx, compiler_options.GetInstructionSet(), @@ -962,8 +946,7 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic( &dex_compilation_unit, codegen.get(), compilation_stats_.get(), - /* interpreter_metadata= */ ArrayRef<const uint8_t>(), - handles); + /* interpreter_metadata= */ ArrayRef<const uint8_t>()); builder.BuildIntrinsicGraph(method); } @@ -976,10 +959,9 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic( codegen.get(), dex_compilation_unit, &pass_observer, - handles, optimizations); - RunArchOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles); + RunArchOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer); AllocateRegisters(graph, codegen.get(), |