jvmciCompiler.hpp revision 9287:40bd4478a362
1/*
2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24#ifndef SHARE_VM_JVMCI_JVMCI_COMPILER_HPP
25#define SHARE_VM_JVMCI_JVMCI_COMPILER_HPP
26
27#include "compiler/abstractCompiler.hpp"
28#include "jvmci/jvmciEnv.hpp"
29#include "utilities/exceptions.hpp"
30
31class JVMCICompiler : public AbstractCompiler {
32private:
33  bool _bootstrapping;
34
35  /**
36   * Number of methods compiled by JVMCI. This is not synchronized
37   * so may not be 100% accurate.
38   */
39  volatile int _methodsCompiled;
40
41  static JVMCICompiler* _instance;
42
43  static elapsedTimer _codeInstallTimer;
44
45public:
46  JVMCICompiler();
47
48  static JVMCICompiler* instance(TRAPS) {
49    if (!EnableJVMCI) {
50      THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), "JVMCI is not enabled")
51    }
52    return _instance;
53  }
54
55  virtual const char* name() { return "JVMCI"; }
56
57  virtual bool supports_native()                 { return true; }
58  virtual bool supports_osr   ()                 { return true; }
59
60  bool is_jvmci()                                { return true; }
61  bool is_c1   ()                                { return false; }
62  bool is_c2   ()                                { return false; }
63
64  bool needs_stubs            () { return false; }
65
66  // Initialization
67  virtual void initialize();
68
69  void bootstrap();
70
71  // Compilation entry point for methods
72  virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive);
73
74  void compile_method(methodHandle target, int entry_bci, JVMCIEnv* env);
75
76  virtual bool is_trivial(Method* method);
77
78  // Print compilation timers and statistics
79  virtual void print_timers();
80
81  // Print compilation statistics
82  void reset_compilation_stats();
83
84  // Print compilation timers and statistics
85  static void print_compilation_timers();
86
87  static elapsedTimer* codeInstallTimer() { return &_codeInstallTimer; }
88};
89
90#endif // SHARE_VM_JVMCI_JVMCI_COMPILER_HPP
91