From 5bdab12d8b48ca4c395d9d2c506ebff0df01b734 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Mon, 26 Jan 2015 18:30:19 -0800 Subject: Clean up pass driver Added pass manager to hold the state which used to be in global variables. Static variables caused issues with Runtime.exit since they are destroyed by the global destructors while threads are still executing. Bug: 17950037 Change-Id: Ie0e4546dc9e48909c8df996a5c135be682d50044 --- compiler/dex/quick/quick_compiler.h | 60 ++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) (limited to 'compiler/dex/quick/quick_compiler.h') diff --git a/compiler/dex/quick/quick_compiler.h b/compiler/dex/quick/quick_compiler.h index 10de5fbca4..5153a9e82e 100644 --- a/compiler/dex/quick/quick_compiler.h +++ b/compiler/dex/quick/quick_compiler.h @@ -17,12 +17,70 @@ #ifndef ART_COMPILER_DEX_QUICK_QUICK_COMPILER_H_ #define ART_COMPILER_DEX_QUICK_QUICK_COMPILER_H_ +#include "compiler.h" + namespace art { class Compiler; class CompilerDriver; +class Mir2Lir; +class PassManager; + +class QuickCompiler : public Compiler { + public: + virtual ~QuickCompiler(); + + void Init() OVERRIDE; + + void UnInit() const OVERRIDE; + + bool CanCompileMethod(uint32_t method_idx, const DexFile& dex_file, CompilationUnit* cu) const + OVERRIDE; + + CompiledMethod* Compile(const DexFile::CodeItem* code_item, + uint32_t access_flags, + InvokeType invoke_type, + uint16_t class_def_idx, + uint32_t method_idx, + jobject class_loader, + const DexFile& dex_file) const OVERRIDE; + + CompiledMethod* JniCompile(uint32_t access_flags, + uint32_t method_idx, + const DexFile& dex_file) const OVERRIDE; + + uintptr_t GetEntryPointOf(mirror::ArtMethod* method) const OVERRIDE + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + + bool WriteElf(art::File* file, + OatWriter* oat_writer, + const std::vector& dex_files, + const std::string& android_root, + bool is_host) const + OVERRIDE + SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + + Mir2Lir* GetCodeGenerator(CompilationUnit* cu, void* compilation_unit) const; + + void InitCompilationUnit(CompilationUnit& cu) const OVERRIDE; + + static Compiler* Create(CompilerDriver* driver); + + const PassManager* GetPreOptPassManager() const { + return pre_opt_pass_manager_.get(); + } + const PassManager* GetPostOptPassManager() const { + return post_opt_pass_manager_.get(); + } + + protected: + explicit QuickCompiler(CompilerDriver* driver); -Compiler* CreateQuickCompiler(CompilerDriver* driver); + private: + std::unique_ptr pre_opt_pass_manager_; + std::unique_ptr post_opt_pass_manager_; + DISALLOW_COPY_AND_ASSIGN(QuickCompiler); +}; } // namespace art -- cgit v1.2.3-59-g8ed1b