1e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier/* 2e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * Copyright 2015 The Android Open Source Project 3e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * 4e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * Licensed under the Apache License, Version 2.0 (the "License"); 5e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * you may not use this file except in compliance with the License. 6e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * You may obtain a copy of the License at 7e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * 8e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * http://www.apache.org/licenses/LICENSE-2.0 9e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * 10e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * Unless required by applicable law or agreed to in writing, software 11e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * distributed under the License is distributed on an "AS IS" BASIS, 12e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * See the License for the specific language governing permissions and 14e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier * limitations under the License. 15e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier */ 16e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 17e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#ifndef ART_COMPILER_JIT_JIT_COMPILER_H_ 18e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#define ART_COMPILER_JIT_JIT_COMPILER_H_ 19e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 20e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "base/mutex.h" 21e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "compiled_method.h" 22e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "dex/quick/dex_file_to_method_inliner_map.h" 23e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "driver/compiler_driver.h" 24e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "driver/compiler_options.h" 25e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 26e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartiernamespace art { 27e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 28e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartierclass ArtMethod; 29e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartierclass InstructionSetFeatures; 30e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 31e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartiernamespace jit { 32e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 33e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartierclass JitCompiler { 34e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier public: 35e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier static JitCompiler* Create(); 36e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier virtual ~JitCompiler(); 37bcd94c8ea9bde4e075c25fbdfb3a2ef6858eed7bNicolas Geoffray 38bcd94c8ea9bde4e075c25fbdfb3a2ef6858eed7bNicolas Geoffray // Compilation entrypoint. Returns whether the compilation succeeded. 39b331febbab8e916680faba722cc84b66b84218a3Nicolas Geoffray bool CompileMethod(Thread* self, ArtMethod* method, bool osr) 4090443477f9a0061581c420775ce3b7eeae7468bcMathieu Chartier SHARED_REQUIRES(Locks::mutator_lock_); 41bcd94c8ea9bde4e075c25fbdfb3a2ef6858eed7bNicolas Geoffray 42a25dce9b452ba17ef7cef768926c884177a3025eNicolas Geoffray CompilerOptions* GetCompilerOptions() const { 43a25dce9b452ba17ef7cef768926c884177a3025eNicolas Geoffray return compiler_options_.get(); 44a25dce9b452ba17ef7cef768926c884177a3025eNicolas Geoffray } 455d8112029d0e085c5a0099257daa4c7e29c12310David Srbecky CompilerDriver* GetCompilerDriver() const { 465d8112029d0e085c5a0099257daa4c7e29c12310David Srbecky return compiler_driver_.get(); 475d8112029d0e085c5a0099257daa4c7e29c12310David Srbecky } 48e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 49e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier private: 50e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier std::unique_ptr<CompilerOptions> compiler_options_; 51e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier std::unique_ptr<CumulativeLogger> cumulative_logger_; 52e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier std::unique_ptr<DexFileToMethodInlinerMap> method_inliner_map_; 53e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier std::unique_ptr<CompilerDriver> compiler_driver_; 54e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier std::unique_ptr<const InstructionSetFeatures> instruction_set_features_; 55a25dce9b452ba17ef7cef768926c884177a3025eNicolas Geoffray std::unique_ptr<File> perf_file_; 56e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 570c3c2668ef44fdbd18d97f9134a85d1a7d561aa4Nicolas Geoffray JitCompiler(); 580c3c2668ef44fdbd18d97f9134a85d1a7d561aa4Nicolas Geoffray 590c3c2668ef44fdbd18d97f9134a85d1a7d561aa4Nicolas Geoffray // This is in the compiler since the runtime doesn't have access to the compiled method 600c3c2668ef44fdbd18d97f9134a85d1a7d561aa4Nicolas Geoffray // structures. 61bcd94c8ea9bde4e075c25fbdfb3a2ef6858eed7bNicolas Geoffray bool AddToCodeCache(ArtMethod* method, const CompiledMethod* compiled_method) 621dad3f68b7f5a4a4cb2b281413357adc2309a8fdNicolas Geoffray SHARED_REQUIRES(Locks::mutator_lock_); 633130cdf29eb203be0c38d1107a65d920ec39c106Mathieu Chartier 643130cdf29eb203be0c38d1107a65d920ec39c106Mathieu Chartier DISALLOW_COPY_AND_ASSIGN(JitCompiler); 65e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier}; 66e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 67e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier} // namespace jit 68e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier} // namespace art 69e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier 70e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#endif // ART_COMPILER_JIT_JIT_COMPILER_H_ 71