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