diff options
-rw-r--r-- | compiler/optimizing/code_generator.cc | 65 | ||||
-rw-r--r-- | compiler/optimizing/code_generator.h | 12 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_cfi_test.cc | 2 | ||||
-rw-r--r-- | runtime/base/arena_object.h | 1 |
4 files changed, 43 insertions, 37 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index 953c0ae418..a771cc1567 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -552,59 +552,66 @@ void CodeGenerator::MaybeRecordStat(MethodCompilationStat compilation_stat, size } } -CodeGenerator* CodeGenerator::Create(HGraph* graph, - InstructionSet instruction_set, - const InstructionSetFeatures& isa_features, - const CompilerOptions& compiler_options, - OptimizingCompilerStats* stats) { +std::unique_ptr<CodeGenerator> CodeGenerator::Create(HGraph* graph, + InstructionSet instruction_set, + const InstructionSetFeatures& isa_features, + const CompilerOptions& compiler_options, + OptimizingCompilerStats* stats) { + ArenaAllocator* arena = graph->GetArena(); switch (instruction_set) { #ifdef ART_ENABLE_CODEGEN_arm case kArm: case kThumb2: { - return new arm::CodeGeneratorARM(graph, - *isa_features.AsArmInstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) arm::CodeGeneratorARM(graph, + *isa_features.AsArmInstructionSetFeatures(), + compiler_options, + stats)); } #endif #ifdef ART_ENABLE_CODEGEN_arm64 case kArm64: { - return new arm64::CodeGeneratorARM64(graph, - *isa_features.AsArm64InstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) arm64::CodeGeneratorARM64(graph, + *isa_features.AsArm64InstructionSetFeatures(), + compiler_options, + stats)); } #endif #ifdef ART_ENABLE_CODEGEN_mips case kMips: { - return new mips::CodeGeneratorMIPS(graph, - *isa_features.AsMipsInstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) mips::CodeGeneratorMIPS(graph, + *isa_features.AsMipsInstructionSetFeatures(), + compiler_options, + stats)); } #endif #ifdef ART_ENABLE_CODEGEN_mips64 case kMips64: { - return new mips64::CodeGeneratorMIPS64(graph, - *isa_features.AsMips64InstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) mips64::CodeGeneratorMIPS64(graph, + *isa_features.AsMips64InstructionSetFeatures(), + compiler_options, + stats)); } #endif #ifdef ART_ENABLE_CODEGEN_x86 case kX86: { - return new x86::CodeGeneratorX86(graph, - *isa_features.AsX86InstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) x86::CodeGeneratorX86(graph, + *isa_features.AsX86InstructionSetFeatures(), + compiler_options, + stats)); } #endif #ifdef ART_ENABLE_CODEGEN_x86_64 case kX86_64: { - return new x86_64::CodeGeneratorX86_64(graph, - *isa_features.AsX86_64InstructionSetFeatures(), - compiler_options, - stats); + return std::unique_ptr<CodeGenerator>( + new (arena) x86_64::CodeGeneratorX86_64(graph, + *isa_features.AsX86_64InstructionSetFeatures(), + compiler_options, + stats)); } #endif default: diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index 1a060b1f58..87832a2d9f 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -166,15 +166,15 @@ class FieldAccessCallingConvention { DISALLOW_COPY_AND_ASSIGN(FieldAccessCallingConvention); }; -class CodeGenerator { +class CodeGenerator : public DeletableArenaObject<kArenaAllocCodeGenerator> { public: // Compiles the graph to executable instructions. void Compile(CodeAllocator* allocator); - static CodeGenerator* Create(HGraph* graph, - InstructionSet instruction_set, - const InstructionSetFeatures& isa_features, - const CompilerOptions& compiler_options, - OptimizingCompilerStats* stats = nullptr); + static std::unique_ptr<CodeGenerator> Create(HGraph* graph, + InstructionSet instruction_set, + const InstructionSetFeatures& isa_features, + const CompilerOptions& compiler_options, + OptimizingCompilerStats* stats = nullptr); virtual ~CodeGenerator() {} // Get the graph. This is the outermost graph, never the graph of a method being inlined. diff --git a/compiler/optimizing/optimizing_cfi_test.cc b/compiler/optimizing/optimizing_cfi_test.cc index 2b0d522b31..400686d236 100644 --- a/compiler/optimizing/optimizing_cfi_test.cc +++ b/compiler/optimizing/optimizing_cfi_test.cc @@ -54,7 +54,7 @@ class OptimizingCFITest : public CFITest { isa_features_.reset(InstructionSetFeatures::FromVariant(isa, "default", &error)); graph_ = CreateGraph(&allocator_); // Generate simple frame with some spills. - code_gen_.reset(CodeGenerator::Create(graph_, isa, *isa_features_, opts_)); + code_gen_ = CodeGenerator::Create(graph_, isa, *isa_features_, opts_); code_gen_->GetAssembler()->cfi().SetEnabled(true); const int frame_size = 64; int core_reg = 0; diff --git a/runtime/base/arena_object.h b/runtime/base/arena_object.h index 56e35d8751..2d8e7d8592 100644 --- a/runtime/base/arena_object.h +++ b/runtime/base/arena_object.h @@ -48,7 +48,6 @@ class ArenaObject { // Parent for arena allocated objects that get deleted, gives appropriate new and delete operators. -// Currently this is used by the quick compiler for debug reference counting arena allocations. template<enum ArenaAllocKind kAllocKind> class DeletableArenaObject { public: |