From a7062e05e6048c7f817d784a5b94e3122e25b1ec Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Thu, 22 May 2014 12:50:17 +0100 Subject: Add a linear scan register allocator to the optimizing compiler. This is a "by-the-book" implementation. It currently only deals with allocating registers, with no hint optimizations. The changes remaining to make it functional are: - Allocate spill slots. - Resolution and placements of Move instructions. - Connect it to the code generator. Change-Id: Ie0b2f6ba1b98da85425be721ce4afecd6b4012a4 --- compiler/optimizing/optimizing_compiler.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'compiler/optimizing/optimizing_compiler.cc') diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 286f48a183..dfbb488c7d 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -24,6 +24,7 @@ #include "driver/dex_compilation_unit.h" #include "graph_visualizer.h" #include "nodes.h" +#include "register_allocator.h" #include "ssa_liveness_analysis.h" #include "utils/arena_allocator.h" @@ -96,8 +97,6 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite } return nullptr; } - HGraphVisualizer visualizer(visualizer_output_.get(), graph, kStringFilter, dex_compilation_unit); - visualizer.DumpGraph("builder"); InstructionSet instruction_set = GetCompilerDriver()->GetInstructionSet(); // The optimizing compiler currently does not have a Thumb2 assembler. @@ -112,6 +111,10 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite return nullptr; } + HGraphVisualizer visualizer( + visualizer_output_.get(), graph, kStringFilter, *codegen, dex_compilation_unit); + visualizer.DumpGraph("builder"); + CodeVectorAllocator allocator; codegen->Compile(&allocator); @@ -128,9 +131,13 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite visualizer.DumpGraph("ssa"); graph->FindNaturalLoops(); - SsaLivenessAnalysis(*graph).Analyze(); + SsaLivenessAnalysis liveness(*graph); + liveness.Analyze(); visualizer.DumpGraph("liveness"); + RegisterAllocator(graph->GetArena(), *codegen).AllocateRegisters(liveness); + visualizer.DumpGraph("register"); + return new CompiledMethod(GetCompilerDriver(), instruction_set, allocator.GetMemory(), -- cgit v1.2.3-59-g8ed1b