diff options
| -rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 73 |
1 files changed, 48 insertions, 25 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 0bca186814..aedfcb42aa 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -305,6 +305,18 @@ class OptimizingCompiler FINAL : public Compiler { OVERRIDE SHARED_REQUIRES(Locks::mutator_lock_); + protected: + virtual void RunOptimizations(HGraph* graph, + CodeGenerator* codegen, + CompilerDriver* driver, + const DexCompilationUnit& dex_compilation_unit, + PassObserver* pass_observer, + StackHandleScopeCollection* handles) const; + + virtual void RunOptimizations(HOptimization* optimizations[], + size_t length, + PassObserver* pass_observer) const; + private: // Create a 'CompiledMethod' for an optimized graph. CompiledMethod* Emit(ArenaAllocator* arena, @@ -333,6 +345,18 @@ class OptimizingCompiler FINAL : public Compiler { ArtMethod* method, bool osr) const; + void MaybeRunInliner(HGraph* graph, + CodeGenerator* codegen, + CompilerDriver* driver, + const DexCompilationUnit& dex_compilation_unit, + PassObserver* pass_observer, + StackHandleScopeCollection* handles) const; + + void RunArchOptimizations(InstructionSet instruction_set, + HGraph* graph, + CodeGenerator* codegen, + PassObserver* pass_observer) const; + std::unique_ptr<OptimizingCompilerStats> compilation_stats_; std::unique_ptr<std::ostream> visualizer_output_; @@ -396,22 +420,22 @@ static bool InstructionSetSupportsReadBarrier(InstructionSet instruction_set) { || instruction_set == kX86_64; } -static void RunOptimizations(HOptimization* optimizations[], - size_t length, - PassObserver* pass_observer) { +void OptimizingCompiler::RunOptimizations(HOptimization* optimizations[], + size_t length, + PassObserver* pass_observer) const { for (size_t i = 0; i < length; ++i) { PassScope scope(optimizations[i]->GetPassName(), pass_observer); optimizations[i]->Run(); } } -static void MaybeRunInliner(HGraph* graph, - CodeGenerator* codegen, - CompilerDriver* driver, - OptimizingCompilerStats* stats, - const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - StackHandleScopeCollection* handles) { +void OptimizingCompiler::MaybeRunInliner(HGraph* graph, + CodeGenerator* codegen, + CompilerDriver* driver, + const DexCompilationUnit& dex_compilation_unit, + PassObserver* pass_observer, + StackHandleScopeCollection* handles) const { + OptimizingCompilerStats* stats = compilation_stats_.get(); const CompilerOptions& compiler_options = driver->GetCompilerOptions(); bool should_inline = (compiler_options.GetInlineDepthLimit() > 0) && (compiler_options.GetInlineMaxCodeUnits() > 0); @@ -435,11 +459,11 @@ static void MaybeRunInliner(HGraph* graph, RunOptimizations(optimizations, arraysize(optimizations), pass_observer); } -static void RunArchOptimizations(InstructionSet instruction_set, - HGraph* graph, - CodeGenerator* codegen, - OptimizingCompilerStats* stats, - PassObserver* pass_observer) { +void OptimizingCompiler::RunArchOptimizations(InstructionSet instruction_set, + HGraph* graph, + CodeGenerator* codegen, + PassObserver* pass_observer) const { + OptimizingCompilerStats* stats = compilation_stats_.get(); ArenaAllocator* arena = graph->GetArena(); switch (instruction_set) { #ifdef ART_ENABLE_CODEGEN_arm @@ -539,13 +563,13 @@ static void AllocateRegisters(HGraph* graph, } } -static void RunOptimizations(HGraph* graph, - CodeGenerator* codegen, - CompilerDriver* driver, - OptimizingCompilerStats* stats, - const DexCompilationUnit& dex_compilation_unit, - PassObserver* pass_observer, - StackHandleScopeCollection* handles) { +void OptimizingCompiler::RunOptimizations(HGraph* graph, + CodeGenerator* codegen, + CompilerDriver* driver, + const DexCompilationUnit& dex_compilation_unit, + PassObserver* pass_observer, + StackHandleScopeCollection* handles) const { + OptimizingCompilerStats* stats = compilation_stats_.get(); ArenaAllocator* arena = graph->GetArena(); HDeadCodeElimination* dce1 = new (arena) HDeadCodeElimination( graph, stats, HDeadCodeElimination::kInitialDeadCodeEliminationPassName); @@ -578,7 +602,7 @@ static void RunOptimizations(HGraph* graph, }; RunOptimizations(optimizations1, arraysize(optimizations1), pass_observer); - MaybeRunInliner(graph, codegen, driver, stats, dex_compilation_unit, pass_observer, handles); + MaybeRunInliner(graph, codegen, driver, dex_compilation_unit, pass_observer, handles); HOptimization* optimizations2[] = { // SelectGenerator depends on the InstructionSimplifier removing @@ -601,7 +625,7 @@ static void RunOptimizations(HGraph* graph, }; RunOptimizations(optimizations2, arraysize(optimizations2), pass_observer); - RunArchOptimizations(driver->GetInstructionSet(), graph, codegen, stats, pass_observer); + RunArchOptimizations(driver->GetInstructionSet(), graph, codegen, pass_observer); AllocateRegisters(graph, codegen, pass_observer); } @@ -813,7 +837,6 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* arena, RunOptimizations(graph, codegen.get(), compiler_driver, - compilation_stats_.get(), dex_compilation_unit, &pass_observer, &handles); |